2010-02-05 111 views
6

我想實現編譯緩衝區自動摺疊爲小尺寸(但不能在刪除窗口關閉),以便成功編譯爲窗口後縮小到最小尺寸。emacs以編程方式更改窗口大小

get-buffer-create返回緩衝區。我怎麼能shrink-window窗口關聯到該緩衝區?另外,有沒有辦法存儲以前的窗口大小?

這是我第一次進入emacs lisp編程,感謝您的幫助。

回答

8

我相信有兩種方法可以解決這個問題。

第一種方法是使用掛鉤`「彙編精加工函數」,這是 :

unctions並[f的列表]當一個編譯過程完成調用。 每個函數都有兩個參數調用:編譯緩衝區, 和描述過程如何完成的字符串。

導致這樣一個解決方案:

(add-hook 'compilation-finish-functions 'my-compilation-finish-function) 
(defun my-compilation-finish-function (buffer resstring) 
    "Shrink the window if the process finished successfully." 
    (let ((compilation-window-height (if (string-match-p "finished" resstring) 5 nil))) 
    (compilation-set-window-height (get-buffer-window buffer 0)))) 

我有這個解決方案唯一的問題是,它假定成功可以通過查找字符串來決定的結果字符串「已完成」。

另一種選擇是建議'compilation-handle-exit - 哪個 明確地通過了退出狀態。我寫了這個建議,當退出狀態不爲零時,它會縮小窗口。

(defadvice compilation-handle-exit (around my-compilation-handle-exit-shrink-height activate) 
    (let ((compilation-window-height (if (zerop (car (ad-get-args 1))) 5 nil))) 
    (compilation-set-window-height (get-buffer-window (current-buffer) 0)) 
    ad-do-it)) 

注意:如果當你做你的第二個編譯的*compilation*窗口仍然可見,它不會被調整失敗時更大。如果您希望調整大小,則需要指定高度而不是nil。或許,這將是自己的喜好(改變第一個例子):

(if (string-match-p "finished" resstring) 5 (/ (frame-height) 2)) 

nil(/ (frame-height) 2)

取代
相關問題