2012-05-10 5 views
5

el-getを使用して最後のcedetをインストールしているときに、Windows上でexpand-file-name関数の奇妙な動作が発生しました。この問題は、自動ロードの生成に関連しています。最後のemacs上WindowsでのEmacs elispの展開ファイル名の動作

autoload.el 24.1.50には、以下の機能が含まれています。私の場合、生成・自動ロード・ファイルで

(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に:.ソースディレクトリに値が含まれているように、この関数23.3 emacsの上で同時に 半正しい値を返す:

(展開-ファイル - :

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

機能記述ファイル名を展開するためによれ名前NAME &オプションDEFAULT-DIRECTORY)

ファイル名NAMEを絶対値に変換し、正規化します。 2番目のarg DEFAULT-DIRECTORYは、NAMEが相対名の場合に開始するディレクトリです。 (スラッシュまたはチルダで始まらない); DEFAULT-DIRECTORYがnilまたはmissingの場合、 現在のバッファの `default-directory 'の値が使用されます。

Windows上のパスは、決してスラッシュまたはティルダで始まりません。

私の質問: 1. expand-file-name関数の動作はWindowsで正しく行われますか? 2.なぜsource-directoryに開発者パスの値が含まれていますか?

Windows上でファイル名を展開することを検討することはできますか?または、autoload.elで間違って使用されていますか?

ありがとうございます。

+0

最初のパスは 'c:'で始まるはずですか? – phils

+0

@phils こんにちは、いや、それはCで起動しません。しかし、すべてがかなり良い作品: 'C:ホーム\ \ ngulyamov> HOME設定 HOME = C:ホーム\のngulyamov \ C:ホーム\ \ ngulyamov> env | grep HOME HOME =/home/ngulyamov C:\ home \ ngulyamov> ls/home/ngulyamov ...ファイルリスト.... ' –

+0

これは明らかに以前見たことのない種類のWindowsシェルですが、スラッシュを使用する場合は 'ls'をコマンドとして受け取ります。 (Windows 7ですか?) – phils

答えて

2

最後に私は理由を考え出しました。この問題はmake 3.8の$(abspath)機能を使用するcedetのMakefileから発生しています。この場合のcygwin版makeは、パスのUNIXの方法、つまり/ home/ngulyamov/...を返し、autoloadのsource-directory rootをd:/ home/ngulyamov/...に置き換えます。GnuWin32バージョンのmakeソースディレクトリが指している理由、とにかく

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

:だから汚い修正は以下のようにautoload.el自身でソース・ディレクトリを指定された

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 

:私は次の問題を持っている奇妙な理由により正常に動作しますが、開発者のコ​​ンピュータパスは開いたままです。