2012-05-10 25 views
5

在使用el-get安裝最後一個cedet期間,我在窗口上遇到了展開文件名函數的奇怪行爲。這個問題與自動加載的產生有關。Windows上的Emacs elisp展開文件名行爲

去年的emacs的autoload.el 50年1月24日包含以下功能:

(defun autoload-generated-file() 
    (expand-file-name generated-autoload-file 
       ;; File-local settings of generated-autoload-file should 
       ;; be interpreted relative to the file's location, 
       ;; of course. 
       (if (not (local-variable-p 'generated-autoload-file)) 
        (expand-file-name "lisp" source-directory)))) 

在我的情況下產生的,自動加載的文件是:

"/home/ngulyamov/.emacs.d/el-get/cedet/lisp/cedet/srecode/loaddefs.el" 

,因爲我有$ HOME $環境指向C:/ home/ngulyamov的變量。在這種情況下,上面的函數返回:

"d:/home/ngulyamov/.emacs.d/el-get/cedet/lisp/cedet/srecode/loaddefs.el" 

由於源目錄包含:

"d:/devel/emacs/emacs-bzr/trunk_jenkins/". 

正如你可以看到它的變化盤符從C:到d :. 同時對emacs的23.3這個函數返回半正確的值作爲源目錄中包含的值:

"c:/Users/Sean/Downloads/emacs-23.3/". 

據擴展文件名功能描述:

(擴大 - 文件 - 名稱name &可選默認目錄)

轉換的文件名NAME絕對和規範化它。 第二ARG DEFAULT-目錄是目錄開始與如果名稱是相 (不與斜線或波浪線啓動);如果DEFAULT-DIRECTORY爲零或缺失,則使用 當前緩衝區的'default-directory'值。

Windows上的路徑永遠不會從斜線或波浪線開始。

現在我的問題:1。 不擴大文件名稱在Windows功能的行爲是否正確? 2.爲什麼source-directory包含開發者路徑的值?

我們可以考慮擴展文件名稱作爲在Windows上的越野車嗎?或者它只是在autoload.el中被錯誤地使用?

預先感謝您。

+0

第一個路徑應該以'c:'開頭嗎? – phils

+0

@phils 嗨,不,它並不以C開始:但一切工作相當不錯: 'C:\家\ ngulyamov>設爲首頁 HOME = C:\家\ ngulyamov C:\家\ ngulyamov> env | grep的HOME HOME = /家庭/ ngulyamov C:\家\ ngulyamov> LS /家庭/ ngulyamov ...文件列表....' –

+0

這顯然是某種Windows外殼程序的我從來沒有見過的,如果它使用正斜槓,並接受'ls'作爲命令。 (是Windows 7嗎?) – phils

回答

2

最後我找出原因。這個問題來自使用make 3.8的$(abspath)功能的cedet的Makefile。在這種情況下,make的cygwin版本返回UNIX路徑的路徑,即/ home/ngulyamov/...,然後由d:/ home/ngulyamov/...在自動載入中通過源目錄root進行替換。make的GnuWin32版本工作正常但奇怪的原因,我有以下問題:

C:\home\ngulyamov\.emacs.d\el-get\cedet>\gnuwin32\bin\make all 
Removing loaddefs.el files from subprojects. 
Generating autoloads. 
make[1]: Entering directory `C:/home/ngulyamov/.emacs.d/el-get/cedet/lisp/cedet' 
    > autoloads 
Wrote C:/home/ngulyamov/.emacs.d/el-get/cedet/lisp/cedet/loaddefs.el 
Loading vc-bzr... 
Generating autoloads for C:/home/ngulyamov/.emacs.d/el-get/cedet/lisp/cedet/cedet-android.el... 
Memory exhausted--use C-x s then exit and restart Emacs 
make[1]: *** [autoloads] Error 127 

這麼髒修補程序指定的源目錄中autoload.el本身喜歡:

(setq-default source-directory "C:/home/ngulyamov/.emacs.d/") 

不管怎樣,爲什麼源目錄指向開發人員的計算機路徑保持打開。