After implementing my simple occur indexing in my last post :
A suggestion was made to put this into an
I thought that was rather a good idea and it would also give me the opportunity to explore
I came up with the following to add to the emacs init file :
(add-hook 'emacs-lisp-mode-hook (lambda () (setq imenu-sort-function 'imenu--sort-by-name) (setq imenu-generic-expression '( (nil "^;;[[:space:]]+-> \\(.*\\)$" 1) ("defun" "^.*([[:space:]]*defun[[:space:]]+\\([[:word:]-/]+\\)" 1) ("use-package" "^.*([[:space:]]*use-package[[:space:]]+\\([[:word:]-]+\\)" 1) ) ) (imenu-add-menubar-index)))
which produces the following:
I thought for good measure I would also add in some menus for
use-package declarations (just for fun!) with my main defined sections forming the top level due to the MENU-TITLE being set to nil in the
This implementation has the added benefit of integrating nicely into the local completion system. For example I use
vertico and running
imenu calls up the defined sections in the mini-buffer and as an extra benefit running
consult-imenu does its consult thing to quickly step through the sections or of course to complete. As I have defined section names for
use-package the completion search can search on these too to quickly narrow things down.
I had never looked into
imenu before and it was quite an interesting learning experience and in fact I went all the way to defining my own
imenu-create-index-function where I can create my own alist index in any way I want to, that was until I found a more simple method!