在Emacs Lisp中,如何找到符号的定义位置

Jis*_*Yoo 5 emacs elisp

当我这样做C-h f或者C-h v,帮助告诉我在哪个文件中定义符号或从哪里自动加载.如何以编程方式查找相同的信息?

Jam*_*ter 9

一些挖掘揭示了这一点

(find-lisp-object-file-name object type)
Run Code Online (Sandbox Code Playgroud)

应该做的伎俩.举个例子:

(find-lisp-object-file-name 'goto-line 'function)
;; => "/usr/local/Cellar/emacs/24.3/share/emacs/24.3/lisp/simple.el"
Run Code Online (Sandbox Code Playgroud)

编辑:我是如何发现这些信息的:

首先,我C-h k C-h f确定了要C-h f绑定的内容.结果是describe-function,让我们C-h f describe-function来看看它的来源.我注意到它本质上是一个交互式包装器describe-function-1,所以我跳到了源头.那里有很多东西,但相关的是:

(file-name (find-lisp-object-file-name function def))
Run Code Online (Sandbox Code Playgroud)

揭示这find-lisp-object-file-name是用于在内部完成此工作的函数.