WhichFuncMode (also known as WhichFunctionMode) is a minor mode, that when activated displays the current function name in the mode line. It works under certain major modes, like CcMode or PerlMode. To activate it, type
M-x which-function-mode RET
or enter the following piece of elisp into your `.emacs` file to make it permanent :
M-x imenu RET *Rescan* RET RET
(which-function-mode) (setq mode-line-format (delete (assoc 'which-func-mode mode-line-format) mode-line-format) which-func-header-line-format '(which-func-mode ("" which-func-format))) (defadvice which-func-ff-hook (after header-line activate) (when which-func-mode (setq mode-line-format (delete (assoc 'which-func-mode mode-line-format) mode-line-format) header-line-format which-func-header-line-format)))
(Note: Emacs 24.2.91 seems to put the which-func configuration in
‘mode-line-misc-info’ instead, so you may need to replace
‘mode-line-misc-info’ in the above snippet.)
By default, which-func mode automatically enables itself in all modes which have imenu support. To configure a subset of languages for which-func mode, set
(eval-after-load "which-func" '(setq which-func-modes '(java-mode c++-mode org-mode)))
To configure a language for which-func mode, you need to configure it for ImenuMode.
WhichFuncMode can be customized for non-standard language modes (including non-imenu supporting modes) using the hook
‘which-func-functions’, so adding an elisp function for a non-standard mode to this hook should work.
However, there is a gotcha. Internally, when imenu isn’t available, WhichFuncMode disables itself in the function
‘which-func-ff-hook’, which is called from the hook
‘find-file-hook’. An ugly workaround for this is to re-enable it by appending to
‘find-file-hook’. For example, for
‘foo-mode’ which provides the name of a context with `foo-whereami()’:
(defun foo-find-file-hook () (when (derived-mode-p 'foo-mode) (which-function-mode t) (setq which-func-mode t) (add-hook 'which-func-functions 'foo-whereami t t))) ;; We need this to be run AFTER which-func-ff-hook - the "t" means append (add-hook 'find-file-hook 'foo-find-file-hook t)
An alternative mode that offers similar functionality for several programming languages is SemanticIdleBreadcrumbsMode.
Another alternative mode is cfm. Cfm (display current function or method) will display class-qualified member function names (A::foo), particularly useful for C++ and Java classes that embed member function definitions (that is, without the three-box model).