summaryrefslogtreecommitdiff
path: root/lisp/custom.el
diff options
context:
space:
mode:
authorStefan Monnier <monnier@iro.umontreal.ca>2021-04-22 09:32:04 -0400
committerStefan Monnier <monnier@iro.umontreal.ca>2021-04-22 09:32:04 -0400
commit2fb271ca35ff96540c0940b0ea5281bdaac953ec (patch)
tree9e37b020834a551892b3f8e398e1fd4f6138381f /lisp/custom.el
parent846989498b66f94739e78ca274c8d1176c137591 (diff)
downloademacs-2fb271ca35ff96540c0940b0ea5281bdaac953ec.tar.gz
Fix unload+reload of files using `custom-initialize-delay` (bug#47072)
* lisp/custom.el (custom-initialize-delay): Don't delay if `custom-delayed-init-variables` has already been processed. * lisp/startup.el (command-line): Mark `custom-delayed-init-variables` as processed.
Diffstat (limited to 'lisp/custom.el')
-rw-r--r--lisp/custom.el11
1 files changed, 8 insertions, 3 deletions
diff --git a/lisp/custom.el b/lisp/custom.el
index 2c9eadbd479..614f8cf822d 100644
--- a/lisp/custom.el
+++ b/lisp/custom.el
@@ -117,9 +117,10 @@ For the standard setting, use `set-default'."
(set-default symbol (eval exp)))))))
(defvar custom-delayed-init-variables nil
- "List of variables whose initialization is pending.")
+ "List of variables whose initialization is pending until startup.
+Once this list has been processed, this var is set to a non-list value.")
-(defun custom-initialize-delay (symbol _value)
+(defun custom-initialize-delay (symbol value)
"Delay initialization of SYMBOL to the next Emacs start.
This is used in files that are preloaded (or for autoloaded
variables), so that the initialization is done in the run-time
@@ -133,7 +134,11 @@ the :set function."
;; This seemed to be at least as good as setting it to an arbitrary
;; value like nil (evaluating `value' is not an option because it
;; may have undesirable side-effects).
- (push symbol custom-delayed-init-variables))
+ (if (listp custom-delayed-init-variables)
+ (push symbol custom-delayed-init-variables)
+ ;; In case this is called after startup, there is no "later" to which to
+ ;; delay it, so initialize it "normally" (bug#47072).
+ (custom-initialize-reset symbol value)))
(defun custom-declare-variable (symbol default doc &rest args)
"Like `defcustom', but SYMBOL and DEFAULT are evaluated as normal arguments.