更改Emacs中当前缓冲区的字体?

Han*_*Sun 5 linux x11 emacs fonts

在emacs中,我可以通过更改当前缓冲区的字体大小text-scale-adjust。但是,要更改字体,我只能找到类似set-face-font或的函数set-frame-font,这些函数会在emacs中全局更改字体(或更改当前帧中所有缓冲区的字体)。

emacs中是否有一个仅更改当前缓冲区的字体(默认字体),而不修改其他缓冲区中的字体的功能?

jmi*_*nez 5

从 Emacs 23 开始,您可以通过 更改每个缓冲区的面M-x buffer-face-set。请参阅http://www.emacswiki.org/emacs/FacesPerBuffer。因此,根据 Firegun 的回答,您可以buffer-set-face像这样使用:

(defun jmi/set-buffer-local-family (font-family)
  "Sets font in current buffer"
  (interactive "sFont Family: ")
  (defface tmp-buffer-local-face 
    '((t :family font-family))
    "Temporary buffer-local face")
  (buffer-face-set 'tmp-buffer-local-face))
Run Code Online (Sandbox Code Playgroud)

(注意:这仍然存在面部名称本身是全局的问题)


Han*_*Sun 4

我找到了一种方法,尽管它有一些副作用,因为它改变了全局变量buffer-face-mode-face

例如,我想设置当前缓冲区,我可以评估这个函数定义并运行它

 (defun my-buffer-face-mode-serif ()
   "Sets a fixed width (monospace) font in current buffer"
   (interactive)
   (setq buffer-face-mode-face '(:family "Times New Roman"))
   (buffer-face-mode))
Run Code Online (Sandbox Code Playgroud)

  • 像 @jmibanez 的答案一样使用 `buffer-face-set` 不会污染全局变量。`buffer-face-set`中的相关代码:`(set (make-local-variable 'buffer-face-mode-face) specs)` (2认同)