Refactor quiet! to be less destructive
It's possible for the debugger to be invoked from inside code wrapped in a (quiet! ...) call. The debugger pauses Emacs in a broken state where the functions locally rebound by quiet! (e.g. message, load-file, write-region, etc) are never returned to their original definitions. This attempts to reduce that probabilityby changing how quiet! silences code. Rather than silencing them completely, they will be logged to *Messages* but not displayed in the echo area. Also, quiet! is now used less, where it isn't strictly needed (or where inhibit-message is sufficient).
This commit is contained in:
parent
8a8b5c6089
commit
15991b5639
6 changed files with 24 additions and 21 deletions
|
@ -170,19 +170,22 @@ compilation. This will no-op on features that have been disabled by the user."
|
|||
|
||||
(defmacro quiet! (&rest forms)
|
||||
"Run FORMS without making any output."
|
||||
`(if doom-debug-mode
|
||||
(progn ,@forms)
|
||||
(let ((old-fn (symbol-function 'write-region)))
|
||||
(cl-letf* ((standard-output (lambda (&rest _)))
|
||||
((symbol-function 'load-file) (lambda (file) (load file nil t)))
|
||||
((symbol-function 'message) (lambda (&rest _)))
|
||||
((symbol-function 'write-region)
|
||||
(lambda (start end filename &optional append visit lockname mustbenew)
|
||||
(unless visit (setq visit 'no-message))
|
||||
(funcall old-fn start end filename append visit lockname mustbenew)))
|
||||
(inhibit-message t)
|
||||
(save-silently t))
|
||||
,@forms))))
|
||||
`(cond (noninteractive
|
||||
(let ((old-fn (symbol-function 'write-region)))
|
||||
(cl-letf ((standard-output (lambda (&rest _)))
|
||||
((symbol-function 'load-file) (lambda (file) (load file nil t)))
|
||||
((symbol-function 'message) (lambda (&rest _)))
|
||||
((symbol-function 'write-region)
|
||||
(lambda (start end filename &optional append visit lockname mustbenew)
|
||||
(unless visit (setq visit 'no-message))
|
||||
(funcall old-fn start end filename append visit lockname mustbenew))))
|
||||
,@forms)))
|
||||
((or doom-debug-mode debug-on-error debug-on-quit)
|
||||
,@forms)
|
||||
((let ((inhibit-message t)
|
||||
(save-silently t))
|
||||
,@forms
|
||||
(message "")))))
|
||||
|
||||
(defmacro add-transient-hook! (hook-or-function &rest forms)
|
||||
"Attaches a self-removing function to HOOK-OR-FUNCTION.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue