- ;; Set for current frames. Only change font for those that have
- ;; the old font now. If they don't have the old font, the user
- ;; probably changed it.
- (dolist (f (frames-on-display-list display-or-frame))
- (if (display-graphic-p f)
- (let* ((frame-font
- (or (font-get (face-attribute 'default :font f
- 'default) :user-spec)
- (frame-parameter f 'font-parameter)))
- (font-to-set
- (if set-font new-font
- ;; else set font again, hinting etc. may have changed.
- frame-font)))
- (if font-to-set
- (progn
- (message "setting %s" font-to-set)
- (set-frame-parameter f 'font-parameter font-to-set)
- (set-face-attribute 'default f
- :width 'normal
- :weight 'normal
- :slant 'normal
- :font font-to-set))))))
-
- ;; Set for future frames.
- (set-face-attribute 'default t :font new-font)
- (let ((spec (list (list t (face-attr-construct 'default)))))
- (progn
- (put 'default 'customized-face spec)
- (custom-push-theme 'theme-face 'default 'user 'set spec)
- (put 'default 'face-modified nil))))))
+ (if set-font
+ ;; Set the font on all current and future frames, as though
+ ;; the `default' face had been "set for this session":
+ (set-frame-font new-font nil frame-list)
+ ;; Just redraw the existing fonts on all frames:
+ (dolist (f frame-list)
+ (let ((frame-font
+ (or (font-get (face-attribute 'default :font f 'default)
+ :user-spec)
+ (frame-parameter f 'font-parameter))))
+ (when frame-font
+ (set-frame-parameter f 'font-parameter frame-font)
+ (set-face-attribute 'default f
+ :width 'normal
+ :weight 'normal
+ :slant 'normal
+ :font frame-font))))))))