[Mew-dist 1573] expand-file-name & Emacs
himi at example.com
himi at example.com
1997年 8月 21日 (木) 12:47:23 JST
こういう話は、Mewだけで閉じないのですから、
できればgnu.emacs.*やmuleMLやmule-win32ML
にも流してくださるとうれしいです。
で、話を頭に戻します。
(expand-file-name "~") & (expand-file-name "~" "/")
は、現状で問題があります。
M-x describe-functionで書かれているとおり、
HOMEの正規化ディレクトリを得るには、
(expand-file-name "~/")でなくてはいけません。
"~/"をHOMEと思ったほうがよいでしょう。
その証拠として、
expand-file-nameのプラットフォーム共通部分のコードが走るのなら、
(progn
(setenv "HOME" "/")
(expand-file-name "~"))
を評価すると、""が返ってきます。
(progn
(setenv "HOME" "/")
(expand-file-name "~" "/"))
でも同じことです。
(なぜかというと、default-directoryはnameがrelative path
の時だけに使用されるからです。
でも、まあ、UNIXの人が"HOME"を"/"にするってあんまりないでしょうね。^^;;;)
これはなぜかというと、~を展開するときはFexpand-file-nameの中で、
わざわざ最後のdirectory separatorを抜いているためです。
この仕様はまずそうなので、時間があるときにEmacs開発者で相談したほうが
よさそうです。
さらに、separatorをMewが独自に管理するのは
私はできるだけ止めたほうがよいと思います。
なぜなら、EmacsのAPIのレイヤで、Directory Sepは管理できると思うからです。
(file-name-as-directoryとか、directory-file-nameとかたくさんありますから)
そして、Emacs Lisp APIがfile nameのSemanticsに関わってくるときには、
"/"をseparatorとしてみなすことは保証されていると思います。
(ファイルのアクセスその他において)
その結果として、expand-file-nameが"~/"という表記を仕様に入れて
しまったんでしょう。
そのように、私は解釈しています。
# しかし、まあ、これも将来にわたってどうなるのやら
もっともできることなら、
Emacs Lisp のAPIのレイヤがseparatorは意識すればいいだけで、
アプリケーションがそこに関わってくることは、あまりよろしくないように
思われるのですが、いかがなものでしょうか。
ざあっと、mew-path-separatorの使い方をgrepで見てみましたけど、
できるだけなくしたほうがよくないですか?
(concat ほにゃ mew-path-separator)は
(file-name-as-directory ほにゃ)にしたほうがいいと思いますし
# こうすると、syntax & semantics両方に依存しなくてすみます。
# このファイル名もconcatでつながずにexpand-file-nameでつなぐべきです。
もっとも、バッファの中身からファイル名を
取り出すようなこともやっているようなので、
どうしても依存部が出てきてしまいそうですね。
でも、そのような部分はすべて、Emacsの出力する
正規化された名前にしたほうが、(Separatorは'/')
すっきりしていいと私は考えます。
ただ、将来にわたってそれが保証されるかはわからないので、
mew-path-separatorを使うべきでないとまで私はいえません。
From himi
Mew-dist メーリングリストの案内