el-get を使用した最後の cedet のインストール中に、windows で expand-file-name 関数の奇妙な動作に遭遇しました。この問題は、オートロードの生成に関連しています。
最後の emacs 24.1.50 の autoload.el には、次の関数が含まれています。
(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))))
私の場合、 generated-autoload-file は次のとおりです。
"/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 では、source-directory に値が含まれているため、この関数は半正確な値を返します。
"c:/Users/Sean/Downloads/emacs-23.3/".
expand-file-name 関数の説明によると:
(expand-file-name NAME &optional DEFAULT-DIRECTORY)
ファイル名 NAME を絶対形式に変換し、正規化します。2 番目の引数 DEFAULT-DIRECTORY は、NAME が相対パス (スラッシュまたはチルダで始まらない)の場合に開始するディレクトリです。DEFAULT-DIRECTORY が nil または見つからない場合、現在のバッファの値 `default-directory' が使用されます。
Windows のパスは、スラッシュまたはチルダから始まることはありません。
ここで私の質問: 1. expand-file-name 関数の動作は Windows で正しいですか? 2. source-directory に開発者パスの値が含まれているのはなぜですか?
Windows で expand-file-name をバグと見なすことはできますか? それとも、autoload.el で間違って使用されているのでしょうか?
前もって感謝します。