From e3d8d95c0340b25b5a006dc85de8de3ac86d8453 Mon Sep 17 00:00:00 2001 From: Tom Willemse Date: Fri, 3 Oct 2025 17:01:26 -0700 Subject: oni-web: Add imenu regexp expression --- oni-web.el | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/oni-web.el b/oni-web.el index 1fec6bf..fccfbd5 100644 --- a/oni-web.el +++ b/oni-web.el @@ -4,7 +4,7 @@ ;; Author: Tom Willemse ;; Keywords: local -;; Version: 2025.0709.110108 +;; Version: 2025.1003.170118 ;; Package-Requires: (web-mode oni-flycheck prettier-js) ;; This program is free software; you can redistribute it and/or modify @@ -58,5 +58,25 @@ ;;;###autoload (add-to-list 'auto-mode-alist (cons (rx ".vue" eos) 'web-mode)) +(defun oni-web-set-imenu-expression () + (setq-local imenu-create-index-function 'imenu-default-create-index-function + imenu-generic-expression + (list + (list + "Html" + (rx (or (seq "id=\"" (group-n 1 (one-or-more (not "\""))) "\"") + (seq ""))) ">" (group-n 1 (minimal-match (one-or-more any))) ""))) + 1) + (list + "JavaScript" + (rx (seq bol (minimal-match (zero-or-more space)) + (or (seq (optional "async ") (group-n 1 (minimal-match (one-or-more alnum))) "(" (minimal-match (zero-or-more (not ")"))) ")" (minimal-match (zero-or-more white)) "{") + (seq (minimal-match (group-n 1 (one-or-more alnum))) ":" (minimal-match (zero-or-more white)) (optional "function ") "(") + (seq (optional "export ") "function " (minimal-match (group-n 1 (one-or-more (any punct alnum)))) "(" (minimal-match (zero-or-more (not ")"))) ")" (minimal-match (zero-or-more space)) "{") + (seq (optional "export ") (optional "const ") (minimal-match (group-n 1 (one-or-more (any punct alnum)))) (minimal-match (zero-or-more space)) "=" (minimal-match (zero-or-more space)) (optional "async") (optional "function") (minimal-match (zero-or-more space)) "(")))) + 1)))) + +(add-hook 'web-mode-hook #'oni-web-set-imenu-expression) + (provide 'oni-web) ;;; oni-web.el ends here -- cgit v1.3-2-g0d8e