Emacs根据窗口宽度和填充列动态更改字体大小

时间:2012-06-08 14:36:39

标签: emacs fonts size

我在小型上网本上使用Emacs来编写代码,我设置了字体大小,使得大约填充列(79)字符填充单个“最大化”窗口的宽度(即相当大的字体大小) )。但是,如果我并排打开两个窗口,我希望这些窗口中的字体大小自动缩小,这样每个窗口的宽度至少可以容纳79个字符。

在我开始深入研究之前(我不擅长Lisp),是否可以在每个调整大小上获取窗口的宽度,将其除以填充列,并根据该结果选择等宽字体大小?

2 个答案:

答案 0 :(得分: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))))))

答案 1 :(得分:0)

也许看一下库face-remap+.el,它实际上恰恰相反:缩小文本大小时,窗口大小会相应缩小,因此文本周围没有浪费的额外空间。不知道该代码是否会有所帮助,但它可能会给你一些想法。