[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))))))