Ich habe ein Problem festgestellt, dass die Region deaktiviert ist (im Transient-Mark-Modus). Die Funktion deactivate-mark
wird aufgerufen und ich möchte herausfinden, woher (und warum) sie aufgerufen wird.
Ich habe es versucht M-x debug-on-entry RET deactivate-mark
und es hört auf, aber ich habe keine Möglichkeit gefunden, den Anrufer herauszufinden. Die gesamte angezeigte Stapelverfolgung ist:
Debugger entered--entering a function:
* deactivate-mark()
Ich habe es versucht, M-x edebug-eval-defun
aber Edebug zeigt den Anrufer auch nicht an.
Wie finde ich heraus, warum (woher) gerufen deactivate-mark
wird? Ich suche nach Backtrace- oder Stacktrace-Funktionalität.
BEARBEITEN:
Ein advice-add
Trick:
(defun message-show-backtrace ()
(message "%s" (backtrace-frame 10)))
(advice-add deactivate-mark :before #'message-show-backtrace)
produziert nil
in *Messages*
.
Bearbeiten: Weitere Informationen zu deactivate-mark
: http://emacshorrors.com/posts/deactivate-mark.html
deactiveate-mark
und in Ihrer Beratungsfunktion verwenden backtrace-frames
, um einen Überblick über den gesamten Aufrufstapel zu erhalten, wenn edebug nicht anzeigt, was Sie erwarten.
advice-add
und hinzugefügt backtrace-frame
. Es hat nicht geholfen.
self-insert-command
und "Self-Insert-Command eine interaktive integrierte Funktion in 'C-Quellcode' ist." Dies, zusammen mit dem anderen Verhalten, das bisher festgestellt wurde, deutet darauf hin, dass man mit debuggen muss gdb
.
emacs -Q
, DebugM-x debug-on-entry deactivate-mark
aktivieren, Markierung aktivieren, Zeichen eingebenC-<SPC>
.