From 94988f35904fc1b1bcc555f9fd398eb36257c3b0 Mon Sep 17 00:00:00 2001 From: Damien Cassou Date: Tue, 23 May 2017 18:20:35 +0200 Subject: [PATCH] Add support for imenu in git-rebase [#3022] --- lisp/Makefile | 2 +- lisp/git-rebase.el | 4 ++++ lisp/magit-imenu.el | 23 +++++++++++++++++++++++ 3 files changed, 28 insertions(+), 1 deletion(-) diff --git a/lisp/Makefile b/lisp/Makefile index a5e63bcb2e..199e178ae8 100644 --- a/lisp/Makefile +++ b/lisp/Makefile @@ -47,7 +47,7 @@ magit-subtree.elc: magit.elc magit-ediff.elc: magit.elc magit-extras.elc: magit.elc git-rebase.elc: magit.elc -magit-imenu.elc: magit.elc +magit-imenu.elc: magit.elc git-rebase.elc ## Build ############################################################# diff --git a/lisp/git-rebase.el b/lisp/git-rebase.el index 5342bf494f..b3aa80258d 100644 --- a/lisp/git-rebase.el +++ b/lisp/git-rebase.el @@ -482,6 +482,10 @@ running 'man git-rebase' at the command line) for details." (setq-local redisplay-unhighlight-region-function 'git-rebase-unhighlight-region) (add-hook 'with-editor-pre-cancel-hook 'git-rebase-autostash-save nil t) (add-hook 'with-editor-post-cancel-hook 'git-rebase-autostash-apply nil t) + (setq imenu-prev-index-position-function + #'magit-imenu--rebase-prev-index-position-function) + (setq imenu-extract-index-name-function + #'magit-imenu--rebase-extract-index-name-function) (when (boundp 'save-place) (setq save-place nil))) diff --git a/lisp/magit-imenu.el b/lisp/magit-imenu.el index 3f8ad6b3b5..0a487441b1 100644 --- a/lisp/magit-imenu.el +++ b/lisp/magit-imenu.el @@ -36,6 +36,7 @@ (require 'subr-x) (require 'magit) +(require 'git-rebase) (defun magit-imenu--index-function (entry-types menu-types) "Return an alist of imenu entries in current buffer. @@ -133,5 +134,27 @@ This function is used as a value for '(file commit stash) '(unpushed unstaged unpulled untracked staged stashes))) +;;;; Rebase mode + +;;;###autoload +(defun magit-imenu--rebase-prev-index-position-function () + "Move point to previous commit in git-rebase buffer. +This function is used as a value for +`imenu-prev-index-position-function'." + (catch 'found + (while (not (bobp)) + (git-rebase-backward-line) + (when (git-rebase-line-p) + (throw 'found t))))) + +;;;###autoload +(defun magit-imenu--rebase-extract-index-name-function () + "Return imenu name for line at point. +This function is used as a value for +`imenu-extract-index-name-function'. Point should be at the +beginning of the line." + (buffer-substring-no-properties (line-beginning-position) + (line-end-position))) + (provide 'magit-imenu) ;;; magit-imenu.el ends here