From 431709cbb75ab73920f67144b1b6e853d3d50d69 Mon Sep 17 00:00:00 2001 From: Chong Yidong Date: Fri, 27 Feb 2009 00:04:59 +0000 Subject: [PATCH] (menu-set-font): Assign the same font object to all frames (Bug#2476). --- lisp/menu-bar.el | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/lisp/menu-bar.el b/lisp/menu-bar.el index 877a5b5de9e..043e0120fc9 100644 --- a/lisp/menu-bar.el +++ b/lisp/menu-bar.el @@ -637,7 +637,22 @@ by \"Save Options\" in Custom buffers.") (mouse-select-font))) spec) (when font - (set-face-attribute 'default nil :font font) + ;; We used to call set-face-attribute with a nil argument here, + ;; but this does the wrong thing (Bug#2476). The reason is + ;; subtle: when Emacs looks for a font matching the `font' + ;; argument, it tries to guess the best matching font by + ;; examining the other face attributes. The attributes for + ;; future frames are generally unspecified, so this matching + ;; process works poorly. What we do instead is assign `font' to + ;; the selected frame, then use that font object and assign it + ;; to all other frames (and to future frames). + (set-face-attribute 'default (selected-frame) :font font) + (let ((font-object (face-attribute 'default :font))) + (dolist (f (frame-list)) + (and (not (eq f (selected-frame))) + (display-graphic-p f) + (set-face-attribute 'default f :font font-object))) + (set-face-attribute 'default t :font font-object)) (setq spec (list (list t (face-attr-construct 'default)))) (put 'default 'customized-face spec) (custom-push-theme 'theme-face 'default 'user 'set spec) -- 2.39.5