]> git.eshelyaron.com Git - emacs.git/commitdiff
Add new user option 'custom-ensure-single-theme'
authorPhilip Kaludercic <philipk@posteo.net>
Tue, 6 Sep 2022 19:04:08 +0000 (21:04 +0200)
committerPhilip Kaludercic <philipk@posteo.net>
Sun, 11 Sep 2022 11:10:55 +0000 (13:10 +0200)
* etc/NEWS: Mention it.
* lisp/custom.el (custom-ensure-single-active-theme): Add it.
(load-theme): Use it.

etc/NEWS
lisp/custom.el

index 2f52e9bc37187930a03603ef50d02bac67d674e5..2d2bd789fb8e4b633342594a29248722a8ad1711 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -2932,6 +2932,17 @@ These are run after enabling and disabling a theme, respectively.
 Using 'make-obsolete' on a theme is now supported.  This will make
 'load-theme' issue a warning when loading the theme.
 
++++
+*** New command 'toggle-theme'
+If a theme defines a dual pair (e.g. a light or dark variant) this
+command can be used disable the current one and enable the other.
+
+---
+*** New user option 'custom-ensure-single-active-theme'
+If non-nil, all themes will be disabled before a new theme is enabled,
+so that there is always at most one active theme at any time.
+
+
 +++
 ** New hook 'display-monitors-changed-functions'.
 It is called whenever the configuration of different monitors on a
index b4d1ba7317f8d8cd8f3b7aa7db39efed01015d9b..d8baf21d96096e0faedc556a801c8a9f1ca05514 100644 (file)
@@ -1280,6 +1280,12 @@ This variable cannot be set in a Custom theme."
   :risky t
   :version "24.1")
 
+(defcustom custom-ensure-single-active-theme nil
+  "Non-nil means that `load-theme' should ensure only one theme is active."
+  :type 'boolean
+  :group 'customize
+  :version "29.1")
+
 (defun load-theme (theme &optional no-confirm no-enable)
   "Load Custom theme named THEME from its file and possibly enable it.
 The theme file is named THEME-theme.el, in one of the directories
@@ -1304,6 +1310,9 @@ This function is normally called through Customize when setting
 should be called with a non-nil NO-CONFIRM argument, or after
 `custom-safe-themes' has been loaded.
 
+If `custom-ensure-single-active-theme' is non-nil, all other active
+themes will be disabled before THEME is enabled.
+
 Return t if THEME was successfully loaded, nil otherwise."
   (interactive
    (list
@@ -1367,6 +1376,9 @@ Return t if THEME was successfully loaded, nil otherwise."
       (setq tail (cdr tail)))
     (when found
       (put theme 'theme-settings (cons found (delq found settings)))))
+  ;; Check if the user only wants one theme to be active
+  (when custom-ensure-single-active-theme
+    (mapc #'disable-theme custom-enabled-themes))
   ;; Finally, enable the theme.
   (unless no-enable
     (enable-theme theme))