Imenu Indexing My emacs Init File
After implementing my simple occur indexing in my last post :
A suggestion was made to put this into an imenu
.
I thought that was rather a good idea and it would also give me the opportunity to explore imenu
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 defuns
and 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 imenu-generic-expression
variable.
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 defun
and 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!