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.
This commit is contained in:
Philip Kaludercic 2022-09-06 21:04:08 +02:00
parent f31b9d86a6
commit b4dbf7184c
No known key found for this signature in database
GPG key ID: F2C3CC513DB89F66
2 changed files with 23 additions and 0 deletions

View 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))