在 Mac 下面安装了 X-windows 的 Emacs(brew 也可以安装 Emacs,不过只能在终端显示)。桌面版的 Emacs 好处是有更丰富的字体和界面,功能也更丰富,比如 speedbar。
但是令我惊奇的是 Mac 下面的字体很 Q,是这个样子的:

查了一下这个字体是 Mac 系统里面自带的”娃娃体”。而英文字体默认的是 DejaVu。一向严谨著称的程序员我当然不想写技术文章时用娃娃体,太不严肃了。
于是从网上找到了这一段设置字体的代码:
(set-language-environment 'UTF-8)
(set-locale-environment "UTF-8")
(set-default-font "Dejavu Mono 16")
(if (and (fboundp 'daemonp) (daemonp))
(add-hook 'after-make-frame-functions
(lambda (frame)
(with-selected-frame frame
(set-fontset-font "fontset-default"
'unicode "黑体 16"))))
(set-fontset-font "fontset-default" 'unicode "黑体 16"))
这里面设定英文字体还是 DejaVu,中文字体是黑体。
得到效果如下:

不过很快又发现在另一个 Ubuntu 机器上会报找不到 DejaVu 字体的问题。怎么办呢?elisp 里面提供了操作系统识别的 API。于是更新代码如下:
(if (eq system-type 'darwin)
(progn
(set-language-environment 'UTF-8)
(set-locale-environment "UTF-8")
(set-default-font "Dejavu Mono 16")
(if (and (fboundp 'daemonp) (daemonp))
(add-hook 'after-make-frame-functions
(lambda (frame)
(with-selected-frame frame
(set-fontset-font "fontset-default"
'unicode "黑体 16"))))
(set-fontset-font "fontset-default" 'unicode "黑体 16"))))
注意这里面 progn 表示可以顺序执行多个语句,并返回最后一个值,这在 if 语句里很有用。
本文为 2014 年老博客搬迁归档,保留原文以供参考。