(add-hook 'c-mode-common-hook (lambda () (which-function-mode t)))After you do this, the name of the current function will appear in the modeline (the status-bar).
Now, apart from the mode line, emacs also knows the concept of the header line. This is the first line of the display; it seems little used. However, if you'd like to have the function name there, maybe because the mode line is full already, see this trick on EmacsWiki (scroll down).
which-function-mode does not work for all modes; it needs some help from the major mode to figure out what counts as a function; in my emacs, the following modes work (you can check from the which-func-modes variable):
(emacs-lisp-mode c-mode c++-mode perl-mode cperl-mode python-mode makefile-mode sh-mode fortran-mode f90-mode ada-mode diff-mode)
I hope your own functions do fit on your screen, making which-function-mode less needed -- function should not be too long or complex. But it's still useful when reading other people's code, of course. Note, there are other ways to not loose your orientation when reading code; earlier, we discussed hideshow, which enables showing/hiding the function bodies.
4 comments:
In the CEDET package at cedet.sf.net, there is a lot of infrastructure for parsing and tagging files, plus a mode called 'stickyfunc' mode. It is similar to which-func, but shows the signature line of the function that has scrolled off the top of the buffer in the header line.
CEDET also adds which-func support for a few more languages.
@Eric: thanks for the link.
I've never really gotten into cedet - but I'll try it out. At least these days it's as easy a 'apt-get install cedet-common' in ubuntu to install it.
Thanks for Sharing this. Was quite useful :-) - Rajarshi
It does not work when a function is defined inside a function :
(defun first ()
"1st func."
(defun second ()
"2nd func."
(message "plop"))
(second))
(wherever you put your point in this sexp, the modeline will always say "first")
And this is precisely when you want this to work. So not only it is useless, it's also dangerously misleading.
Post a Comment