Emacs 23.2为导航到的每个编译错误/警告打开一个新窗口

时间:2010-05-11 18:11:33

标签: emacs elisp

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

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


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

2 个答案:

答案 0 :(得分:4)

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

在你的情况下,split-width-threshold太小了。在我的emacs 23.1中它被设置为160.只需将其设置为更大的数字,问题应该解决:

(setq split-width-threshold 200)

答案 1 :(得分:2)

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

(setq split-width-threshold nil)

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

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