Fix #1706: Make doom-big-font-mode affect all frames

This commit is contained in:
Henrik Lissner 2020-01-13 01:08:49 -05:00
parent b320075c5b
commit e7de8118ce
No known key found for this signature in database
GPG key ID: 5F6C0EA160557395

View file

@ -20,38 +20,32 @@ acceptable values for this variable.")
;; ;;
;;; Library ;;; Library
(defun doom--font-name (fontname frame) (defun doom--font-name (fontname)
(when (query-fontset fontname) (when (query-fontset fontname)
(when-let (ascii (assq 'ascii (aref (fontset-info fontname frame) 2))) (when-let (ascii (assq 'ascii (aref (fontset-info fontname) 2)))
(setq fontname (nth 2 ascii)))) (setq fontname (nth 2 ascii))))
(or (x-decompose-font-name fontname) (or (x-decompose-font-name fontname)
(error "Cannot decompose font name"))) (error "Cannot decompose font name")))
(defun doom--frame-list (&optional frame) (defvar doom--font-scale nil)
"Return a list consisting of FRAME and all of FRAME's child frames."
(let ((frame (or frame (selected-frame))))
(cons (selected-frame)
(cl-loop for fr in (frame-list)
if (eq (frame-parameter fr 'parent-frame) frame)
collect fr))))
;;;###autoload ;;;###autoload
(defun doom-adjust-font-size (increment &optional frame) (defun doom-adjust-font-size (increment)
"Increase size of font in FRAME by INCREMENT. "Increase size of font in FRAME by INCREMENT.
FRAME parameter defaults to current frame." FRAME parameter defaults to current frame."
(if (null increment) (if (null increment)
(let ((frames (doom--frame-list frame))) (progn
(dolist (frame frames) (set-frame-font doom-font 'keep-size t)
(when (frame-parameter frame 'font-scale) (setf (alist-get 'font default-frame-alist)
(set-frame-parameter frame 'font-scale nil))) (cond ((stringp doom-font) doom-font)
(set-frame-font doom-font 'keep-size frames) ((fontp doom-font) (font-xlfd-name doom-font))
(and frames t)) ((signal 'wrong-type-argument (list '(fontp stringp)
(let (success) doom-font)))))
(dolist (frame (doom--frame-list frame)) t)
(let* ((font (frame-parameter frame 'font)) (let* ((font (frame-parameter nil 'font))
(font (doom--font-name font frame)) (font (doom--font-name font))
(increment (* increment doom-font-increment)) (increment (* increment doom-font-increment))
(zoom-factor (or (frame-parameter frame 'font-scale) 0))) (zoom-factor (or doom--font-scale 0))
success)
(let ((new-size (+ (string-to-number (aref font xlfd-regexp-pixelsize-subnum)) (let ((new-size (+ (string-to-number (aref font xlfd-regexp-pixelsize-subnum))
increment))) increment)))
(unless (> new-size 0) (unless (> new-size 0)
@ -63,13 +57,11 @@ FRAME parameter defaults to current frame."
(setq font (x-compose-font-name font)) (setq font (x-compose-font-name font))
(unless (x-list-fonts font) (unless (x-list-fonts font)
(error "Cannot change font size")) (error "Cannot change font size"))
(set-frame-parameter frame 'font font) (set-frame-font font 'keep-size t)
(set-frame-parameter frame 'font-scale (+ zoom-factor increment)) (setf (alist-get 'font default-frame-alist) font)
(setq success t))) (setq doom--font-scale (+ zoom-factor increment))
(when success
;; Unlike `set-frame-font', `set-frame-parameter' won't trigger this ;; Unlike `set-frame-font', `set-frame-parameter' won't trigger this
(run-hooks 'after-setting-font-hook) (run-hooks 'after-setting-font-hook))))
t))))
;; ;;
@ -127,8 +119,13 @@ This uses `doom/increase-font-size' under the hood, and enlargens the font by
(unless doom-font (unless doom-font
(user-error "`doom-font' must be set to a valid font")) (user-error "`doom-font' must be set to a valid font"))
(if doom-big-font (if doom-big-font
(set-frame-font (if doom-big-font-mode doom-big-font doom-font) (let ((font (if doom-big-font-mode doom-big-font doom-font)))
'keep-size (doom--frame-list)) (set-frame-font font 'keep-size t)
(setf (alist-get 'font default-frame-alist)
(cond ((stringp doom-font) font)
((fontp font) (font-xlfd-name font))
((signal 'wrong-type-argument (list '(fontp stringp)
font))))))
(doom-adjust-font-size (doom-adjust-font-size
(and doom-big-font-mode (and doom-big-font-mode
(integerp doom-big-font-increment) (integerp doom-big-font-increment)