我最近从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` ,则不会打开新窗口。只有当我手动浏览*编译*缓冲区并按下输入错误或警告时,或者在第三个缓冲区窗口出现时鼠标单击警告。
答案 0 :(得分:4)
next-error
功能中使用的功能是pop-to-buffer
,后者又使用split-window-sensibly
。您可以通过调整变量split-window-sensibly
和split-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
,那么可能会为您做出这些决定。