(defvar my-font-alist
'((sarasa-mono-slab-sc-16 . (:family "Sarasa Mono Slab SC" :size 16))
(monaco-14 . (:family "Monaco" :size 14)))
"An alist of all the fonts you can switch.
Key is a symbol as the name, value is a plist specifying the font spec.
More info about spec in `font-spec'.")
(defun my/load-buffer-font (&optional font-name)
"Prompt for a FONT-NAME and set it for current buffer.
Fonts are specified in `my-font-alist'."
(interactive (list
(completing-read "Choose a font for current buffer: "
(mapcar #'car my-font-alist))))
(let* ((font-name (or font-name my-font))
(font (apply #'font-spec
(if font-name
(alist-get (intern font-name) my-font-alist
nil nil #'equal)
(cdar my-font-alist)))))
(setq buffer-face-mode-face `(:font ,font))
(buffer-face-mode +1)))
(defun my/load-buffer-font (&optional font-name)
"Prompt for a FONT-NAME and set it for current buffer.
Fonts are specified in `my-font-alist'."
(interactive (list
(completing-read "Choose a font for current buffer: "
(mapcar #'car my-font-alist))))
(let* ((font-name (or font-name my-font))
(font (apply #'font-spec
(if font-name
(alist-get (intern font-name) my-font-alist
nil nil #'equal)
(cdar my-font-alist)))))
(set (make-local-variable 'face-remapping-alist)
(copy-tree `((default :font ,font :height ,(* 10 (font-get `,font ':size))))))))