Использование списка шрифтов с демонизированным Emacs

Моя конфигурация GNU Emacs совместно используется несколькими компьютерами (включая фиксированные установки для FreeBSD, Ubuntu и Windows 7 и переносную установку с NT Emacs и Cygwin на USB-накопителе). Я хочу определить список шрифтов, которые Emacs будет пробовать по порядку, пока не будет найден установленный шрифт (поскольку у меня не всегда есть root-доступ, где я могу установить шрифты). Обычно set-fontset-font и друзья работали; однако, когда Emacs используется как демон (emacs --daemon), обычные наборы шрифтов не создаются до тех пор, пока не будет открыт фрейм. Поскольку все это должно работать как часть моего .emacs, уже слишком поздно.

(На всякий случай, если проблема с созданием набора шрифтов связана с портом FreeBSD Emacs или моей конфигурацией, это вывод команды make showconfig.)


person Jordan Wade    schedule 14.06.2013    source источник


Ответы (1)


Этот вопрос довел меня до конца; предложенный ответ работает до тех пор, пока вам нужен только один шрифт. Чтобы иметь несколько резервных шрифтов, вам нужно определить набор шрифтов и указать 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"))
person Jordan Wade    schedule 14.06.2013