]> git.eshelyaron.com Git - emacs.git/commitdiff
(eval-defun-1):
authorJuri Linkov <juri@jurta.org>
Tue, 21 Jun 2005 15:59:33 +0000 (15:59 +0000)
committerJuri Linkov <juri@jurta.org>
Tue, 21 Jun 2005 15:59:33 +0000 (15:59 +0000)
Set `saved-face' temporarily to nil before calling form.
Set `customized-face' to the new spec after that.

lisp/emacs-lisp/lisp-mode.el

index 729244171091becd5ec71ece97c73e9c364d529a..1ffc33835e94611bfddd9a1ee37a2ba38f30ad5c 100644 (file)
@@ -617,10 +617,23 @@ Reinitialize the face according to the `defface' specification."
        ;; `defface' is macroexpanded to `custom-declare-face'.
        ((eq (car form) 'custom-declare-face)
         ;; Reset the face.
-        (put (eval (nth 1 form)) 'face-defface-spec nil)
         (setq face-new-frame-defaults
               (assq-delete-all (eval (nth 1 form)) face-new-frame-defaults))
-        form)
+        (put (eval (nth 1 form)) 'face-defface-spec nil)
+        ;; Setting `customized-face' to the new spec after calling
+        ;; the form, but preserving the old saved spec in `saved-face',
+        ;; imitates the situation when the new face spec is set
+        ;; temporarily for the current session in the customize
+        ;; buffer, thus allowing `face-user-default-spec' to use the
+        ;; new customized spec instead of the saved spec.
+        ;; Resetting `saved-face' temporarily to nil is needed to let
+        ;; `defface' change the spec, regardless of a saved spec.
+        (prog1 `(prog1 ,form
+                  (put ',(eval (nth 1 form)) 'saved-face
+                       ',(get (eval (nth 1 form)) 'saved-face))
+                  (put ',(eval (nth 1 form)) 'customized-face
+                       ',(eval (nth 2 form))))
+          (put (eval (nth 1 form)) 'saved-face nil)))
        ((eq (car form) 'progn)
         (cons 'progn (mapcar 'eval-defun-1 (cdr form))))
        (t form)))