[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 メーリングリストの案内