每个开发者应该偶尔会遇到这么一种情况吧:你正在查看一个类或方法的定义代码,这时候你想看看这个类/方法的名称是什么,但是很有可能这个类/方法的名称并同时也没有显示在编辑区中. 当然,你可以往上拖动滚动条然后查看一下类/方法的名称,但其实有一个更加简便的方法,那就是使用Emacs内建的which-function-mode.

当开启了which-function-mode后,你会在buffer modeline的中间位置看到光标所在处的代码所表示的定义的名称.

开启which-function-mode的方式很简单:

(which-function-mode)

这样就会对所有支持which-function-mode的major mode都开启该功能了.

若你只想在特定的几个major mode下开启该功能,可以这样做:

(add-to-list 'which-func-modes 'ruby-mode)      
(add-to-list 'which-func-modes 'emacs-lisp-mode)

默认情况下,当which-function-mode不能检测到定义的名称时,会显示`???`. 但你也可以通过下面的语句来更改这个显示方式:

(setq which-func-unknown "n/a")

那么,如果你希望把定义的名称显示在buffer的header-line而不是modeline该怎么办呢? 下面的代码能做到这一点(由Sebastian Wiesner提供)

;; Show the current function name in the header line                                (which-function-mode)                                                               
(setq-default header-line-format                                                    
              '((which-func-mode ("" which-func-format " "))))                      
(setq mode-line-misc-info                                                           
      ;; We remove Which Function Mode from the mode line, because it's mostly
      ;; invisible here anyway.                                               
      (assq-delete-all 'which-func-mode mode-line-misc-info))