From 027e6dd675c68bc56f5a61952dd53e508bafc31c Mon Sep 17 00:00:00 2001 From: Juri Linkov Date: Fri, 10 May 2024 19:45:21 +0300 Subject: [PATCH] Support customization of sorting order for Imenu completion candidates * lisp/imenu.el (imenu--completion-buffer): Set completion-extra-properties to '(:category imenu). (imenu--flatten-index-alist): Use imenu--subalist-p to handle newer format (INDEX-NAME INDEX-POSITION FUNCTION ARGUMENTS...) as well (bug#70846). * doc/emacs/misc.texi (DocView Navigation): Fix typo. (cherry picked from commit 5d8c2bad21cc647b3462acfe8e970419354cde83) --- doc/emacs/misc.texi | 2 +- lisp/imenu.el | 12 +++++++----- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/doc/emacs/misc.texi b/doc/emacs/misc.texi index 04e6138b692..3bee88bca86 100644 --- a/doc/emacs/misc.texi +++ b/doc/emacs/misc.texi @@ -590,7 +590,7 @@ even when @command{mutool} can be found on your system, customize the variable @code{doc-view-imenu-enabled} to the @code{nil} value. You can further customize how @code{imenu} items are formatted and displayed using the variables @code{doc-view-imenu-format} and -@code{doc-view-flatten}. +@code{doc-view-imenu-flatten}. @node DocView Searching @subsection DocView Searching diff --git a/lisp/imenu.el b/lisp/imenu.el index dd924b449cf..9c0c1ae144e 100644 --- a/lisp/imenu.el +++ b/lisp/imenu.el @@ -740,10 +740,12 @@ Return one of the entries in index-alist or nil." (imenu--in-alist name prepared-index-alist) ;; Default to `name' if it's in the alist. name)))) - (let ((minibuffer-setup-hook minibuffer-setup-hook)) - ;; Display the completion buffer. - (if (not imenu-eager-completion-buffer) - (add-hook 'minibuffer-setup-hook 'minibuffer-completion-help)) + ;; Display the completion buffer. + (minibuffer-with-setup-hook + (lambda () + (setq-local completion-extra-properties '(:category imenu)) + (unless imenu-eager-completion-buffer + (minibuffer-completion-help))) (setq name (completing-read prompt prepared-index-alist nil t nil 'imenu--history-list name))) @@ -784,7 +786,7 @@ Returns t for rescan and otherwise an element or subelement of INDEX-ALIST." (concat prefix imenu-level-separator name) name)))) (cond - ((or (markerp pos) (numberp pos)) + ((not (imenu--subalist-p item)) (list (cons new-prefix pos))) (t (imenu--flatten-index-alist pos concat-names new-prefix))))) -- 2.39.5