我有一个文本文件,其中包含我的elisp代码所依赖的单词列表。我想将它保存在与源文件相同的目录中。
使用相对路径似乎不起作用,因为当运行触发读取的函数时,路径与您当前所在的缓冲区相关。
代码:
(defconst etype-lines-file "etype.lines")
(defun etype-read-file ()
(with-temp-buffer
(insert-file-contents (expand-file-name etype-lines-file default-directory))
(apply
'vector
(split-string
(buffer-substring-no-properties (point-min) (point-max)) "\n"))))
有什么方法可以实现相对于源代码文件位置的路径?
答案 0 :(得分:3)
您可以使用load-file-name
。在编译或加载Emacs Lisp文件时,它绑定到源文件的名称。以下是elisp手册中的一个示例:
(defconst superfrobnicator-base (file-name-directory load-file-name))
(defun superfrobnicator-fetch-image (file)
(expand-file-name file superfrobnicator-base))
这意味着您必须独占load-file
或emacs-lisp-byte-compile-and-load
加载文件,而不是评估部分缓冲区,因为load-file-name
是nil
后一种情况。
答案 1 :(得分:0)
是的,因为这段代码:
(insert-file-contents (expand-file-name etype-lines-file
default-directory
))`
相反,要么将您想要的目录传递给您的函数,作为参数,并使用此处代替default-directory
,或使用全局变量(或“常量”,通过defconst
)对于目录(代替default-directory
这里)。