我最近从 Carbon Emacs (v22.3) 升级到 vanilla Emacs 23.2(来自 http://www.emacsformacosx.com)。在 Carbon Emacs 上编译项目时,框架被分成两部分,当前源文件/SConscript 在顶部窗口,编译输出在底部窗口。我点击 C-x ` 导航到编译输出中的第一个警告或错误,它将用错误或警告所在的源文件替换顶部窗口中的任何内容。
然而,在 Emacs 23.2 中,打开了第三个窗口,导致在框架的上半部分(垂直拆分)打开两个窗口,并在框架的下半部分的窗口中打开编译输出。如何告诉 Emacs 不要打开新窗口,而是在框架中现有的非编译器输出窗口中打开代码?
进一步澄清我刚刚注意到的行为。如果在包含源文件或 SConscript 文件的缓冲区处于事件状态时按下 C-x `,则不会打开新窗口。只有当我手动浏览*编译*缓冲区并在出现错误或警告时按回车键,或者在出现第三个缓冲区窗口时鼠标单击警告。
最佳答案
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)
关于Emacs 23.2 为导航到的每个编译错误/警告打开一个新窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2813273/