Linux 是否更改Emacs中当前缓冲区的字体?
在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中,字体是人脸的一部分。例如,除非您仅将特定的面用于所需的缓冲区,并将该面的字体设置为所需的字体,否则我认为您无法实现您的
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的答案一样使用缓冲面集
不会污染全局变量。缓冲面设置中的相关代码
:(设置(使局部变量“缓冲面模式面”)规格)