有一个相对路径,如何从我正在加载的elisp文件所在的位置将其转换为绝对路径。也就是说,我有一个我正在加载的elisp文件,它有一个相对路径,我需要一个绝对的。
答案 0 :(得分:21)
'file-truename
来自文档:
返回FILENAME的名称,即 应该是绝对的。真正的一个 通过追逐符号来找到文件名 链接文件级别 并在目录的级别 包含它,直到没有链接 任何级别。
提供的另一个解决方案('expand-file-name)留下了符号链接,这可能是您想要的,也可能不是。 'file-truename使用'expand-file-name,因此它们都将确定缓冲区的路径相对默认目录(这就是你要求的)。
在看到不同答案的评论/问题之后,问题是default-directory是调用'load。
的缓冲区的目录。幸运的是,有一个变量'负载集存储了正在加载的文件的路径。试试这段代码:
;; this is in the file being loaded
(let ((default-directory (file-name-directory load-file-name)))
(file-truename "blih"))
答案 1 :(得分:13)
我最终使用了:
(expand-file-name "relative/path" (file-name-directory load-file-name))
答案 2 :(得分:8)
您可以使用expand-file-name
函数将相对文件名或路径转换为绝对文件名/路径。查看here以获取更多信息。