branch: externals/corfu
commit 5aef01a35fa9485571eb7b28b2b77958a5e2fb1a
Author: Daniel Mendler <m...@daniel-mendler.de>
Commit: Daniel Mendler <m...@daniel-mendler.de>

    Improve corfu--guard
    
    Only override debug-on-error and debugger if an error occurred.
---
 corfu.el | 19 +++++++++++++++----
 1 file changed, 15 insertions(+), 4 deletions(-)

diff --git a/corfu.el b/corfu.el
index 541136bc05..58a01e0a2f 100644
--- a/corfu.el
+++ b/corfu.el
@@ -865,10 +865,21 @@ the last command must be listed in 
`corfu-continue-commands'."
   nil)
 
 (defmacro corfu--guard (&rest body)
-  "Guard BODY showing a stack trace on error."
-  `(condition-case nil
-       (let ((debug-on-error t) (debugger #'corfu--debug)) ,@body)
-     ((debug error) nil)))
+  "Guard BODY such that errors are caught.
+If an error occurs, the BODY is retried with `debug-on-error' enabled
+and the stack trace is shown in the *Messages* buffer."
+  `(let ((body (lambda ()
+                 (condition-case nil
+                     (progn ,@body nil)
+                   ((debug error) t)))))
+     (cond
+      (debug-on-error
+       (let ((debugger #'corfu--debug))
+         (funcall body)))
+      ((funcall body)
+       (let ((debug-on-error t)
+             (debugger #'corfu--debug))
+         (funcall body))))))
 
 (defun corfu--post-command ()
   "Refresh Corfu after last command."

Reply via email to