From 04c7cf51b4f312d322aed88097777211e64e94d0 Mon Sep 17 00:00:00 2001 From: Henrik Lissner Date: Sat, 16 Nov 2024 06:57:02 -0500 Subject: [PATCH] tweak(emacs-lisp): imenu: rearrange groups & fix nested cl types In order to make imenu in elisp buffers more useful: - Sections are given the highest precedence, and should only show lines with more than two semicolons at the start of the line. - Fixes an issue where cl-defstruct blocks with options in its NAME argument were missed by imenu. I.e. with (cl-defstruct (foo ...)), `foo` would not show up in imenu. --- modules/lang/emacs-lisp/autoload.el | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/lang/emacs-lisp/autoload.el b/modules/lang/emacs-lisp/autoload.el index 8e759f5a2..7ff00de6f 100644 --- a/modules/lang/emacs-lisp/autoload.el +++ b/modules/lang/emacs-lisp/autoload.el @@ -259,8 +259,7 @@ https://emacs.stackexchange.com/questions/10230/how-to-indent-keywords-aligned" (defun +emacs-lisp-extend-imenu-h () "Improve imenu support in `emacs-lisp-mode' for Doom's APIs." (setq imenu-generic-expression - `(("Section" "^[ \t]*;;;*\\**[ \t]+\\([^\n]+\\)" 1) - ("Evil commands" "^\\s-*(evil-define-\\(?:command\\|operator\\|motion\\) +\\(\\_<[^ ()\n]+\\_>\\)" 1) + `(("Evil commands" "^\\s-*(evil-define-\\(?:command\\|operator\\|motion\\) +\\(\\_<[^ ()\n]+\\_>\\)" 1) ("Unit tests" "^\\s-*(\\(?:ert-deftest\\|describe\\) +\"\\([^\")]+\\)\"" 1) ("Package" "^\\s-*\\(?:;;;###package\\|(\\(?:package!\\|use-package!?\\|after!\\)\\) +\\(\\_<[^ ()\n]+\\_>\\)" 1) ("Major modes" "^\\s-*(define-derived-mode +\\([^ ()\n]+\\)" 1) @@ -273,7 +272,8 @@ https://emacs.stackexchange.com/questions/10230/how-to-indent-keywords-aligned" ("CLI Command" "^\\s-*(\\(def\\(?:cli\\|alias\\|obsolete\\|autoload\\)! +\\([^\n]+\\)\\)" 1) ("Functions" "^\\s-*(\\(?:cl-\\)?def\\(?:un\\|un\\*\\|method\\|generic\\|-memoized!\\) +\\([^ ,)\n]+\\)" 1) ("Variables" "^\\s-*(\\(def\\(?:c\\(?:onst\\(?:ant\\)?\\|ustom\\)\\|ine-symbol-macro\\|parameter\\|var\\(?:-local\\)?\\)\\)\\s-+\\(\\(?:\\sw\\|\\s_\\|\\\\.\\)+\\)" 2) - ("Types" "^\\s-*(\\(cl-def\\(?:struct\\|type\\)\\|def\\(?:class\\|face\\|group\\|ine-\\(?:condition\\|error\\|widget\\)\\|package\\|struct\\|t\\(?:\\(?:hem\\|yp\\)e\\)\\)\\)\\s-+'?\\(\\(?:\\sw\\|\\s_\\|\\\\.\\)+\\)" 2)))) + ("Types" "^\\s-*(\\(cl-def\\(?:struct\\|type\\)\\|def\\(?:class\\|face\\|group\\|ine-\\(?:condition\\|error\\|widget\\)\\|package\\|struct\\|t\\(?:\\(?:hem\\|yp\\)e\\)\\)\\)\\s-+'?(?\\(\\(?:\\sw\\|\\s_\\|\\\\.\\)+\\)" 2) + ("Section" "^[ \t]*;;;+\\**[ \t]+\\([^\n]+\\)" 1)))) (defun +emacs-lisp--in-package-buffer-p () (let* ((file-path (buffer-file-name (buffer-base-buffer)))