2011-12-16 63 views
3

当Emacs输入一个recursive-edit时 - 例如当进入一个小型缓冲器时,它似乎记住了当前状态的某些方面,并且在递归编辑退出并返回错误时恢复它们。在恢复的状态位中包括所有可见窗口的(window-point)如何防止编译 - 滚动输出在递归编辑过程中“脱钩”?

这意味着,如果你有compilation-scroll-output设置为t,然后:

  1. 运行(compile ...)这是做它的事,逐渐产生输出...
  2. 然后你打的Mx和启动输入一个扩展的命令...
  3. 然后你暂停一会儿,想一些额外的输出行产生的想法...
  4. 然后认为你认为更好的毕竟扩展命令,并创下CG取消它...

会发生什么是你的编辑窗口中的点将向后跳转到它是在第2步这开始的地方意味着编辑窗口中的点不再位于(point-max)处,因此当新的输出产生时窗口停止滚动。

我不了解你,但由于我正常使用Emacs,我倾向于至少进行一些递归编辑并至少取消其中的一部分。所以这意味着在某些时候,我的编译窗口总是会出现偏差,我必须每隔一段时间切换一次,并且必须切换到它。

是否有customize选项来禁用此行为,以便window-point停留在原来的位置,或者修复问题的elisp片段,甚至是在递归编辑退出时执行的特定挂接要在退出编辑之前知道点的位置?

回答

1
  1. M-x不进入递归编辑。有关递归编辑的信息,请参阅Emacs手册节点Recursive Edit
  2. 你描述的声音听起来像Emacs的bug。考虑使用M-x report-emacs-bug,提供您的配方(最好从emacs -Q开始)。
+0

德鲁,你的第一点:是的,它的确如此。从你引用的文档中:“Minibuffer输入是一种特殊的递归编辑。” M-x触发微型缓冲器输入。在`Mx` minibuffer(或``read-from-minibuffer``,``read-read-minibuffer`或`complete-read`或任何其他递归编辑)中产生完全相同的效果时,作为`Cg`(AKA`keyboard-quit`),我在抱怨。 – Glyph 2011-12-16 18:51:35

1

这确实是一个错误,如果您使用M-x report-emacs-bug来报告它,以便它在某个时候可能得到修复,那将是有益的。与此同时,一种解决方法是将缓冲区放在一个单独的帧中,因为由此小型文件系统输入执行的“保存&恢复”仅影响当前帧。