【问题标题】:how to prevent compilation-scroll-output from coming "unstuck" during recursive edit?如何在递归编辑期间防止编译滚动输出“卡住”?
【发布时间】:2012-04-06 04:46:44
【问题描述】:

当 Emacs 进入 recursive-edit 时——例如,当进入 M-x(AKA execute-extended-command)的 minibuffer 时——它似乎会记住当前状态的某些方面,并在递归时恢复它们编辑退出并出现错误。恢复的状态位包括所有可见窗口的(window-point)

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

  1. 你运行(compile ...),它正在做它的事情,逐渐产生输出......
  2. 然后你点击 M-x 并开始输入扩展命令...
  3. 然后你会停下来想一想,同时产生了几行额外的输出...
  4. 然后认为你认为那个扩展命令更好,然后按 C-g 取消它...

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

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

是否有一个 customize 选项来禁用此行为,以便 window-point 停留在原处,或者修复问题的 elisp 的 sn-p,或者甚至是在递归编辑时执行的特定钩子已退出,并且有足够的信息来说明退出该编辑之前该点的位置?

【问题讨论】:

    标签: emacs elisp


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

    【讨论】:

    • Drew,说到你的第一点:是的,确实如此。从您引用的文档中:“Minibuffer 输入是一种特殊的递归编辑。” M-x 触发 minibuffer 输入。 C-] (AKA abort-recursive-edit) 在 M-x 迷你缓冲区(或 read-from-minibuffercompleting-read 或任何其他递归编辑)中导致与 C-g (AKA keyboard-quit) 完全相同的效果,我我在抱怨。
    • 第二点:我不确定这是一个错误(在进入递归编辑之前保留某些编辑器状态非常有意义),但即使它是;我使用了很多机器,而且我必须使用我在其中许多机器上找到的 Emacs 版本。即使潜在的行为最终会发生变化,我也真的很想找到一种解决方法。
    • 是和不是。我指出的文档在 Emacs 手册中。您参考 Elisp 手册(相同的节点名称)。是的,minibuffer 是一种递归编辑。不,这不是普通的递归编辑。它与模式行中 [[[...]]] 指示的递归编辑平行——每个都有一个单独的递归编辑级别堆栈。但你也说得对,效果和你抱怨的一样。
    • 我也不确定这是否是一个错误。但是,如果您提交错误报告,您会发现。正如您清楚地指出的那样,至少在某些情况下这是一个麻烦。 M-x report-emacs-bug 用于增强请求以及错误。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-08
      • 1970-01-01
      • 2021-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-13
      相关资源
      最近更新 更多