3

我想根据emacs中的major mode和charset来设置字体,例如,当我打开一个org文件时,我希望看到ASCII字符以“Consolas”字体显示,中文或日文字符以“字体”显示微软雅黑”。

目前我使用一种称为次要模式的方法buffer-face-mode,可以使字体更改与主要模式相对应:

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

我查看了此页面,但似乎没有任何可以设置或更改的面部字符集属性,因此我无法继续根据不同的字符集设置字体。

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

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

提前致谢,

开尔文

4

1 回答 1

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

在这里,我总是为几种编码关联相同的字体,但您可以使用不同的字体。

于 2012-12-14T12:52:02.617 回答