我想包含一个非elisp文件(一个小的Python程序)的引用,并且希望能够说“它与当前文件在同一目录中,但文件名不同。” 在许多脚本语言中,有像 PHP 中的 __FILE__
这样的东西可以获取当前文件的绝对路径。
如果要包含的文件在 load-path
中,则可以使用 (locate-library "file.py" t)
找到它,但如果该文件不在加载路径中,则会遇到困难。
那么,在 Emacs Lisp 文件被加载时,有没有一种方式可以找到其自身的绝对路径呢?
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)
来获取文件名。
(或者 load-file-name(buffer-file-name))
,意思不变,只是更易于理解。 - dbrsymbol-file
点个赞。目前使用的是变种(defvar my-locn nil) (setq my-locn (symbol-file 'my-locn))
。 - Paul Whittaker
buffer-file-name
”,这不是你所问的。 - Trey Jackson