summaryrefslogtreecommitdiff
path: root/lisp/custom.el
diff options
context:
space:
mode:
Diffstat (limited to 'lisp/custom.el')
-rw-r--r--lisp/custom.el57
1 files changed, 42 insertions, 15 deletions
diff --git a/lisp/custom.el b/lisp/custom.el
index 968b28f7a89..a084304ff80 100644
--- a/lisp/custom.el
+++ b/lisp/custom.el
@@ -364,7 +364,8 @@ call that function directly.
See Info node `(elisp) Customization' in the Emacs Lisp manual
for more information."
- (declare (doc-string 3) (debug (name body)))
+ (declare (doc-string 3) (debug (name body))
+ (indent defun))
;; It is better not to use backquote in this file,
;; because that makes a bootstrapping problem
;; if you need to recompile all the Lisp files using interpreted code.
@@ -447,7 +448,7 @@ In the ATTS property list, possible attributes are `:family',
See Info node `(elisp) Faces' in the Emacs Lisp manual for more
information."
- (declare (doc-string 3))
+ (declare (doc-string 3) (indent defun))
;; It is better not to use backquote in this file,
;; because that makes a bootstrapping problem
;; if you need to recompile all the Lisp files using interpreted code.
@@ -515,7 +516,7 @@ non-nil.
See Info node `(elisp) Customization' in the Emacs Lisp manual
for more information."
- (declare (doc-string 3))
+ (declare (doc-string 3) (indent defun))
;; It is better not to use backquote in this file,
;; because that makes a bootstrapping problem
;; if you need to recompile all the Lisp files using interpreted code.
@@ -1135,29 +1136,24 @@ list, in which A occurs before B if B was defined with a
;; (provide-theme 'THEME)
-;; The IGNORED arguments to deftheme come from the XEmacs theme code, where
-;; they were used to supply keyword-value pairs like `:immediate',
-;; `:variable-reset-string', etc. We don't use any of these, so ignore them.
-
-(defmacro deftheme (theme &optional doc &rest _ignored)
+(defmacro deftheme (theme &optional doc)
"Declare THEME to be a Custom theme.
The optional argument DOC is a doc string describing the theme.
Any theme `foo' should be defined in a file called `foo-theme.el';
see `custom-make-theme-feature' for more information."
(declare (doc-string 2)
- (advertised-calling-convention (theme &optional doc) "22.1"))
+ (indent 1))
(let ((feature (custom-make-theme-feature theme)))
;; It is better not to use backquote in this file,
;; because that makes a bootstrapping problem
;; if you need to recompile all the Lisp files using interpreted code.
(list 'custom-declare-theme (list 'quote theme) (list 'quote feature) doc)))
-(defun custom-declare-theme (theme feature &optional doc &rest _ignored)
+(defun custom-declare-theme (theme feature &optional doc)
"Like `deftheme', but THEME is evaluated as a normal argument.
FEATURE is the feature this theme provides. Normally, this is a symbol
created from THEME by `custom-make-theme-feature'."
- (declare (advertised-calling-convention (theme feature &optional doc) "22.1"))
(unless (custom-theme-name-valid-p theme)
(error "Custom theme cannot be named %S" theme))
(unless (memq theme custom-known-themes)
@@ -1335,6 +1331,13 @@ Return t if THEME was successfully loaded, nil otherwise."
t))))
(t
(error "Unable to load theme `%s'" theme))))
+ (when-let ((obs (get theme 'byte-obsolete-info)))
+ (display-warning 'initialization
+ (format "The `%s' theme is obsolete%s"
+ theme
+ (if (nth 2 obs)
+ (format " since Emacs %s" (nth 2 obs))
+ ""))))
;; Optimization: if the theme changes the `default' face, put that
;; entry first. This avoids some `frame-set-background-mode' rigmarole
;; by assigning the new background immediately.
@@ -1419,6 +1422,22 @@ are not directories are omitted from the expansion."
;;; Enabling and disabling loaded themes.
+(defcustom enable-theme-functions nil
+ "Abnormal hook that is run after a theme has been enabled.
+The functions in the hook are called with one parameter -- the
+ name of the theme that's been enabled (as a symbol)."
+ :type 'hook
+ :group 'customize
+ :version "29.1")
+
+(defcustom disable-theme-functions nil
+ "Abnormal hook that is run after a theme has been disabled.
+The functions in the hook are called with one parameter -- the
+ name of the theme that's been disabled (as a symbol)."
+ :type 'hook
+ :group 'customize
+ :version "29.1")
+
(defun enable-theme (theme)
"Reenable all variable and face settings defined by THEME.
THEME should be either `user', or a theme loaded via `load-theme'.
@@ -1427,7 +1446,9 @@ After this function completes, THEME will have the highest
precedence (after `user') among enabled themes.
Note that any already-enabled themes remain enabled after this
-function runs. To disable other themes, use `disable-theme'."
+function runs. To disable other themes, use `disable-theme'.
+
+After THEME has been enabled, runs `enable-theme-functions'."
(interactive (list (intern
(completing-read
"Enable custom theme: "
@@ -1475,7 +1496,9 @@ function runs. To disable other themes, use `disable-theme'."
(setq custom-enabled-themes
(cons theme (remq theme custom-enabled-themes)))
;; Give the `user' theme the highest priority.
- (enable-theme 'user)))
+ (enable-theme 'user))
+ ;; Allow callers to react to the enabling.
+ (run-hook-with-args 'enable-theme-functions theme))
(defcustom custom-enabled-themes nil
"List of enabled Custom Themes, highest precedence first.
@@ -1520,7 +1543,9 @@ Setting this variable through Customize calls `enable-theme' or
(defun disable-theme (theme)
"Disable all variable and face settings defined by THEME.
-See `custom-enabled-themes' for a list of enabled themes."
+See `custom-enabled-themes' for a list of enabled themes.
+
+After THEME has been disabled, runs `disable-theme-functions'."
(interactive (list (intern
(completing-read
"Disable custom theme: "
@@ -1564,7 +1589,9 @@ See `custom-enabled-themes' for a list of enabled themes."
"unspecified-fg" "black"))
(face-set-after-frame-default frame))
(setq custom-enabled-themes
- (delq theme custom-enabled-themes))))
+ (delq theme custom-enabled-themes))
+ ;; Allow callers to react to the disabling.
+ (run-hook-with-args 'disable-theme-functions theme)))
;; Only used if window-system not null.
(declare-function x-get-resource "frame.c"