Hello, Chris and Philip.
On Sun, Oct 02, 2022 at 13:13:16 +0000, Philip Kaludercic wrote:
> With this dumb c++ file:
> ----
> int Function( int n ) {
> return n;
> }
> int Function( float v ) {
> return (int)(v + 0.5);
> }
> ----
> Hitting imenu only gives a single Function entry. It should probably
> give two, maybe with a line number after them like "Function(123)" or
> whatever. Currently there's no way to get to the second Function from
> imenu.
imenu is old and rather simplistic. It parses a buffer, then stores the
results in an association list. It then uses the function assoc on that
list to get "the" match. What we could do with is a function which gets
_all_ the matches from an alist, and I've asked on emacs-devel about
this.
Note that this is not the case when using Eglot and a LSP server like
clangd.
Much more modern!
I've CC'ed Alan to see if he knows how this could be done by c++-mode
itself.
I'm pretty sure it couldn't be. I think it would involve enhancing
imenu. The scanning interface to imenu allows just function names to be
collected. It doesn't allow anything extra (such as a line number) to
be included into the alist.
I've looked at problems with imenu in C++ Mode before, but got bogged
down without coming up with a workable solution. There the problem was
identically named methods in different classes, or something like that.
So, maybe we can enhance imenu. But not for Emacs 29.
--
Alan Mackenzie (Nuremberg, Germany).