定制 Emacs 的字体

Emacs 的字体和 Emacs 本身一样有极高的可定制性,可以在 ~/.emacs 里面设 定字体,但是我更喜欢在 ~/.Xresources 文件里面指定 Emacs 的字体。要让 Emacs 能够使用字体,必须让它知道字体的存在。 Emacs 目前使用的是 X 核心 字体,虽然目前已经有一个正在开发中的 xft 的分支1,但是目前还很不成熟, 特别是对中文支持很差。

要查看系统里面有那些 X 核心字体,可以使用 xlsfonts 命令,这个输出通常 是非常多的。你可以为 Emacs 指定其中的某个字体,如果要安装新的字体,比 如,我下载了文泉驿字体,想在 Emacs 里面使用它。现在,我把字体解压出来, 拷贝到某个目录,比如 /usr/share/fonts/Chinese/wqy-bitmapfont 里面。

然后我要生成 fonts.dirfonts.scale 文件,并加入字体路径。这些步骤必 须要有 root 权限,我使用的是 sudo

cd /usr/share/fonts/Chinese/wqy-bitmapfont/
sudo mkfontdir
sudo mkfontscale
sudo xset +fp /usr/share/fonts/Chinese/wqy-bitmapfont/

最后一条命令是设置字体路径,如果要永久设置,需要在 /etc/X11/xorg.conf 或 者是 /etc/X11/XF86Config-4 里面添加字体路径:

...
Section "Files"
    ...
    FontPath  "unix/:7100"
    ...
    FontPath  "/usr/share/fonts/Chinese/wqy-bitmapfont"
EndSection

这样你就可以在 xlsfonts 里面看到新安装的字体了2。下面就可以在 ~/.Xresources 里面配置 Emacs 让他使用文泉驿作为中文字体了:

Emacs.Font: fontset-courier

Emacs.Fontset-0:-*-*-medium-r-normal--12-*-*-*-m-*-fontset-courier,\
ascii:-monotype-courier new-medium-r-normal--12-0-0-0-m-0-iso8859-1,\
chinese-gb2312:-wenquanyi-wenquanyi bitmap song-medium-r-normal--13-130-75-75-p-80-iso10646-1,\
mule-unicode-0100-24ff:-misc-freemono-medium-r-normal--0-0-0-0-p-0-iso10646-1

类似的可以定义多个字体集,并指定一个默认的,在 Emacs 里面可以按住 Shift 在点击鼠标左键来选择字体或者字体集。其中的东西都是很清楚的,只是 最后一项 mule-unicode-0100-24ff ,这个是我为了正常显示 Stardict 的音标 而加上的,当然前提是必须装上了 ttf-freefont 并按照前面的方法正确设置了 路径,至于如何在 Emacs 里面使用 Stardict ,请看这里。如果要详细了解 X 核心字体的语法,请参见相应的手册页或者 Emacs 的 Info 页里面也有相应的 介绍:

(info "(Emacs) Font X")

好了,现在如果要令改动立即生效,可以使用 xrdb 命令:

xrdb -merge ~/.Xresources

现在,重新启动 Emacs ,就可以看到字体效果了!

Footnote

1. 请参见 EmacsWiki这里

2. 如果要让使用 fontconfig 的程序也能使用到字体,还有必要执行一下 <code>`sudo fc-cache -f -v .' 这条命令。