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

7
最近我从Carbon Emacs (v22.3) 升级到了vanilla Emacs 23.2 (http://www.emacsformacosx.com). 在Carbon Emacs中编译项目时,窗口被分成两个部分,当前源文件/SConscript在顶部窗口,编译输出在底部窗口。我会按下C-x `键来导航到编译输出中的第一个警告或错误,并用源文件替换顶部窗口中的任何内容。
然而,在Emacs 23.2中,会打开第三个窗口,导致在框架的上半部分(垂直分割)打开两个窗口,而在底部半部分的窗口中则是编译输出。如何告诉Emacs不要打开新窗口,而是在框架中打开现有的非编译器输出窗口?
我刚才注意到的行为需要进一步澄清。如果我在包含源文件或SConscript文件的缓冲区处按下C-x `,则不会打开新窗口。只有当我手动浏览*编译*缓冲区并在错误或警告上按Enter键,或者在第三个缓冲区窗口中单击警告时,才会出现新窗口。
2个回答

4
next-error功能中使用的函数是pop-to-buffer,它又使用了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,那么它可能会为您做出这些决策。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接