Skip to content

Instantly share code, notes, and snippets.

@alejandrogallo
Created March 5, 2022 20:52
Show Gist options
  • Save alejandrogallo/b4d828ae92ae2691951d4a3d2c1f75dd to your computer and use it in GitHub Desktop.
Save alejandrogallo/b4d828ae92ae2691951d4a3d2c1f75dd to your computer and use it in GitHub Desktop.
Simple imenu literate support, kind of a hack!
;;
;; author: Alejandro Gallo
;; license: GPLv3
;;
(defvar imenu-literate-modes-alist
'((lisp-mode . (:expressions lisp-imenu-generic-expression))
(c++-mode . (:expressions cc-imenu-c++-generic-expression))
(c-mode . (:expressions cc-imenu-c-generic-expression))
(java-mode . (:expressions cc-imenu-java-generic-expression))
(fortran-mode . (:expressions fortran-imenu-generic-expression))))
(defvar imenu-literate-current-mode nil)
(defun imenu-literate-set-mode ()
(interactive)
(let ((mode (intern
(completing-read "Imenu literate mode: "
(mapcar #'car imenu-literate-modes-alist)))))
(setq-local imenu-literate-current-mode mode)))
(defun imenu-literate (src-edit?)
(interactive "P")
(unless imenu-literate-current-mode (imenu-literate-set-mode))
(let* ((pair (or (alist-get imenu-literate-current-mode
imenu-literate-modes-alist)
(error "Mode %s not found!" imenu-literate-current-mode)))
(expressions (getf pair :expressions))
(index-function (getf pair :index-function
#'imenu-default-create-index-function))
;;
(imenu-generic-expression (eval expressions))
(imenu-create-index-function index-function))
(imenu-list-update-safe)
(imenu-list-refresh)
(call-interactively #'imenu)
(when src-edit?
(org-edit-special))))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment