2013-12-11 41 views
1

我有一個文本文件,其中包含我的elisp代碼所依賴的單詞列表。我想保留在與源文件相同的目錄中。在emacs lisp的源代碼目錄中查找文件

使用相對路徑似乎並沒有工作,因爲當觸發閱讀功能運行路徑是相對於什麼緩衝您目前在

代碼:

(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")))) 

任何方式來實現相對於源代碼文件位置的路徑?

回答

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-name是在後一種情況下nil

0

是的,這是因爲這個代碼:

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

相反,必須通過你想你的函數的目錄,作爲參數,並使用該這裏取代default-directory,或者使用全局變量(或「constant」,通過defconst)作爲目錄(代替default-directory這裏)。