Elisp中绝对路径的相对路径

问题描述 投票:18回答:3

有一个相对路径,如何从我正在加载的elisp文件的位置将其转换为绝对路径。也就是说,我有一个我正在加载的elisp文件,它有一个相对路径,我需要一个绝对的路径。

emacs elisp
3个回答
21
投票
'file-truename

从文档:

返回FILENAME的名称,这应该是绝对的。通过在文件级别和包含它的目录级别追逐符号链接来找到文件名的名称,直到在任何级别都没有链接。

提供的另一个解决方案('expand-file-name)留下了符号链接,这可能是您想要的,也可能不是。 'file-truename使用'expand-file-name,因此它们都将确定缓冲区的路径相对默认目录(这就是你要求的)。

在看到对不同答案的评论/问题之后,问题是default-directory是调用'load的缓冲区的目录。

幸运的是,有一个变量'load sets,它存储了正在加载的文件的路径。试试这段代码:

;; this is in the file being loaded
(let ((default-directory (file-name-directory load-file-name)))
   (file-truename "blih"))

13
投票

我最终使用:

(expand-file-name "relative/path" (file-name-directory load-file-name))

8
投票

您可以使用expand-file-name函数将相对文件名或路径转换为绝对文件名/路径。查看here了解更多信息。

© www.soinside.com 2019 - 2024. All rights reserved.