auctex
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: which-func, imenu, AUCTeX


From: Arash Esbati
Subject: Re: which-func, imenu, AUCTeX
Date: Wed, 16 Oct 2024 07:31:54 +0200
User-agent: Gnus/5.13 (Gnus v5.13)

Hi Greg,

Greg Bognar via General discussion about AUCTeX <auctex@gnu.org> writes:

> I like to display the section (chapter, etc.) name on the modeline by using
> which-func.  If I understand correctly, which-func uses imenu to get the
> function (section, etc.) names, and AUCTeX supports imenu by setting
> `imenu-create-index-function' to `LaTeX-imenu-create-index-function'.

I only had a brief look, and IIUC, which-func uses the function
`which-function' to gather the current function name for the modeline:

,----[ C-h f which-function RET ]
| which-function is a interpreted-function in ‘which-func.el’.
| 
| (which-function)
| 
| Return current function name based on point.
| Uses ‘which-func-functions’, ‘add-log-current-defun’.
| or ‘imenu--index-alist’
| If no function name is found, return nil.
| 
`----

As you see, it uses `add-log-current-defun' before `imenu--index-alist'.
And latex.el contains:

  (setq-local add-log-current-defun-function #'TeX-current-defun-name)

So what happens is that the value of `which-func-functions' is nil, so
`TeX-current-defun-name' is used for the current function, which indeed
returns things like "section{My Section}" or "chapter{My Chapter}".

I think the way to change this is by adding an appropriate function to
`which-func-functions' which comes first.

> Is there a way to modify `LaTeX-imenu-create-index-function' (if
> that's indeed the culprit) so that it only returns the section
> (chapter, etc.) name without the \-less section (chapter, etc.)
> command?

That function works as expected.  Take this example:

--8<---------------cut here---------------start------------->8---
\documentclass{article}

\usepackage{titlesec}

\titlespacing\section{0pt}{2\bigskipamount}{\parskip}

\begin{document}

\section{First section}
\label{sec:first-section}

\subsection{This is a subsection}
\label{sec:this-subsection}


\section{Second section}
\label{sec:second-section}

\end{document}
--8<---------------cut here---------------end--------------->8---

and do 'M-x (LaTeX-imenu-create-index-function) RET' which returns:

--8<---------------cut here---------------start------------->8---
(("article" . #<marker at 1 in xparse-test.tex>)
 ("document" . #<marker at 104 in xparse-test.tex>)
 ("  First section" . #<marker at 122 in xparse-test.tex>)
 ("    This is a subsection" . #<marker at 173 in xparse-test.tex>)
 ("  Second section" . #<marker at 237 in xparse-test.tex>)
 ("document" . #<marker at 290 in xparse-test.tex>))
--8<---------------cut here---------------end--------------->8---

> And that it does not pick up things like \titlespacing\section{0pt}?

See above.

> (Interestingly, the items that appear in the imenu menu on the menubar are
> slightly different than the items that are displayed on the modeline.)

See above.

FWIW, the builtin latex-mode does exactly the same thing.

Best, Arash



reply via email to

[Prev in Thread] Current Thread [Next in Thread]