【问题标题】:Emacs 23.2 opens a new window for each compile error/warning navigated toEmacs 23.2 为导航到的每个编译错误/警告打开一个新窗口
【发布时间】:2010-05-11 18:11:32
【问题描述】:

我最近从 Carbon Emacs (v22.3) 升级到 vanilla Emacs 23.2(来自 http://www.emacsformacosx.com)。在 Carbon Emacs 上编译项目时,框架分为两部分,当前源文件/SConscript 在顶部窗口中,编译输出在底部窗口中。我会按 C-x ` 导航到编译输出中的第一个警告或错误,它会将顶部窗口中的任何内容替换为错误或警告所在的源文件。

然而,在 Emacs 23.2 中,打开了第三个窗口,导致两个窗口在框架的上半部分打开(垂直拆分),编译输出在框架的下半部分的窗口中。如何告诉 Emacs 不要打开新窗口,而是在框架中现有的非编译器输出窗口中打开代码?


进一步澄清我刚刚注意到的行为。如果我在包含源文件或 SConscript 文件的缓冲区处于活动状态时点击 C-x `,则不会打开新窗口。仅当我手动浏览 *compilation* 缓冲区并在出现错误或警告时按 Enter 键,或者在出现第三个缓冲区窗口时鼠标单击警告时才会这样做。

【问题讨论】:

    标签: emacs elisp


    【解决方案1】:

    next-error 功能中使用的函数是pop-to-buffer,而split-window-sensibly 又使用了split-window-sensibly。您可以通过调整变量split-width-thresholdsplit-height-threshold 来控制split-window-sensibly 的行为。

    在您的情况下,split-width-threshold 太小了。在我的 emacs 23.1 中设置为 160。只需将其设置为更大的数字即可解决问题:

    (setq split-width-threshold 200)
    

    【讨论】:

      【解决方案2】:

      我自己无法重现此问题,但您可以尝试以下方法:

      (setq split-width-threshold nil)
      

      这告诉display-buffer 永远不要水平分割窗口,即使它们很宽。还有一个split-height-threshold 变量,其处理方式类似。检查这些变量的当前值可能会表明它们是否与您所看到的行为相关。

      最后一件事要检查:如果您已经定义了自己的 display-buffer-function,那可能会为您做出这些决定。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-04-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多