branch: elpa/magit
commit acf71f7eb422c37a83d30673df88c66166a44e96
Author: Jonas Bernoulli <[email protected]>
Commit: Jonas Bernoulli <[email protected]>

    magit-revision-jump: New command
---
 lisp/magit-diff.el | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 51 insertions(+)

diff --git a/lisp/magit-diff.el b/lisp/magit-diff.el
index 3ba22b3ad91..373dc481d43 100644
--- a/lisp/magit-diff.el
+++ b/lisp/magit-diff.el
@@ -2027,6 +2027,52 @@ commit or stash at point, then prompt for a commit."
               (t
                (mapc #'magit-section-hide sections)))))))
 
+;;;; Jump Commands
+
+(transient-define-prefix magit-revision-jump (&optional menu)
+  "In a Magit-Revision buffer, jump to a section.
+Show a menu to choose a section, unless point is on a file
+heading, or with a prefix argument, in which case behave
+like 'magit-jump-to-diffstat-or-diff'."
+  [["Jump to"
+    ("h" magit-jump-to-revision-headers)
+    ("m" magit-jump-to-revision-message)
+    ("n" magit-jump-to-revision-notes)
+    ("s" magit-jump-to-revision-diffstat)
+    ("d" magit-jump-to-revision-diff)]
+   ["Jump using"
+    ("j" "Imenu" imenu)]]
+  (interactive (list (or (not (magit-section-match 'file))
+                         current-prefix-arg)))
+  (if menu
+      (transient-setup 'magit-revision-jump)
+    (magit-jump-to-diffstat-or-diff)))
+
+(magit-define-section-jumper magit-jump-to-revision-headers
+  "Headings" headers nil magit-insert-revision-headers)
+
+(magit-define-section-jumper magit-jump-to-revision-message
+  "Message" commit-message nil magit-insert-revision-message)
+
+(magit-define-section-jumper magit-jump-to-revision-notes
+  "Notes" notes nil magit-insert-revision-notes)
+
+(magit-define-section-jumper magit-jump-to-revision-diffstat
+  "Diffstat" diffstat nil magit-insert-revision-diff)
+
+(transient-define-suffix magit-jump-to-revision-diff (&optional expand)
+  :description "Diff"
+  :inapt-if-not (##cl-find-if (##eq (oref % type) 'file)
+                              (oref magit-root-section children))
+  (interactive "P")
+  (if-let ((section (cl-find-if (##eq (oref % type) 'file)
+                                (oref magit-root-section children))))
+      (progn (goto-char (oref section start))
+             (when expand
+               (with-local-quit (magit-section-show section))
+               (recenter 0)))
+    (message (format "No diff sections found"))))
+
 ;;; Diff Mode
 
 (defvar-keymap magit-diff-mode-map
@@ -2664,6 +2710,11 @@ function errors."
 
 ;;; Revision Mode
 
+(defvar-keymap magit-revision-mode-map
+  :doc "Keymap for `magit-revision-mode'."
+  :parent magit-diff-mode-map
+  "j" #'magit-revision-jump)
+
 (define-derived-mode magit-revision-mode magit-diff-mode "Magit Rev"
   "Mode for looking at a Git commit.
 

Reply via email to