[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/transient 769219b 4/5: Enable section movement
From: |
Jonas Bernoulli |
Subject: |
[elpa] externals/transient 769219b 4/5: Enable section movement |
Date: |
Mon, 26 Jul 2021 16:11:45 -0400 (EDT) |
branch: externals/transient
commit 769219b5f5757f1373a28e993f36b6a41c778651
Author: Jonas Bernoulli <jonas@bernoul.li>
Commit: Jonas Bernoulli <jonas@bernoul.li>
Enable section movement
This doesn't actually implement any section movement commands.
It merely makes it possible to implement such commands without
having to modify or advice transient.
See https://github.com/magit/magit/issues/4438.
This stops placing the cursor on the first suffix. Instead the
cursor is now left at the beginning of the buffer, on the first
section heading. This is beneficial for blind users who rely
on a screen reader. The old hack that moved the cursor did not
only do that initially, it actually prevented from ever moving
before the first suffix.
---
lisp/transient.el | 19 +++++++++++++++----
1 file changed, 15 insertions(+), 4 deletions(-)
diff --git a/lisp/transient.el b/lisp/transient.el
index cca092f..9af641e 100644
--- a/lisp/transient.el
+++ b/lisp/transient.el
@@ -2876,7 +2876,8 @@ have a history of their own.")
(display-buffer buf transient-display-buffer-action)))
(with-selected-window transient--window
(when transient-enable-popup-navigation
- (setq focus (button-get (point) 'command)))
+ (setq focus (or (button-get (point) 'command)
+ (transient--heading-at-point))))
(erase-buffer)
(set-window-hscroll transient--window 0)
(set-window-dedicated-p transient--window t)
@@ -3448,13 +3449,23 @@ See `forward-button' for information about N."
(forward-button n t)))
(defun transient--goto-button (command)
- (if (not command)
- (forward-button 1)
+ (cond
+ ((stringp command)
+ (when (search-forward command nil t)
+ (goto-char (match-beginning 0))))
+ (command
(while (and (ignore-errors (forward-button 1))
(not (eq (button-get (button-at (point)) 'command) command))))
(unless (eq (button-get (button-at (point)) 'command) command)
(goto-char (point-min))
- (forward-button 1))))
+ (forward-button 1)))))
+
+(defun transient--heading-at-point ()
+ (and (eq (get-text-property (point) 'face) 'transient-heading)
+ (let ((beg (line-beginning-position)))
+ (buffer-substring-no-properties
+ beg (next-single-property-change
+ beg 'face nil (line-end-position))))))
;;;; Popup Isearch