From 01d2eac830341410dbe8b1ddfe340e80562bd04f Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Mon, 17 Sep 2007 02:13:51 +0000 Subject: [PATCH] (face-spec-set): When FRAME nil, look up each frame in SPEC. --- lisp/faces.el | 49 ++++++++++++++++++++++++++----------------------- 1 file changed, 26 insertions(+), 23 deletions(-) diff --git a/lisp/faces.el b/lisp/faces.el index 95c57d90cc0..f9dae8e399e 100644 --- a/lisp/faces.el +++ b/lisp/faces.el @@ -1446,29 +1446,32 @@ If SPEC is nil, return nil." FRAME is the frame whose frame-local face is set. FRAME nil means do it on all frames. See `defface' for information about SPEC. If SPEC is nil, do nothing." - (let ((attrs (face-spec-choose spec frame))) - (when spec - (face-spec-reset-face face frame)) - (while attrs - (let ((attribute (car attrs)) - (value (car (cdr attrs)))) - ;; Support some old-style attribute names and values. - (case attribute - (:bold (setq attribute :weight value (if value 'bold 'normal))) - (:italic (setq attribute :slant value (if value 'italic 'normal))) - ((:foreground :background) - ;; Compatibility with 20.x. Some bogus face specs seem to - ;; exist containing things like `:foreground nil'. - (if (null value) (setq value 'unspecified))) - (t (unless (assq attribute face-x-resources) - (setq attribute nil)))) - (when attribute - (set-face-attribute face frame attribute value))) - (setq attrs (cdr (cdr attrs))))) - ;; When we reset the face based on its spec, then it is unmodified - ;; as far as Custom is concerned. - (if (null frame) - (put (or (get face 'face-alias) face) 'face-modified nil))) + (if frame + (let ((attrs (face-spec-choose spec frame))) + (when spec + (face-spec-reset-face face frame)) + (while attrs + (let ((attribute (car attrs)) + (value (car (cdr attrs)))) + ;; Support some old-style attribute names and values. + (case attribute + (:bold (setq attribute :weight value (if value 'bold 'normal))) + (:italic (setq attribute :slant value (if value 'italic 'normal))) + ((:foreground :background) + ;; Compatibility with 20.x. Some bogus face specs seem to + ;; exist containing things like `:foreground nil'. + (if (null value) (setq value 'unspecified))) + (t (unless (assq attribute face-x-resources) + (setq attribute nil)))) + (when attribute + (set-face-attribute face frame attribute value))) + (setq attrs (cdr (cdr attrs))))) + ;; When we reset the face based on its spec, then it is unmodified + ;; as far as Custom is concerned. + (put (or (get face 'face-alias) face) 'face-modified nil) + ;; Set each frame according to the rules implied by SPEC. + (dolist (frame (frame-list)) + (face-spec-set face spec frame)))) (defun face-attr-match-p (face attrs &optional frame) -- 2.39.5