Fix #1706: Make doom-big-font-mode affect all frames
This commit is contained in:
parent
b320075c5b
commit
e7de8118ce
1 changed files with 40 additions and 43 deletions
|
@ -20,56 +20,48 @@ 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))
|
||||||
(let ((new-size (+ (string-to-number (aref font xlfd-regexp-pixelsize-subnum))
|
success)
|
||||||
increment)))
|
(let ((new-size (+ (string-to-number (aref font xlfd-regexp-pixelsize-subnum))
|
||||||
(unless (> new-size 0)
|
increment)))
|
||||||
(error "Font is too small at %d" new-size))
|
(unless (> new-size 0)
|
||||||
(aset font xlfd-regexp-pixelsize-subnum (number-to-string new-size)))
|
(error "Font is too small at %d" new-size))
|
||||||
;; Set point size & width to "*", so frame width will adjust to new font size
|
(aset font xlfd-regexp-pixelsize-subnum (number-to-string new-size)))
|
||||||
(aset font xlfd-regexp-pointsize-subnum "*")
|
;; Set point size & width to "*", so frame width will adjust to new font size
|
||||||
(aset font xlfd-regexp-avgwidth-subnum "*")
|
(aset font xlfd-regexp-pointsize-subnum "*")
|
||||||
(setq font (x-compose-font-name font))
|
(aset font xlfd-regexp-avgwidth-subnum "*")
|
||||||
(unless (x-list-fonts font)
|
(setq font (x-compose-font-name font))
|
||||||
(error "Cannot change font size"))
|
(unless (x-list-fonts font)
|
||||||
(set-frame-parameter frame 'font font)
|
(error "Cannot change font size"))
|
||||||
(set-frame-parameter frame 'font-scale (+ zoom-factor increment))
|
(set-frame-font font 'keep-size t)
|
||||||
(setq success t)))
|
(setf (alist-get 'font default-frame-alist) font)
|
||||||
(when success
|
(setq doom--font-scale (+ zoom-factor increment))
|
||||||
;; 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)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue