diff options
author | Kyle Meyer <kyle@kyleam.com> | 2015-12-28 23:47:35 -0500 |
---|---|---|
committer | Kyle Meyer <kyle@kyleam.com> | 2015-12-28 23:47:35 -0500 |
commit | 7659119bff4d6e40661b6939338dfd99be767a95 (patch) | |
tree | ea42d034fbd4432f236867554b3c925f85c67aad | |
parent | e02ebf3edf70830c6ca067f6908ef4181bcfc2bd (diff) | |
download | emacs.d-7659119bff4d6e40661b6939338dfd99be767a95.tar.gz |
Add custom imenu index function for latex-mode
-rw-r--r-- | lisp/init-tex.el | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/lisp/init-tex.el b/lisp/init-tex.el index 708c19e..5fc1a68 100644 --- a/lisp/init-tex.el +++ b/lisp/init-tex.el @@ -9,5 +9,30 @@ (add-to-list 'auto-mode-alist '("\\.[tT]e[xX]\\'" . latex-mode)) (add-hook 'LaTeX-mode-hook 'turn-on-reftex) +(add-hook 'LaTeX-mode-hook (lambda () + (setq imenu-create-index-function + #'km/latex-imenu-create-index-function))) + +(defun km/latex-imenu-create-index-function () + ;; See `LaTeX-imenu-create-index-function'. + (TeX-update-style) + (let ((sec-re (LaTeX-outline-regexp)) + (title-re "\\*\\{0,1\\}{\\([^}]+\\)}") + entries) + (goto-char (point-min)) + (while (re-search-forward sec-re nil t) + (let ((sec (replace-regexp-in-string + "\\\\" "" (match-string-no-properties 0))) + (title (and (looking-at title-re) + (replace-regexp-in-string + "\\s-\\s-+" " " + (replace-regexp-in-string + "\n" "" (match-string-no-properties 1)))))) + (when (> (length title) 45) + (setf (substring title 21 -21) "...")) + (push (cons (if title (format "%s (%s)" title sec) sec) + (save-excursion (beginning-of-line) (point-marker))) + entries))) + (nreverse entries))) (provide 'init-tex) |