我遇到了一个问题,即区域被停用(在瞬态标记模式下)。该函数deactivate-mark
被调用,我想知道从哪里(以及为什么)调用它。
我尝试了一下M-x debug-on-entry RET deactivate-mark
,但它停止了,但是我找不到找到呼叫者的方法。整个显示的堆栈跟踪为:
Debugger entered--entering a function:
* deactivate-mark()
我尝试过,M-x edebug-eval-defun
但是Edebug也不显示调用方。
我如何找出为什么(从哪里)deactivate-mark
被调用?我正在寻找backtrace或stacktrace的功能。
编辑:
一个advice-add
窍门:
(defun message-show-backtrace ()
(message "%s" (backtrace-frame 10)))
(advice-add deactivate-mark :before #'message-show-backtrace)
nil
在产生*Messages*
。
编辑:有关更多信息deactivate-mark
:http : //emacshorrors.com/posts/deactivate-mark.html
您可以建议
—
Jordon Biondo
deactiveate-mark
,backtrace-frames
如果edebug没有显示您的期望,则可以在建议功能中使用来查看整个调用堆栈。
添加了有关
—
Gracjan Polak
advice-add
和的修改backtrace-frame
。它没有帮助。
关于@AndrewSwann的复制,值得注意的是键入字符通常会运行,
—
Joe Corneli 2015年
self-insert-command
并且“ self-insert-command是'C源代码'中的交互式内置函数”。这与到目前为止提到的其他行为一起表明,必须使用进行调试gdb
。
通过阅读问题,听起来好像标记被意外停用了。同时,@ AndrewSwann描述的行为是完全可以预期的(键入内容时该区域被禁用)。如果您得到的行为与安德鲁的行为相符,请说明您要做什么。
—
马拉巴(Malabarba)
emacs -Q
,打开调试M-x debug-on-entry deactivate-mark
,激活标记C-<SPC>
,输入字符。