summaryrefslogtreecommitdiff
path: root/lisp
diff options
context:
space:
mode:
authorKyle Meyer <kyle@kyleam.com>2015-12-28 23:47:35 -0500
committerKyle Meyer <kyle@kyleam.com>2015-12-28 23:47:35 -0500
commit7659119bff4d6e40661b6939338dfd99be767a95 (patch)
treeea42d034fbd4432f236867554b3c925f85c67aad /lisp
parente02ebf3edf70830c6ca067f6908ef4181bcfc2bd (diff)
downloademacs.d-7659119bff4d6e40661b6939338dfd99be767a95.tar.gz
Add custom imenu index function for latex-mode
Diffstat (limited to 'lisp')
-rw-r--r--lisp/init-tex.el25
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)