如何告诉emacs不要在M-x编译或elisp编译错误上拆分窗口?

时间:2011-07-08 02:31:12

标签: emacs elisp

当我执行 M-x compile 或得到elisp编译错误时,我的emacs会垂直拆分窗口,并在新窗口中显示编译输出/错误消息。我更喜欢在全屏窗口中使用缓冲区,因为垂直分割窗口对我来说太窄了。我可以告诉emacs 拆分窗口并对编译/错误缓冲区执行 M-x switch-buffer 吗?

编辑:Trey的建议适用于编译。有没有办法为所有拆分窗口的命令设置它?我想到的三个是elisp编译, M-x apropos M-x出现

3 个答案:

答案 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)