如何在Emacs Lisp中引用当前正在加载的文件?

22

我想包含一个非elisp文件(一个小的Python程序)的引用,并且希望能够说“它与当前文件在同一目录中,但文件名不同。” 在许多脚本语言中,有像 PHP 中的 __FILE__ 这样的东西可以获取当前文件的绝对路径。

如果要包含的文件在 load-path 中,则可以使用 (locate-library "file.py" t) 找到它,但如果该文件不在加载路径中,则会遇到困难。

那么,在 Emacs Lisp 文件被加载时,有没有一种方式可以找到其自身的绝对路径呢?


1
更改标题以反映所提出的问题。原始问题的标题会让我想回答“变量buffer-file-name”,这不是你所问的。 - Trey Jackson
1个回答

32

M-x describe-variable load-file-name


M-x describe-variable load-file-name
load-file-name is a variable defined in `C source code'.

Documentation:
Full name of file being loaded by `load'.

你可能也有兴趣使用symbol-file函数,它可以告诉你一个指定的函数或变量定义所在的绝对文件名。

如果你想做得更高级一些,你可以检查load-in-progress变量。如果它是nil,那么就没有加载正在进行(意味着你可能正在一个缓冲区中执行eval)。在这种情况下,你可以尝试使用(buffer-file-name)来获取文件名。


6
更简单的写法:(或者 load-file-name(buffer-file-name)),意思不变,只是更易于理解。 - dbr
1
为了允许自我引用代码,给symbol-file点个赞。目前使用的是变种(defvar my-locn nil) (setq my-locn (symbol-file 'my-locn)) - Paul Whittaker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接