From cf9f481d98c7987d5970e76f38ce6d099907e9d2 Mon Sep 17 00:00:00 2001 From: Damien Cassou Date: Tue, 25 Jun 2019 00:55:45 +0200 Subject: [PATCH] Add imenu support to package-menu-mode * lisp/emacs-list/package.el (package--imenu-prev-index-position-function package--imenu-extract-index-name-function): Add Imenu functions to package-menu-mode (bug#27134). --- etc/NEWS | 3 +++ lisp/emacs-lisp/package.el | 24 +++++++++++++++++++++++- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/etc/NEWS b/etc/NEWS index 0f764cd9986..101b7f5b7bb 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -812,6 +812,9 @@ early init file. *** New function 'package-activate-all'. +--- +*** Imenu support has been added to `package-menu-mode'. + ** Info --- diff --git a/lisp/emacs-lisp/package.el b/lisp/emacs-lisp/package.el index 670831d9630..b60a8a136a1 100644 --- a/lisp/emacs-lisp/package.el +++ b/lisp/emacs-lisp/package.el @@ -2640,7 +2640,11 @@ Letters do not insert themselves; instead, they are commands. (setq tabulated-list-padding 2) (setq tabulated-list-sort-key (cons "Status" nil)) (add-hook 'tabulated-list-revert-hook #'package-menu--refresh nil t) - (tabulated-list-init-header)) + (tabulated-list-init-header) + (setf imenu-prev-index-position-function + #'package--imenu-prev-index-position-function) + (setf imenu-extract-index-name-function + #'package--imenu-extract-index-name-function)) (defmacro package--push (pkg-desc status listname) "Convenience macro for `package-menu--generate'. @@ -3671,6 +3675,24 @@ activations need to be changed, such as when `package-load-list' is modified." ;; End: ")))) +(defun package--imenu-prev-index-position-function () + "Move point to previous line in package-menu buffer. +This function is used as a value for +`imenu-prev-index-position-function'." + (unless (bobp) + (forward-line -1))) + +(defun package--imenu-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." + (let ((package-desc (tabulated-list-get-id))) + (format "%s (%s): %s" + (package-desc-name package-desc) + (package-version-join (package-desc-version package-desc)) + (package-desc-summary package-desc)))) + (provide 'package) ;;; package.el ends here -- 2.39.5