2012-06-08 108 views
5

我在小型上網本上使用Emacs編寫代碼,並且設置了字體大小,以便大約填充列(79)字符填充單個「最大化」窗口的寬度(即相當大的字體大小)。但是,如果我並排打開兩個窗口,我希望這些窗口中的字體大小自動縮小,以便每個窗口的寬度至少可容納79個字符。Emacs根據窗口寬度和填充列動態更改字體大小

在我開始深入研究之前(我對Lisp不擅長),是否可以在每個調整大小時獲得窗口的寬度,將其除以填充列,然後根據該結果選擇等寬字體大小?

+0

它應該是可能的,儘管您的字體首選項在確定每次拆分和非拆分之後的字體高度時可能會發揮一定的作用。看看這些函數'frame-pixel-width'' frame-char-width''set-face-attribute' – kindahero

回答

2

在我看來,正確的地點做這將是window-size-change-functions:重新顯示之前調用

功能,如果窗口大小有 改變。該值應該是一個採用一個 參數的函數列表。在重新顯示之前,對於每個幀,如果自上次重新顯示以來窗口的任何一個已經改變大小,或者已經被拆分或刪除了,則列表中的所有功能都被調用,幀的參數爲 。

具體來說,堅持這樣的事情在你的.emacs

(defun window-width-to-font-size (window-width) 
    ;; Insert a calculation to turn window width into 79 chars. 
) 

(add-to-list 
'window-size-change-functions 
(lambda (frame) 
    (dolist (window (window-list frame)) 
    (set-face-attribute 
     'default nil 
     :width (window-width-to-font-size (window-body-width window)))))) 
0

也許看看圖書館face-remap+.el,其本質則正好相反:當你縮小文本大小窗口的大小相應縮小,所以文本週圍沒有浪費額外的空間。不知道該代碼是否有用,但它可能會給你一些想法。

相關問題