如何防止编译 - 滚动输出在递归编辑过程中“脱落”?

时间:2011-12-16 00:06:44

标签: emacs elisp

当Emacs输入recursive-edit时 - 例如当输入 Mx (AKA execute-extended-command)的迷你缓冲区时 - 它似乎记住当前状态的某些方面,并恢复如果递归编辑退出时出现错误。恢复状态的位数是所有可见窗口的(window-point)

这意味着如果您将compilation-scroll-output设置为t,那么:

  1. 你正在运行(compile ...)正在做的事情,逐渐产生输出......
  2. 然后你点击 M-x 并开始输入扩展命令......
  3. 然后你暂停片刻思考,同时产生一些额外的输出线......
  4. 然后认为你最好更好地考虑那个扩展命令,并点击 C-g 取消它......
  5. 将会发生的事情是编译窗口中的点将向后跳转到步骤2开头的位置。这意味着编译窗口中的点不再是(point-max),并且因此,当生成新输出时,窗口会停止滚动。

    我不了解你,但由于我正常使用Emacs,我倾向于进行至少一些递归编辑并取消至少一些。所以这意味着在某些时候,我的编辑窗口总是不稳定,我必须经常切换到它和 M->

    是否有customize选项可以禁用此行为,以便window-point保持原样,或者修复问题的elisp片段,甚至是递归时执行的特定挂钩编辑已退出,有足够的信息可以告诉退出编辑之前该点的位置?

2 个答案:

答案 0 :(得分:1)

  1. M-x 不会进入递归编辑。有关递归编辑的信息,请参阅Emacs手册节点Recursive Edit
  2. 你所描述的听起来像是一个Emacs错误。考虑使用M-x report-emacs-bug,提供您的食谱(最好从emacs -Q开始)。

答案 1 :(得分:1)

这确实是一个错误,你最好用M-x report-emacs-bug报告它,以便它可以在某个时候得到修复。同时,一种解决方法是将编译缓冲区放在一个单独的帧中,因为此迷你缓冲区输入执行的“保存和恢复”仅影响当前帧。