Saya telah menemukan masalah bahwa wilayah dinonaktifkan (dalam mode tanda-transien). Fungsi deactivate-mark
dipanggil dan saya ingin mencari tahu dari mana (dan mengapa) itu dipanggil.
Saya mencoba M-x debug-on-entry RET deactivate-mark
dan berhenti tetapi saya tidak menemukan cara untuk mengetahui penelepon. Seluruh stacktrace yang ditampilkan adalah:
Debugger entered--entering a function:
* deactivate-mark()
Saya mencoba M-x edebug-eval-defun
tetapi Edebug tidak menunjukkan penelepon juga.
Bagaimana saya mengetahui mengapa (dari mana) deactivate-mark
disebut? Saya mencari fungsi backtrace atau stacktrace.
EDIT:
Sebuah advice-add
trik:
(defun message-show-backtrace ()
(message "%s" (backtrace-frame 10)))
(advice-add deactivate-mark :before #'message-show-backtrace)
menghasilkan nil
dalam *Messages*
.
Edit: info lebih lanjut tentang deactivate-mark
: http://emacshorrors.com/posts/deactivate-mark.html
deactiveate-mark
dan dalam fungsi saran Anda gunakan backtrace-frames
untuk mendapatkan tampilan dari seluruh tumpukan panggilan jika edebug tidak menunjukkan apa yang Anda harapkan.
advice-add
dan backtrace-frame
. Itu tidak membantu.
self-insert-command
dan "self-insert-command adalah fungsi built-in interaktif dalam 'kode sumber C'." Ini, bersama dengan perilaku lain yang dicatat sejauh ini, menunjukkan bahwa seseorang harus melakukan debug gdb
.
emacs -Q
, nyalakan debugM-x debug-on-entry deactivate-mark
, aktifkan tandaC-<SPC>
, ketikkan karakter.