summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilip Kaludercic <philipk@posteo.net>2022-09-06 21:04:08 +0200
committerPhilip Kaludercic <philipk@posteo.net>2022-09-11 13:10:55 +0200
commitb4dbf7184cd68ecd8d1a27fbc1407be0eae7e64c (patch)
tree86c3760cc0c575bc752baa357e9455caa470cc1d
parentf31b9d86a67f1b3fd70339f277dff52478890351 (diff)
downloademacs-b4dbf7184cd68ecd8d1a27fbc1407be0eae7e64c.tar.gz
Add new user option 'custom-ensure-single-theme'
* etc/NEWS: Mention it. * lisp/custom.el (custom-ensure-single-active-theme): Add it. (load-theme): Use it.
-rw-r--r--etc/NEWS11
-rw-r--r--lisp/custom.el12
2 files changed, 23 insertions, 0 deletions
diff --git a/etc/NEWS b/etc/NEWS
index 2f52e9bc371..2d2bd789fb8 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -2933,6 +2933,17 @@ 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
display changes.
diff --git a/lisp/custom.el b/lisp/custom.el
index b4d1ba7317f..d8baf21d960 100644
--- a/lisp/custom.el
+++ b/lisp/custom.el
@@ -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))