[Message Prev][Message Next][Thread Prev][Thread Next][Message Index][Thread Index]

Re: latest version problem?



藤井です。

From: Hideyuki SHIRAI (白井秀行) <shirai@xxxxxxxxxxx>
Subject: Re: latest version problem?
Date: Fri, 20 Feb 2004 01:14:09 +0900 (JST)
Message-ID: <20040220.011409.74363267.shirai@xxxxxxxxxxxxxxx>
> > > (expand-file-name "../index.html" "c:/foo/bar/")
> > > => "c:/foo/index.html"
> > > 
> > > でしょうか?
> > 
> > はい、そうです。
> 
> ついでにもうちょっと教えてください。(_ _)
> 
> この *壊れた* ような挙動(偏見度 120%)って、

cygwin-mount が expand-file-name の振舞いを変えるというのはびっくりし
ました。このスレッドのやりとりを見るまで知りませんでしたし。

> expand-file-name FILENAME &optional DIRECTORY
> 
> の DIRECTORY が "/" ではじまるときだけ発動される、ということでよ
> いのでしょうか?

"/" に限らず、基本的に Cygwin のマウントテーブルに登録されているディレ
クトリで始まっていれば発動されます。DIRECTORY が省略されている時に 
FILENAME が "/" などで始まっている場合も同様です。

逆に / にマウントされたディレクトリがなければ、"/" で始まっていても発
動しません。
# そんな Cygwin 環境はすくなそうですが

> 
> (expand-file-name "/foo/bar/baz.txt") => "c:/foo/bar/baz.txt"
> (expand-file-name "baz.txt" "\\foo\\bar\\") => "c:/foo/bar/baz.txt"
> (expand-file-name "bar/baz.txt" "foo") => "c:/home/shirai/foo/bar/baz.txt"
> (expand-file-name "bar/baz.txt" "../foo") => "c:/home/foo/bar/baz.txt"

私の環境では以下のようになります。

(expand-file-name "/foo/bar/baz.txt") => "d:/cygwin/foo/bar/baz.txt"
(expand-file-name "baz.txt" "\\foo\\bar\\") => "d:/foo/bar/baz.txt"
(expand-file-name "bar/baz.txt" "foo") => "d:/home/fujii/foo/bar/baz.txt"
(expand-file-name "bar/baz.txt" "../foo") => "d:/home/foo/bar/baz.txt"

> > 一応こんなのも可能ですが、やりたくなさ加減は改善されてないですね。(^^;;;
> > 
> > (let ((inhibit-file-name-handlers '(cygwin-mount-name-hook-function
> > 				    cygwin-mount-map-drive-hook-function))
> >       (inhibit-file-name-operation 'expand-file-name))
> 
> ありがとうございます。
> 
> # やっぱり、藤井さんは *その筋* の人だよ :-)

認定されてしまいました (^_^)ゞ

> これだと cygwin-mount-name-hook-function とか、
> cygwin-mount-map-drive-hook-function とかの名前が変わるのが怖
> いですねぇ。"c:/" を頭につけるのだと、ミス/もれが怖いし。

file-name-handler-alist からそれっぽいものを抽出すれば名前の変更にも強
くなるでしょうけど、やり過ぎかもしれませんね。

cygwin-mount-deactivate 〜 cygwin-mount-activate で一時的に無効にする
方法も考えられますが、名前は変わらなさそうなものの、プロセス起動(mount 
コマンド実行)が発生しうるので処理が重いです。

> どっちにしろ、w3m.el の w3m-expand-path-name() という関数を変え
> ればよいだけだと思うなので、"c:/" するか、inhibit-file-name-* を
> 束縛するかは、考えときます。let の方が簡単だな。

--
藤井 正行 / Masayuki FUJII ( boochang@xxxxxxxxxxxx )