2012-06-08 73 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,其本质则正好相反:当你缩小文本大小窗口的大小相应缩小,所以文本周围没有浪费额外的空间。不知道该代码是否有用,但它可能会给你一些想法。

相关问题