J'ai rencontré un problème de région désactivée (en mode marque transitoire). La fonction deactivate-mark
est appelée et je voudrais savoir d'où (et pourquoi) elle est appelée.
J'ai essayé M-x debug-on-entry RET deactivate-mark
et ça s'arrête mais je n'ai trouvé aucun moyen de trouver l'appelant. Le stacktrace affiché est:
Debugger entered--entering a function:
* deactivate-mark()
J'ai essayé M-x edebug-eval-defun
mais Edebug ne montre pas non plus l'appelant.
Comment savoir pourquoi (d'où) deactivate-mark
est appelé? Je recherche la fonction backtrace ou stacktrace.
ÉDITER:
Une advice-add
astuce:
(defun message-show-backtrace ()
(message "%s" (backtrace-frame 10)))
(advice-add deactivate-mark :before #'message-show-backtrace)
produit nil
en *Messages*
.
Edit: plus d'informations sur deactivate-mark
: http://emacshorrors.com/posts/deactivate-mark.html
emacs -Q
, activez le débogageM-x debug-on-entry deactivate-mark
, activez la marqueC-<SPC>
, tapez un caractère.deactiveate-mark
et utiliser dans votre fonction de conseilbacktrace-frames
pour obtenir une vue de la pile d'appels entière si edebug ne montre pas ce que vous attendez.advice-add
etbacktrace-frame
. Cela n'a pas aidé.self-insert-command
et que "self-insert-command est une fonction intégrée interactive en 'code source C'". " Ceci, ainsi que l'autre comportement noté jusqu'à présent, suggère que l'on devra déboguer avecgdb
.Réponses:
De l'
command_loop_1
intérieurkeyboard.c
.Cela semble être le seul endroit où
Qdeactivate_mark
est appelé dans toussrc/*.c
. Donc, je suppose que c'est ce que vous rencontrez.Remarque, je ne suis pas un expert sur Emacs C. J'ai fouillé avec
gdb --args src/emacs -Q
après avoir lu Comment compiler emacs avec des symboles de débogage? .la source