在emacs lisp中查找源目录中的文件

时间:2013-12-11 12:21:25

标签: file emacs path elisp

我有一个文本文件,其中包含我的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"))))

有什么方法可以实现相对于源代码文件位置的路径?

2 个答案:

答案 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-fileemacs-lisp-byte-compile-and-load加载文件,而不是评估部分缓冲区,因为load-file-namenil后一种情况。

答案 1 :(得分:0)

是的,因为这段代码:

(insert-file-contents (expand-file-name etype-lines-file default-directory ))`

相反,要么将您想要的目录传递给您的函数,作为参数,并使用此处代替default-directory,或使用全局变量(或“常量”,通过defconst )对于目录(代替default-directory这里)。