]> git.eshelyaron.com Git - emacs.git/commitdiff
Apply non-user themes only when asked
authorDaniel Colascione <dancol@dancol.org>
Sat, 16 Jun 2018 22:42:56 +0000 (15:42 -0700)
committerDaniel Colascione <dancol@dancol.org>
Sat, 16 Jun 2018 22:44:23 +0000 (15:44 -0700)
Theme settings now generally aren't actually applied until a call to
`enable-theme-, either one made explicitly or implicitly through
`load-theme' with NO-ENABLE nil.  This change has the effect of not
applying theme changes just because we load a lisp file containing a
theme specification.  The previous behavior is preserved for the
special case of the `user' theme, which is frequently used for
ad-hoc customization.

* lisp/cus-face.el (custom-theme-set-faces): Call
`custom--should-apply-setting' to decide whether to apply
a setting.

* lisp/custom.el (custom--should-apply-setting): New function.
(custom--inhibit-theme-enable): Add `apply-only-user' option;
default to it.
(custom-push-theme, custom-theme-set-variables): Call
`custom--should-apply-setting' to decide whether to apply
a setting.

etc/NEWS
lisp/cus-face.el
lisp/custom.el

index d59b4a7cf4fce4fa1f218505f25284973880d3bb..39b8b5ca0c8750a2bf2e1dafd0e915ec891e1e64 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -518,6 +518,15 @@ names" in the Tramp manual for full documentation of these facilities.
 \f
 * Incompatible Lisp Changes in Emacs 27.1
 
++++
+** Theme settings generally aren't actually applied until a call to
+`enable-theme-, either one made explicitly or implicitly through
+`load-theme' with NO-ENABLE nil.  This change has the effect of not
+applying theme changes just because we load a lisp file containing a
+theme specification.  The previous behavior is preserved for the
+special case of the `user' theme, which is frequently used for
+ad-hoc customization.
+
 ** The 'repetitions' argument of 'benchmark-run' can now also be a variable.
 ** The FILENAME argument to 'file-name-base' is now mandatory and no
 longer defaults to 'buffer-file-name'.
index 2b352b3dc6081d62d6685c06254d4599fdd35566..039c1fafa70d968dc1fdf7e127cabed2b042cd29 100644 (file)
@@ -342,7 +342,7 @@ argument list."
        ;; is aliased to.
        (if (get face 'face-alias)
            (setq face (get face 'face-alias)))
-       (if custom--inhibit-theme-enable
+       (if (custom--should-apply-setting theme)
            ;; Just update theme settings.
            (custom-push-theme 'theme-face face theme 'set spec)
          ;; Update theme settings and set the face spec.
index 2a489c4f5b3b7ded71f7d1debd19d212c4db55da..4a778a0573e6398526cc4350cf5ef9eee6eb09f1 100644 (file)
@@ -843,6 +843,11 @@ to the front of this list.")
   (unless (custom-theme-p theme)
     (error "Unknown theme `%s'" theme)))
 
+(defun custom--should-apply-setting (theme)
+  (or (null custom--inhibit-theme-enable)
+      (and (eq custom--inhibit-theme-enable 'apply-only-user)
+           (eq theme 'user))))
+
 (defun custom-push-theme (prop symbol theme mode &optional value)
   "Record VALUE for face or variable SYMBOL in custom theme THEME.
 PROP is `theme-face' for a face, `theme-value' for a variable.
@@ -882,7 +887,7 @@ See `custom-known-themes' for a list of known themes."
        (setcar (cdr setting) value)))
      ;; Add a new setting:
      (t
-      (unless custom--inhibit-theme-enable
+      (when (custom--should-apply-setting theme)
        (unless old
          ;; If the user changed a variable outside of Customize, save
          ;; the value to a fake theme, `changed'.  If the theme is
@@ -981,7 +986,7 @@ COMMENT is a comment string about SYMBOL."
     (let* ((symbol (indirect-variable (nth 0 entry)))
           (value (nth 1 entry)))
       (custom-push-theme 'theme-value symbol theme 'set value)
-      (unless custom--inhibit-theme-enable
+      (when (custom--should-apply-setting theme)
        ;; Now set the variable.
        (let* ((now (nth 2 entry))
               (requests (nth 3 entry))
@@ -1149,11 +1154,13 @@ This variable is designed for use in lisp code (including
 external packages).  For manual user customizations, use
 `custom-theme-directory' instead.")
 
-(defvar custom--inhibit-theme-enable nil
+(defvar custom--inhibit-theme-enable 'apply-only-user
   "Whether the custom-theme-set-* functions act immediately.
 If nil, `custom-theme-set-variables' and `custom-theme-set-faces'
 change the current values of the given variable or face.  If
-non-nil, they just make a record of the theme settings.")
+t, they just make a record of the theme settings.  If the
+value is `apply-only-user', then apply setting to the
+`user' theme immediately and defer other updates.")
 
 (defun provide-theme (theme)
   "Indicate that this file provides THEME.