branch: externals/embark commit 7a2487f5bb8a6ea5a9b5048386d6dcbbc1b6cc85 Author: Omar Antolín <omar.anto...@gmail.com> Commit: Omar Antolín <omar.anto...@gmail.com>
TOC = imenu items in prog mode buffers, else outline headings Also, add the nice consult-imenu group-function to imenu TOCs now that Embark collect has group-function support. --- embark-consult.el | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/embark-consult.el b/embark-consult.el index 263b543cd8..503da3e93f 100644 --- a/embark-consult.el +++ b/embark-consult.el @@ -372,8 +372,39 @@ for any action that is a Consult async command." "Collect all imenu items in the current buffer." (cons 'imenu (mapcar #'car (consult-imenu--items)))) +(defvar consult-imenu-config) +(defun embark-consult--imenu-group-function (metadata prop) + "Return a suitable group-function for imenu METADATA. +Meant as :after-until advice for `completion-metadata-get'." + (when-let (((eq (alist-get 'category metadata) 'imenu)) + (config (plist-get + (cdr (seq-find (lambda (x) (derived-mode-p (car x))) + consult-imenu-config)) + :types))) + ;; taken from consult-imenu + (lambda (cand transform) + (let ((type (get-text-property 0 'consult--type cand))) + (cond + ((and transform type) + (substring + cand (1+ (next-single-property-change 0 'consult--type cand)))) + (transform cand) + (type (car (alist-get type config)))))))) + +(defun embark-consult-imenu-or-outline-candidates () + "Collect imenu items in prog modes buffer or outline headings otherwise." + (if (derived-mode-p 'prog-mode) + (embark-consult-imenu-candidates) + (embark-consult-outline-candidates))) + +(advice-add 'completion-metadata-get :after-until + #'embark-consult--imenu-group-function) + (setf (alist-get 'imenu embark-default-action-overrides) #'consult-imenu) -(add-to-list 'embark-candidate-collectors #'embark-consult-outline-candidates 'append) + +(add-to-list 'embark-candidate-collectors + #'embark-consult-imenu-or-outline-candidates + 'append) ;; consult-completing-read-multiple