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

时间:2014-01-01 06:33:49

标签: linux emacs fonts x11

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

emacs中是否只有一个函数只更改当前缓冲区的字体(默认字体),而不修改任何其他缓冲区中的字体?

3 个答案:

答案 0 :(得分:3)

从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))

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

答案 1 :(得分:2)

我找到了一种方法,虽然它有一些副作用,因为它改变了全局变量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))

答案 2 :(得分:0)

不,据我所知,你不能。在GNU Emacs中,字体是面部的一部分。除非您(例如,仅将特定面部用于所需的缓冲区),并且将该面部的字体设置为您想要的字体,否则我认为您无法实现您的要求。