Skip to content
楷图 · KaiTu
Go back

Mac 下 Emacs 字体设置

在 Mac 下面安装了 X-windows 的 Emacs(brew 也可以安装 Emacs,不过只能在终端显示)。桌面版的 Emacs 好处是有更丰富的字体和界面,功能也更丰富,比如 speedbar。

但是令我惊奇的是 Mac 下面的字体很 Q,是这个样子的:

init

查了一下这个字体是 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,中文字体是黑体。

得到效果如下:

with chinese_font

不过很快又发现在另一个 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 年老博客搬迁归档,保留原文以供参考。


Share this post:

Previous Post
Jack到家
Next Post
MySQL Collation 问题