Eu atingi um problema em que a região está desativada (no modo de marca transitória). A função deactivate-mark
é chamada e eu gostaria de descobrir de onde (e por que) é chamada.
Eu tentei M-x debug-on-entry RET deactivate-mark
e para, mas não encontrei maneira de descobrir a pessoa que ligou. Todo o rastreamento de pilha exibido é:
Debugger entered--entering a function:
* deactivate-mark()
Eu tentei, M-x edebug-eval-defun
mas o Edebug também não mostra o chamador.
Como descubro por que (de onde) deactivate-mark
é chamado? Estou procurando backtrace ou functinality stacktrace.
EDITAR:
Um advice-add
truque:
(defun message-show-backtrace ()
(message "%s" (backtrace-frame 10)))
(advice-add deactivate-mark :before #'message-show-backtrace)
produz nil
em *Messages*
.
Edit: mais informações sobre deactivate-mark
: http://emacshorrors.com/posts/deactivate-mark.html
deactiveate-mark
e, em sua função de aconselhamento, usar backtrace-frames
para obter uma visão de toda a pilha de chamadas se o edebug não estiver mostrando o que você espera.
advice-add
e backtrace-frame
. Não ajudou.
self-insert-command
e "o comando self-insert-command é uma função interna interativa em 'código-fonte C'". Isso, junto com o outro comportamento observado até agora, sugere que um terá que ser depurado gdb
.
emacs -Q
, ativar a depuraçãoM-x debug-on-entry deactivate-mark
, ativar a marcaC-<SPC>
, digite um caractere.