当 Emacs 进入 recursive-edit
时 - 例如当进入 M-x 的迷你缓冲区时(又名 execute-extended-command
) -它似乎记得当前状态的某些方面,并在递归编辑因错误退出时恢复它们。在恢复的状态位中是所有可见窗口的 (window-point)
。
这意味着如果您将 compilation-scroll-output
设置为 t
,然后:
- 你运行
(compile ...)
它正在做它的事情,逐渐产生输出... - 然后你点击 M-x 并开始输入扩展命令...
- 然后你停下来想一想,同时产生了一些额外的输出行......
- 然后认为您认为该扩展命令毕竟更好,然后按 C-g 取消它...
将会发生的是,你的编译窗口中的点将向后跳到步骤 2 开始时的位置。这意味着编译窗口中的点不再位于 (point-max )
,因此当产生新的输出时窗口停止滚动。
我不了解你,但由于我通常使用 Emacs,所以我倾向于至少进行一些递归编辑并至少取消其中一些。所以这意味着在某些时候,我的编译窗口总是无法卡住,我必须经常切换到它和 M->。
是否有 customize
选项来禁用此行为,以便 window-point
保持在原处,或者是修复问题的 elisp 片段,甚至是退出递归编辑时执行的特定 Hook ,具有足够的信息来判断退出编辑之前点的位置?
最佳答案
- M-x 不进入递归编辑。有关递归编辑的信息,请参阅 Emacs 手册,节点
Recursive Edit
。 - 您所描述的听起来像是 Emacs 错误。考虑使用
M-x report-emacs-bug
,提供您的方法(最好从emacs -Q
开始)。
关于emacs - 如何在递归编辑期间防止编译滚动输出出现 "unstuck"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8528313/