emacs-elpa-diffs
[Top][All Lists]
Advanced

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

[elpa] externals/transient 52cac9c009 3/3: Adjust around advice to work


From: Jonas Bernoulli
Subject: [elpa] externals/transient 52cac9c009 3/3: Adjust around advice to work in Emacs < 30
Date: Wed, 8 Feb 2023 11:04:03 -0500 (EST)

branch: externals/transient
commit 52cac9c009ed47c95a0017c8074667daa8346924
Author: Jonas Bernoulli <jonas@bernoul.li>
Commit: Jonas Bernoulli <jonas@bernoul.li>

    Adjust around advice to work in Emacs < 30
    
    The implementation added in the previous commit requires Emacs 30.
    This commit adds a kludge that is necessary to make it work in older
    versions.  Also see bug#61179.
---
 lisp/transient.el | 57 ++++++++++++++++++++++++++++++-------------------------
 1 file changed, 31 insertions(+), 26 deletions(-)

diff --git a/lisp/transient.el b/lisp/transient.el
index 243186477e..69f071758e 100644
--- a/lisp/transient.el
+++ b/lisp/transient.el
@@ -2194,32 +2194,37 @@ value.  Otherwise return CHILDREN as is."
        ,@body)))
 
 (defun transient--wrap-command ()
-  (letrec ((prefix transient--prefix)
-           (suffix this-command)
-           (advice (lambda (fn &rest args)
-                     (interactive
-                      (lambda (spec)
-                        (let ((abort t))
-                          (unwind-protect
-                             (prog1 (advice-eval-interactive-spec spec)
-                               (setq abort nil))
-                           (when abort
-                              (when-let ((unwind (oref prefix unwind-suffix)))
-                                (transient--debug 'unwind-interactive)
-                                (funcall unwind suffix))
-                              (if (symbolp suffix)
-                                  (advice-remove suffix advice)
-                                (remove-function suffix advice))
-                              (oset prefix unwind-suffix nil))))))
-                     (unwind-protect
-                         (apply fn args)
-                       (when-let ((unwind (oref prefix unwind-suffix)))
-                         (transient--debug 'unwind-command)
-                         (funcall unwind suffix))
-                       (if (symbolp suffix)
-                           (advice-remove suffix advice)
-                         (remove-function suffix advice))
-                       (oset prefix unwind-suffix nil)))))
+  (let* ((prefix transient--prefix)
+         (suffix this-command)
+         (advice nil)
+         (advice-interactive
+          (lambda (spec)
+            (let ((abort t))
+              (unwind-protect
+                 (prog1 (advice-eval-interactive-spec spec)
+                   (setq abort nil))
+               (when abort
+                  (when-let ((unwind (oref prefix unwind-suffix)))
+                    (transient--debug 'unwind-interactive)
+                    (funcall unwind suffix))
+                  (if (symbolp suffix)
+                      (advice-remove suffix advice)
+                    (remove-function suffix advice))
+                  (oset prefix unwind-suffix nil))))))
+         (advice-body
+          (lambda (fn &rest args)
+            (unwind-protect
+                (apply fn args)
+              (when-let ((unwind (oref prefix unwind-suffix)))
+                (transient--debug 'unwind-command)
+                (funcall unwind suffix))
+              (if (symbolp suffix)
+                  (advice-remove suffix advice)
+                (remove-function suffix advice))
+              (oset prefix unwind-suffix nil)))))
+    (setq advice `(lambda (fn &rest args)
+                    (interactive ,advice-interactive)
+                    (apply ',advice-body fn args)))
     (if (symbolp suffix)
         (advice-add suffix :around advice '((depth . -99)))
       (add-function :around (var suffix) advice '((depth . -99))))))



reply via email to

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