2011-07-08 30 views
5

當我執行M-x編譯或得到elisp編譯錯誤時,我的emacs垂直分割窗口,並在新窗口中顯示編譯輸出/錯誤消息。我更喜歡在全屏窗口中使用緩衝區,因爲垂直分割窗口對我來說太狹窄了。我可以告訴emacs 不是拆分窗口,並做一個M-x切換緩衝區到編譯/錯誤緩衝區?如何告訴emacs不要在M-x編譯或elisp編譯錯誤上拆分窗口?

編輯:Trey的建議適用於編譯。有沒有辦法爲分割窗口的所有命令設置它?我想到的三個是elisp編譯,M-x aproposM-x出現

+1

如果這被改寫爲* elisp *的問題,它應該是話題。 – Arafangion

+1

@Arafangion我認爲它屬於常見問題解答中常見的'程序員'部分常用的軟件工具。關於SO的編輯有很多問題。 – jonsca

回答

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細節。

+0

工作!但是有沒有辦法爲M-x發生或M-x apropos? – benhsu

+0

@benhsu Yup,更新。 –

+0

對於'M-x compile',使用:'M-x customize-variable RET same-window-regexps RET'並添加正則表達式'\ * compilation \ *' – user1735594

2

我的猜測是你想自定義split-window-preferred-function變量。默認值是split-window-sensibly。您應該將其更改爲只切換當前緩衝區的自定義版本。

這似乎工作:

(defun no-split-window() 
    (interactive) 
    nil) 

(setq split-window-preferred-function 'no-split-window) 
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)