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
emacs -Q
, ativar a depuraçãoM-x debug-on-entry deactivate-mark
, ativar a marcaC-<SPC>
, digite um caractere.deactiveate-mark
e, em sua função de aconselhamento, usarbacktrace-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
ebacktrace-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 depuradogdb
.Respostas:
De
command_loop_1
dentrokeyboard.c
.Esse parece ser o único lugar onde
Qdeactivate_mark
é chamado em todossrc/*.c
. Então, meu palpite é que é nisso que você está se deparando.Note, eu não sou um especialista em Emacs C. Eu remexia com
gdb --args src/emacs -Q
depois de ler Como compilar emacs com símbolos de depuração? .fonte