emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

master 2fb271c: Fix unload+reload of files using `custom-initialize-dela


From: Stefan Monnier
Subject: master 2fb271c: Fix unload+reload of files using `custom-initialize-delay` (bug#47072)
Date: Thu, 22 Apr 2021 09:32:09 -0400 (EDT)

branch: master
commit 2fb271ca35ff96540c0940b0ea5281bdaac953ec
Author: Stefan Monnier <monnier@iro.umontreal.ca>
Commit: Stefan Monnier <monnier@iro.umontreal.ca>

    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.
---
 lisp/custom.el  | 11 ++++++++---
 lisp/startup.el |  2 +-
 2 files changed, 9 insertions(+), 4 deletions(-)

diff --git a/lisp/custom.el b/lisp/custom.el
index 2c9eadb..614f8cf 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.
diff --git a/lisp/startup.el b/lisp/startup.el
index 4d4c65e..c126727 100644
--- a/lisp/startup.el
+++ b/lisp/startup.el
@@ -1175,7 +1175,7 @@ please check its value")
         ;; are dependencies between them.
         (nreverse custom-delayed-init-variables))
   (mapc #'custom-reevaluate-setting custom-delayed-init-variables)
-  (setq custom-delayed-init-variables nil)
+  (setq custom-delayed-init-variables t)
 
   ;; Warn for invalid user name.
   (when init-file-user



reply via email to

[Prev in Thread] Current Thread [Next in Thread]