我想實現編譯緩衝區自動摺疊爲小尺寸(但不能在刪除窗口關閉),以便成功編譯爲窗口後縮小到最小尺寸。emacs以編程方式更改窗口大小
get-buffer-create
返回緩衝區。我怎麼能shrink-window
窗口關聯到該緩衝區?另外,有沒有辦法存儲以前的窗口大小?
這是我第一次進入emacs lisp編程,感謝您的幫助。
我想實現編譯緩衝區自動摺疊爲小尺寸(但不能在刪除窗口關閉),以便成功編譯爲窗口後縮小到最小尺寸。emacs以編程方式更改窗口大小
get-buffer-create
返回緩衝區。我怎麼能shrink-window
窗口關聯到該緩衝區?另外,有沒有辦法存儲以前的窗口大小?
這是我第一次進入emacs lisp編程,感謝您的幫助。
我相信有兩種方法可以解決這個問題。
第一種方法是使用掛鉤`「彙編精加工函數」,這是 :
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)