[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[FDclone-users:00021] Re: file name completion problems



At Mon, 29 Jul 2002 15:54:13 +0900,
Takashi SHIRAI wrote:
> In Message-Id <86r8hpujzi.wl@archon.local.idaemons.org>
>         "Akinori MUSHA" <knu@iDaemons.org>さんwrites:
> >  ファイル名補完に関わる問題を二つ見つけたので報告します。
> 
>  「問題」と呼べるほどのものでも無いと思いますが。確かにより
> 使い易くはなるでしょうけど、bug だとは思いませんし。

 私にとっての問題をしらいさんが bug と見て修正するか、改善への
ヒントとするか、誤用として正しい使い方を示すか、仕様として文書に
明文化するか等は、やりとりの中でしらいさんが判断される事柄です。

> > $ cp a\ [tab]
> > $ cp a\ a
> > 
> > →次のようになってほしい。
> > 
> > $ cp a\ b 
> 
>  「"a 」と入力した時点で補完すると「"a b"」となると思います。
> 空文字は IFS (Input Field Separator) なので普通に処理しよう
> とすると TAB 押下時点でのカーソル位置を filename の先頭と見
> なして補完してしまうんでしょう。
>  この操作例で補完結果が「a\ a」になっているのは、directory
> 内に含まれる全 filename が「a」から始まっているために、その
> 共通部分「a」を補完した結果ですね。「ab」が存在しなければ、
> 多分「a\ "a b"」と補完された筈です。

 そうですね、それは分かっていました。手元の tcsh, bash, zsh
では補完できるので、 FDclone でもできるといいと思いました。

>  FDclone の仕様では、meta characher を含む filename を補完
> する際には「\」で prefix するのではなく「"」で括るようになっ
> ていますので、ここでは補完結果が「"a b"」になるように改めた
> いと思います。入力部分の「\」は補完の結果削除されます。
>  以下補完例を幾つか示します。
> 	「a\ 」->「"a b" 」
> 	「\a\ 」->「"a b" 」
> 	「a 」->「a a」(「a b」と「ab」の共通部分)
> 	「"a\ 」->失敗
> 	「'a\ 」->失敗
> 
>  主には bash の挙動に合わせたつもりですが、後ろ二つは bash
> では何故かそれぞれ「"a b"」「'a b'」に補完されてしまいますね。
> これは bash の側の問題点だと思います。
>  「"」や「'」で括られた中の「\」はそのまま「\」の意味で評価
> されるというのは FDclone にも bash にも共通した仕様です。
>  もし仮に「a\ a」という filename があったとすると、「"a\ 」
> や「'a\ 」は「"a\ a"」や「'a\ a'」に補完されるべきではないで
> しょうか。
>  bash ではそうなっていませんが、FDclone ではそういう仕様に
> しました。

 ずいぶん古い bash をお使いのようですね。bash 1.x でしょうか。
今では 2.x を reference とした方がいいような気もします。だいぶ
太っているので機能的な追随までは望みませんが。

 bash を標準シェルとして採用している Linux distribution では、
手元で確認できる分だと Red Hat Linux 7.x, TurboLinux 7, Debian
GNU/Linux 2.2 (potato) / 3.0 (woody) などで /bin/{sh,bash} は
bash 2.x でした。

 上の例を bash 2.03, 2.04, 2.05a, 2.05b で実行すると

	「a\ 」->「a\ b 」
	「\a\ 」->「a\ b 」
	「a 」->「a a」
	「"a\ 」->「"a b" 」
	「'a\ 」->「'a b' 」

となります。ちなみに zsh や tcsh では最後の二つは補完されません
でした。内部で \ の展開(除去)を行っていないのでしょう。

> > $ vi ~/tmp/a\ b 
> > $ vi ~/tmp/"a b" 
> > $ vi "/home/knu/tmp/a b" 
> 
>  bash に合わせて三番目の仕様にしてみました。補完される対象
> の filename が meta character を含み「"」で括ってやる必要が
> ある時のみ、「~」を展開します。

 これで望みの結果が得られます。

>  上記の修正を施した patch を添付しますが、bug では無いとい
> う判断で、時期 release 時に自然切替えという扱いで宜しいでし
> ょうか?
>  bug fix 扱いであれば、各 distributor の方には patch を含め
> た形で配布 package を作り直して貰うよう要請するところですが、
> 今回はその必要はないと判断します。

 いいと思います。

-- 
                     /
                    /__  __            Akinori.org / MUSHA.org
                   / )  )  ) )  /     FreeBSD.org / Ruby-lang.org
Akinori MUSHA aka / (_ /  ( (__(  @ iDaemons.org / and.or.jp

"When I leave I don't know what I'm hoping to find
              When I leave I don't know what I'm leaving behind.."