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

arm*_*nes 7 size emacs fonts

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

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

小智 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))))))
Run Code Online (Sandbox Code Playgroud)