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

Linux 是否更改Emacs中当前缓冲区的字体?,linux,emacs,fonts,x11,Linux,Emacs,Fonts,X11,在emacs中,我可以通过text scale adjust更改当前缓冲区的字体大小。但是,要更改字体,我只能找到像set face font或set frame font这样的函数,它们将在emacs中全局更改字体(或更改当前帧中所有缓冲区的字体) emacs中是否有只更改当前缓冲区字体(默认字体)而不修改任何其他缓冲区字体的功能?不,据我所知,您不能。在GNU Emacs中,字体是人脸的一部分。例如,除非您仅将特定的面用于所需的缓冲区,并将该面的字体设置为所需的字体,否则我认为您无法实现您的

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


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

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

我找到了一种方法,尽管它在更改全局变量时会产生一些副作用
缓冲区面模式面

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

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

从Emacs 23开始,您可以通过
M-x缓冲区面集
更改每个缓冲区的面。看见因此,根据Firegun的回答,您可以使用
缓冲集面
如下所示:

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

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

像@jmibanez的答案一样使用
缓冲面集
不会污染全局变量。
缓冲面设置中的相关代码
(设置(使局部变量“缓冲面模式面”)规格)