是否可以在Emacs中设置每个模式/缓冲区和每个字符集的字体?

时间:2012-12-14 12:04:25

标签: emacs elisp org-mode

我想根据Emacs中的主要模式和字符集设置字体,例如,当我打开一个组织文件时,我希望看到ASCII字符显示字体“Consolas”,并显示中文或日文字符字体“Microsoft Yahei”。

目前我使用名为buffer-face-mode的次要模式,可以使字体更改对应主要模式:

(add-hook 'org-mode-hook (lambda ()
                           (setq buffer-face-mode-face '(:font "Consolas-10.5"))
                           (buffer-face-mode)))

我查看this page但似乎没有任何我可以设置或更改的字符的charset属性,所以我无法继续根据不同的字符集设置字体。

我知道还有另一个函数set-fontset-font可以根据charset设置字体,但它只能应用于帧,而不是缓冲区或模式。

那么,有没有办法通过buffer-face-mode为不同的字符集设置不同的字体,或者实现原始请求的解决方法?

提前致谢,

开尔文

1 个答案:

答案 0 :(得分:0)

以下是搜索的一些线索:直到Emacs22我用来定义一些个人字体集,我不确定这仍然是一种有效的方法。

  • 创建一个新的字体集,用于描述编码列表与呈现每个字体的字体之间的映射
  • 将该字体/字体集与default-frame-alist一起使用,我不知道如何仅将其与特定模式相关联
(create-fontset-from-fontset-spec
    "-*-consolas-*-*-*-*-12-*-*-*-*-*-fontset-consolas,
    ascii:-*-consolas-*-*-*-*-12-*-*-*-*-*-iso8859-1,
    latin-iso8859-1:-*-consolas-*-*-*-*-12-*-*-*-*-*-iso8859-1,
    latin-iso8859-15:-*-consolas-*-*-*-*-12-*-*-*-*-*-iso8859-15")

(setq default-frame-alist '((width . 100) 
   (height . 44) 
   (top . 50) ;pixels
   (left . 50) ;pixels
   (font . "fontset-consolas")
   ))

这里我总是为多个编码关联相同的字体,但你可以使用不同的字体。