From: Martin S. <ma...@ly...> - 2000-11-27 01:20:18
|
QuoteMstr <qt...@op...> wrote: > The patch below (uuencoded, because some lines are longer than 80 > characters), implements an etags parser and functions to massage that > data into a form that imenu can understand. The results are similar to > the imenu support of Python-mode, with classes having their own > menu entries with subclasses having their, etc. etc. etc. It also, > unfortunately, relies in indentation, but as long as 1) This package > computes it correctly 2) You use it consistently 3) Your etags allows > the indentation into the output, it should be fine. (Number one could > use a bit of work, though). I have tested this in XEmacs, but not GNU > Emacs --- since it doesn't use any XEmacs-specific code however, > AFAIK, it *should* work for both. > > It is also against release 5.25 of cc-mode. However, since the patch > is comprised mostly of additions, it should be fine. > > It works with the speedbar. Well, thanks, but I don't think this will get into CC Mode. Some things I noted: o There are many functions that doesn't work in Emacs 19.34, e.g. with-temp-buffer, split-string, mapvector and replace-in-string. There are functions that doesn't exist in Emacs 20 either, like replace-in-string. o A hardcoded path to etags(!) o etags is required, i.e. no fallback in case it can't be found or doesn't work for some reason. This would surely lead to a lot of bug reports and support mails. o There's no common prefix to the functions and variables to minimize namespace polution. o "NOT WORKING YET!" in a docstring isn't very reassuring. o The prerequisites you list above aren't necessarily fulfilled. I don't know exactly what you mean with "relies in indentation", but it can very well happen that people use no extra indentation in class blocks. If it doesn't work in such cases, it has to provide at least a reasonable fallback. (Not saying your code doesn't; I haven't tested it that much.) o I haven't used the imenu support in Python mode so I don't know exactly what to expect; I mostly find the imenu entries confusing when I test this. When I e.g. used it on my C++ test file (attached), which contains correct (although exceedingly ugly) C++, I get strange imenu entries like "foo;.foo" and "int...int.bar;^?". All in all, it looks to me like a hack that needs to be cleaned up quite a bit first. Even so, I'm uncertain about putting it into CC Mode, mostly because it worries me to have to maintain something which uses external processes, with all the cross-platform issues that brings along. It's a neat idea to interface etags with imenu, though. It can very well be a nice separate package; it's not hard to override the imenu settings that CC Mode installs when it starts up. |