]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix invocation with --debug-init and changes to debug-ignored-errors
authorEli Zaretskii <eliz@gnu.org>
Thu, 17 Aug 2023 18:35:20 +0000 (21:35 +0300)
committerEli Zaretskii <eliz@gnu.org>
Thu, 17 Aug 2023 18:35:20 +0000 (21:35 +0300)
* src/eval.c (syms_of_eval) <debug-ignored-errors>: Mention in the
doc string the caveat with removing errors from the standard value
while invoking Emacs with --debug-init.

* lisp/startup.el (startup--load-user-init-file): If the user's
init files add to the value of 'debug-ignored-errors', make sure
the additions are preserved after restoring the value we reset
during loading the init file, if Emacs was invoked with
"--debug-init".  (Bug#65267)

lisp/startup.el
src/eval.c

index 43d6bf7fd593863edf9822276c8da45248d75149..4d0e59ba4f39e16f47f62d86e873733d86afadfa 100644 (file)
@@ -1023,6 +1023,7 @@ init-file, or to a default value if loading is not possible."
          ;; Use (startup--witness) instead of nil, so we can detect when the
          ;; init files set `debug-ignored-errors' to nil.
          (if init-file-debug '(startup--witness) debug-ignored-errors))
+        (d-i-e-standard debug-ignored-errors)
         ;; The init file might contain byte-code with embedded NULs,
         ;; which can cause problems when read back, so disable nul
         ;; byte detection.  (Bug#52554)
@@ -1111,8 +1112,16 @@ the `--debug-init' option to view a complete error backtrace."
 
       ;; If we can tell that the init file altered debug-on-error,
       ;; arrange to preserve the value that it set up.
-      (or (eq debug-ignored-errors d-i-e-initial)
-          (setq d-i-e-from-init-file (list debug-ignored-errors)))
+      (unless (eq debug-ignored-errors d-i-e-initial)
+        (if (memq 'startup--witness debug-ignored-errors)
+            ;; The init file wants to add errors to the standard
+            ;; value, so we need to emulate that.
+            (setq d-i-e-from-init-file
+                  (list (append d-i-e-standard
+                                (remq 'startup--witness
+                                      debug-ignored-errors))))
+          ;; The init file _replaces_ the standard value.
+          (setq d-i-e-from-init-file (list debug-ignored-errors))))
       (or (eq debug-on-error debug-on-error-initial)
           (setq debug-on-error-should-be-set t
                 debug-on-error-from-init-file debug-on-error)))
index 9e54d489a3b151e3ffe35e1471c8c9298f13d22c..9268b65aa852212d178c91f99249c6cb547c108c 100644 (file)
@@ -4296,6 +4296,10 @@ See also the variable `debug-on-quit' and `inhibit-debugger'.  */);
 Each element may be a condition-name or a regexp that matches error messages.
 If any element applies to a given error, that error skips the debugger
 and just returns to top level.
+If you invoke Emacs with --debug-init, and want to remove some
+elements from the default value of this variable, use `setq' to
+change the value of the variable to a new list, rather than `delq'
+to remove some errors from the list.
 This overrides the variable `debug-on-error'.
 It does not apply to errors handled by `condition-case'.  */);
   Vdebug_ignored_errors = Qnil;