branch: externals/transient
commit f69e128654627275e7483a735f670bd53501999d
Author: Jonas Bernoulli <jo...@bernoul.li>
Commit: Jonas Bernoulli <jo...@bernoul.li>

    transient-suffix-object: Handle duplicated command invoked using mouse
---
 lisp/transient.el | 23 +++++++++++++++--------
 1 file changed, 15 insertions(+), 8 deletions(-)

diff --git a/lisp/transient.el b/lisp/transient.el
index 4aeba01897..6f63f3ee37 100644
--- a/lisp/transient.el
+++ b/lisp/transient.el
@@ -1732,6 +1732,10 @@ drawing in the transient buffer.")
 This is bound while the suffix predicate is being evaluated,
 and while functions that return faces are being evaluated.")
 
+(defvar transient--current-suffix nil
+  "The suffix currently being invoked using a mouse event.
+Do not use this; instead use function `transient-suffix-object'.")
+
 (defvar transient--pending-group nil
   "The group that is currently being processed.
 This is bound while the suffixes are drawn in the transient buffer.")
@@ -1840,6 +1844,7 @@ probably use this instead:
     (cl-check-type command command))
   (cond
    (transient--pending-suffix)
+   (transient--current-suffix)
    ((or transient--prefix
         transient-current-prefix)
     (let ((suffixes
@@ -2801,7 +2806,8 @@ value.  Otherwise return CHILDREN as is.")
                (transient--env-apply #'transient--redisplay)))))
     (setq transient-current-prefix nil)
     (setq transient-current-command nil)
-    (setq transient-current-suffixes nil)))
+    (setq transient-current-suffixes nil)
+    (setq transient--current-suffix nil)))
 
 (defun transient--post-exit (&optional command)
   (transient--debug 'post-exit)
@@ -2837,7 +2843,8 @@ value.  Otherwise return CHILDREN as is.")
     (when command
       (setq transient-current-prefix nil)
       (setq transient-current-command nil)
-      (setq transient-current-suffixes nil))
+      (setq transient-current-suffixes nil)
+      (setq transient--current-suffix nil))
     (when resume
       (transient--stack-pop))))
 
@@ -3020,12 +3027,12 @@ Use that command's pre-command to determine transient 
behavior."
            (not (eq (posn-window (event-start last-command-event))
                     transient--window)))
       transient--stay
-    (setq this-command
-          (with-selected-window transient--window
-            (get-text-property (if (mouse-event-p last-command-event)
-                                   (posn-point (event-start 
last-command-event))
-                                 (point))
-                               'command)))
+    (with-selected-window transient--window
+      (let ((pos (if (mouse-event-p last-command-event)
+                     (posn-point (event-start last-command-event))
+                   (point))))
+        (setq this-command (get-text-property pos 'command))
+        (setq transient--current-suffix (get-text-property pos 'suffix))))
     (transient--call-pre-command)))
 
 (defun transient--do-recurse ()

Reply via email to