2

我的 GNU Emacs 配置在多台计算机之间共享(包括 FreeBSD、Ubuntu 和 Windows 7 的固定安装以及在 USB 驱动器上使用 NT Emacs 和 Cygwin 的便携式安装)。我想定义一个 Emacs 将按顺序尝试的字体列表,直到找到已安装的字体(因为我并不总是具有可以安装字体的 root 访问权限)。通常,set-fontset-font和朋友一起工作;但是,当 Emacs 用作守护程序 ( emacs --daemon) 时,在打开框架之前不会创建正常的字体集。由于这一切都需要作为 my.emacs的一部分运行,所以为时已晚。

(以防字体集创建问题是特定于 FreeBSD 的 Emacs 端口或我的配置的问题,这是 make showconfig 的输出。)

4

1 回答 1

3

这个问题让我了解了大部分情况。只要您只需要一种字体,建议的答案就有效。要拥有多种备用字体,您需要定义一个字体集并告诉 Emacs 将该字体集用于框架。首先,定义要使用的字体列表:

;; Fill in your list of fonts here
(setq my-fonts '("-xos4-terminus-medium-*-*-*-16-*-*-*-*-*-iso10646-1" ...))

然后,将这些字体放入标准字体集中:

;; NOTE: only works if you don't use --daemon
(dolist (font (reverse my-fonts))
  (set-fontset-font "fontset-standard" 'unicode font nil 'prepend))
(add-to-list 'default-frame-alist '(font . "fontset-standard"))

只要您从不将 Emacs 作为守护进程启动,这将可以正常工作;如果你这样做,你会被告知

error: Fontset `fontset-standard' does not exist

为了解决这个问题,我们需要在添加字体之前创建标准字体集。Emacs 定义standard-fontset-spec为标准字体集初始化的值;我们可以通过create-fontset-from-fontset-spec先调用自己来完成:

(create-fontset-from-fontset-spec standard-fontset-spec) ;to make --daemon work
(dolist (font (reverse my-fonts))
  (set-fontset-font "fontset-standard" 'unicode font nil 'prepend))
(add-to-list 'default-frame-alist '(font . "fontset-standard"))
于 2013-06-14T06:51:42.217 回答