emacs - 在守护进程 Emacs 中使用字体列表

标签 emacs elisp dot-emacs

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

(以防万一字体集创建问题是 FreeBSD 的 Emacs 端口或我的配置特有的问题, this is the output of make showconfig 。)

最佳答案

This question我大部分时间都到了那里;只要您只需要一种字体,建议的答案就有效。要拥有多种后备字体,您需要定义一个字体集并告诉 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"))

关于emacs - 在守护进程 Emacs 中使用字体列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17102692/

相关文章:

emacs - 在每个文件(不是文件类型)的基础上禁用自动填充模式

Emacs Lisp 语法高亮

emacs - 如何在主要模式发生变化之前运行函数

emacs - 有没有办法在不重新启动Emacs的情况下应用对.emacs文件中的切换所做的更改?

debugging - 在flymake模块中调试emacs elisp中的旋转是否有技巧?

javascript - Emacs、Django 模板和脚本 block

emacs - 将字体锁定应用于 elisp 中的引号

macos - Aquamacs 红色光标

emacs - 为什么 Emacs 在我的 .emacs 文件中提示 void-variable displayed-year ?

python - 在emacs python-mode中自定义多行语句缩进