Menggunakan font yang berbeda untuk setiap mode utama

19

Apakah mungkin untuk mengatur font yang berbeda mengikuti mode utama? Katakan Inconsolata-12dalam org-modebuffer dan Symbola-12dalam semua mode yang tersisa. Atau setidaknya, apakah mungkin untuk melakukan

(set-frame-font "Inconsolata" t)

setelah beralih ke org-modebuffer?

csantosb
sumber

Jawaban:

21

buffer-face-setdan buffer-face-modedalam Emacs 23 atau lebih baru dirancang untuk ini. Dari wiki 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)
Ryan
sumber
4

Anda dapat melakukan perubahan dengan menggunakan org-mode-hook, seperti ini

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

Yang akan mengubah font setiap kali Anda memasuki mode org. Kelemahannya adalah tidak mengubah font kembali setelah Anda meninggalkan mode org.

Sunting: seperti yang ditunjukkan oleh Ryan , Anda dapat mengikuti saran pada halaman wiki ini untuk melakukannya per buffer. Saya belum diuji secara luas, tetapi ini sepertinya berhasil

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

Mungkin ada masalah jika Anda ingin menggunakan buffer-face-modebuffer lain, tetapi jika Anda hanya menggunakannya untuk ini maka itu harus bekerja.

resueman
sumber
4
Sudahkah Anda melihat buffer-face-set? Halaman wiki ini menunjukkan bahwa Anda dapat melakukan hal yang sama per buffer alih-alih per frame.
Ryan
1
Hebat, terima kasih, inilah tepatnya yang saya cari. Komunitas ini luar biasa.
csantosb