[Mew-dist 1589] Re: expand-file-name & Emacs
Miyashita Hisashi
himi at example.com
1997年 8月 22日 (金) 16:10:39 JST
Kazu Yamamoto (=?iso-2022-jp?B?GyRCOzNLXE9CSScbKEI=?=) <Kazu at example.com> writes:
> > (expand-file-name "~/")でなくてはいけません。
>
> Mew では
> (defconst mew-home (file-name-as-directory "~"))
> を定義して、mew-home を使うようにしました。
これがよいのかどうか私もよく分かりません。
でも、これなら、
(defconst mew-home (expand-file-name (getenv "HOME")))
と、私だったらします。
# expand-file-nameは正規化のためです。
>
> > さらに、separatorをMewが独自に管理するのは
> > 私はできるだけ止めたほうがよいと思います。
> >
> > なぜなら、EmacsのAPIのレイヤで、Directory Sepは管理できると思うからです。
> > (file-name-as-directoryとか、directory-file-nameとかたくさんありますから)
>
> また、mew-path-separator をできるだけ取り除いて、上記の関数を使うように
> しました。ただ、完全には取り除けてないので、新しくリリースしたときに、取
> り除くアイディアが浮かべば、また教えて下さい。
そうですね。難しいところです。
# Mewがどんなことをやっているの私にはわかりませんので ^^;;;
# すみません。
ただ、Bufferからpathnameを拾い上げるのは...
1...Bufferに書き込む前に、(expand-file-name)で正規化する。
2...pathnameの部分がきちんと分離できるような記述にする。
つまり、#PATH#[pathname]\nのように書き込んでおいて
(string-match "^#PATH#\\[\\([^\\]]*\\)\\]$" ....)
照合する(照合の仕方をpathnameのnotationに依存しないようにする)
というやり方でできるかもしれません。
------------------------------------------
ちょっとだけ余談を書きます。
むかしのLispマシンのころから、こういうSystem Levelのところは
Applicationが依存しないようにAPIを用意していたみたいですね。
SYMBOLICSのマニュアルをちょっと見てみると...
なかなかPATHNAMEの記述の量の多さにあきれます。
ちょっと、MS-DOSとVMSの記述を見てみると...
MS-DOS
HOST:DEVICE:\DIRECTORY1\DIRECTORY2\NAME.TYPE
VMS
[DIRECTORY1.DIRECTORY2.COMPONENT]NAME.TYP;VERSION
こういうのを見ていると、separetorをいくらApplicationが管理していても
どうしようもないことがお分かりだと思います。
このようなnotationに依存しないようにpathnameを操作するための関数は
10や20ではきかないぐらいの量があるようです。
で、それらの関数がどのようにApplicationにpathを操作させるかというと...
Logical path Translationなる手法で、System independentな
Data構造をアプリケーションが持つようにしているようです。
Emacsのpathnameを操作する関数は、これに比べると貧弱におもえますが、
一応そういう血筋は受け継いでいるようですね。
と、いうわけで、EmacsでもApplicationはできるだけpathnameのnotation
に依存しないようにしたほうがいいとは私は思っています。
From himi
Mew-dist メーリングリストの案内