20

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

4

3 回答 3

25
'file-truename

从文档中:

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

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

在看到不同答案的评论/问题后,问题是默认目录是调用'load.txt'的缓冲区的目录。

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

;; this is in the file being loaded
(let ((default-directory (file-name-directory load-file-name)))
   (file-truename "blih"))
于 2008-11-15T05:06:50.860 回答
13

我最终使用:

(expand-file-name "relative/path" (file-name-directory load-file-name))
于 2008-11-15T02:41:56.127 回答
9

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

于 2008-11-15T02:03:32.570 回答