当我执行 M-x compile 或得到elisp编译错误时,我的emacs会垂直拆分窗口,并在新窗口中显示编译输出/错误消息。我更喜欢在全屏窗口中使用缓冲区,因为垂直分割窗口对我来说太窄了。我可以告诉emacs 不拆分窗口并对编译/错误缓冲区执行 M-x switch-buffer 吗?
编辑:Trey的建议适用于编译。有没有办法为所有拆分窗口的命令设置它?我想到的三个是elisp编译, M-x apropos 和 M-x出现。
答案 0 :(得分:5)
试试这个:
(setq compilation-window-height 1000)
你可以看中并实际计算框架中的文字行数... (/ (frame-pixel-height) (frame-char-height))
,但这看起来很傻。
Io控制Emacs通常如何显示缓冲区,您可以配置变量same-window-regexps
以匹配所有缓冲区名称,然后使用display-buffer
显示缓冲区的所有命令将使用相同的窗口:
(setq same-window-regexps '("."))
有关详细信息,请参阅Choosing a Window。
答案 1 :(得分:3)
我的猜测是你要自定义split-window-preferred-function
变量。默认值为split-window-sensibly
。您应该将其更改为仅切换当前缓冲区的自定义版本。
这似乎有效:
(defun no-split-window ()
(interactive)
nil)
(setq split-window-preferred-function 'no-split-window)
答案 2 :(得分:0)
这是我用于编译窗口的内容。如果没有错误或警告,它将显示编译输出缓冲区一秒钟,然后将其终止。否则缓冲区会停留,因为您可能希望找到错误并修复它们。我是从a newsgroup得到的。
(defun kill-compile-buffer-if-successful (buffer string) " kill a compilation buffer if succeeded without warnings " (if (and (string-match "compilation" (buffer-name buffer)) (string-match "finished" string) (not (with-current-buffer buffer (search-forward "warning" nil t)))) (run-with-timer 1 nil 'kill-buffer buffer))) (add-hook 'compilation-finish-functions 'kill-compile-buffer-if-successful)