Wystąpił problem polegający na tym, że region jest dezaktywowany (w trybie znaku przejściowego). Funkcja deactivate-mark
jest wywoływana i chciałbym dowiedzieć się, skąd (i dlaczego) jest ona wywoływana.
Próbowałem M-x debug-on-entry RET deactivate-mark
i przestało, ale nie znalazłem sposobu, aby dowiedzieć się, kto dzwoni. Cały wyświetlany stacktrace to:
Debugger entered--entering a function:
* deactivate-mark()
Próbowałem, M-x edebug-eval-defun
ale Edebug też nie pokazuje dzwoniącego.
Jak dowiedzieć się, dlaczego (skąd) deactivate-mark
jest wywoływany? Szukam funkcjonalności śledzenia wstecznego lub stosu.
EDYTOWAĆ:
advice-add
Trick:
(defun message-show-backtrace ()
(message "%s" (backtrace-frame 10)))
(advice-add deactivate-mark :before #'message-show-backtrace)
produkuje nil
w *Messages*
.
Edycja: więcej informacji na temat deactivate-mark
: http://emacshorrors.com/posts/deactivate-mark.html
deactiveate-mark
korzystając z funkcji porad, backtrace-frames
aby uzyskać widok całego stosu wywołań, jeśli edebug nie pokazuje tego, czego oczekujesz.
advice-add
i backtrace-frame
. To nie pomogło.
self-insert-command
i „self-insert-command to interaktywna wbudowana funkcja w„ kodzie źródłowym C ”.” To, wraz z innymi zaobserwowanymi do tej pory zachowaniami, sugeruje, że trzeba będzie debugować gdb
.
emacs -Q
, włącz debugowanieM-x debug-on-entry deactivate-mark
, aktywuj znakC-<SPC>
, wpisz postać.