Saya telah menemukan masalah bahwa wilayah dinonaktifkan (dalam mode tanda-transien). Fungsi deactivate-markdipanggil dan saya ingin mencari tahu dari mana (dan mengapa) itu dipanggil.
Saya mencoba M-x debug-on-entry RET deactivate-markdan 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-defuntetapi Edebug tidak menunjukkan penelepon juga.
Bagaimana saya mengetahui mengapa (dari mana) deactivate-markdisebut? Saya mencari fungsi backtrace atau stacktrace.
EDIT:
Sebuah advice-addtrik:
(defun message-show-backtrace ()
(message "%s" (backtrace-frame 10)))
(advice-add deactivate-mark :before #'message-show-backtrace)
menghasilkan nildalam *Messages*.
Edit: info lebih lanjut tentang deactivate-mark: http://emacshorrors.com/posts/deactivate-mark.html
deactiveate-markdan dalam fungsi saran Anda gunakan backtrace-framesuntuk mendapatkan tampilan dari seluruh tumpukan panggilan jika edebug tidak menunjukkan apa yang Anda harapkan.
advice-adddan backtrace-frame. Itu tidak membantu.
self-insert-commanddan "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.