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

19

Можно ли установить разные шрифты, следуя основному режиму? Скажите Inconsolata-12в org-modeбуферах и Symbola-12во всех остальных режимах. Или, по крайней мере, это возможно сделать

(set-frame-font "Inconsolata" t)

после переключения на org-modeбуферы?

csantosb
источник

Ответы:

21

buffer-face-setа buffer-face-modeв Emacs 23 или новее предназначен именно для этого. Из вики Emacs :

;; Use variable width font faces in current buffer
 (defun my-buffer-face-mode-variable ()
   "Set font to a variable width (proportional) fonts in current buffer"
   (interactive)
   (setq buffer-face-mode-face '(:family "Symbola" :height 100 :width semi-condensed))
   (buffer-face-mode))

 ;; Use monospaced font faces in current buffer
 (defun my-buffer-face-mode-fixed ()
   "Sets a fixed width (monospace) font in current buffer"
   (interactive)
   (setq buffer-face-mode-face '(:family "Inconsolata" :height 100))
   (buffer-face-mode))

 ;; Set default font faces for Info and ERC modes
 (add-hook 'erc-mode-hook 'my-buffer-face-mode-variable)
 (add-hook 'Info-mode-hook 'my-buffer-face-mode-variable)
Райан
источник
4

Вы можете внести изменения, используя org-mode-hook, как это

(add-hook 'org-mode-hook (lambda () (set-frame-font "Inconsolata" t)))

Который будет менять шрифт всякий раз, когда вы входите в режим орг. Недостатком является то, что он не меняет шрифт обратно после выхода из режима орг.

Редактировать: как указано Райаном , вы можете следовать советам на этой вики-странице, чтобы сделать это для каждого буфера. Я не тестировал подробно, но это похоже на работу

(add-hook 'org-mode-hook (lambda ()
                            (setq buffer-face-mode-face '(:family "Inconsolata"))
                            (buffer-face-mode)))

Могут возникнуть проблемы, если вы хотите использовать buffer-face-modeдругие буферы, но если вы используете его только для этого, он должен работать.

resueman
источник
4
Вы смотрели buffer-face-set? Эта вики-страница указывает, что вы можете делать то же самое для каждого буфера, а не для каждого кадра.
Райан
1
Отлично, спасибо, это именно то, что я искал. Это сообщество необычайно.
csantosb