« テレビ番組等感想 その 252 | トップページ | テレビ番組等感想 その 253 »

2010年1月 6日 (水)

Yash 2 その 159: 補完処理の設計指針

例えば zsh で、ls $HOME/ と入力したところで補完操作をすると、ホームディレクトリにあるファイルの名前が候補として表示される。つまり zsh は、補完が要求された時点で HOME 変数を展開して、補完の対象となるディレクトリの情報を得ているわけだ。

補完時に変数を展開するのは別に難しくない。$HOME/ に含まれる変数を展開すると例えば /home/magicant/ のようなパスが得られる。このディレクトリに含まれるファイルの名前を補完したければ、末尾に * を付加した /home/magicant/* をパタンとしてファイル名展開をかけるとファイル名の一覧が補完候補として得られる (補完したいのはパス名全体ではなくスラッシュの後のファイル名なので、ファイル名展開で得られたパス名のうち最後のファイル名の部分だけを補完候補として取り出す)。後は、選んだ候補を $HOME/ の後に付け加えれば補完は完了する。

しかし、補完したいファイル名が途中まで入力してあって、それにワイルドカードが入っている場合は、厄介な問題が発生する。

例えば sample.txt というファイルが存在していて、dot という変数の値に . が設定してあるとする。コマンドラインに ls s*mple${dot}t とまで入力したところで、ファイル名の残りの部分 (xt) を補完させたい。このとき、変数 dot を展開して s*mple.t を得、* を付加した s*mple.t* をパタンとしたファイル名展開を行うところまでは問題なくできるが、得られた補完候補 sample.txt をそのままコマンドラインに挿入すると ls s*mple${dot}tsample.txt となってしまう。補完したいのは最後の xt だけなのだが、かといって補完候補の文字列から余分なものを容易に取り除くすべがない。

仕方がないので、yash では元元入力してあったファイル名を消して全部補完候補で置き換えてしまうことにしようと思う。コマンドラインに ls s*mple${dot}t とまで入力したところで補完操作をすると、コマンドラインは ls sample.txt となる。ワイルドカードや変数は跡形もなく消える。

|

« テレビ番組等感想 その 252 | トップページ | テレビ番組等感想 その 253 »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック


この記事へのトラックバック一覧です: Yash 2 その 159: 補完処理の設計指針:

» Yash 2 その 160: 補完処理の設計指針 その 2 [まじかんと雑記]
前の記事の続き。補完対象文字列にブレース展開が入っている場合。 [続きを読む]

受信: 2010年1月 9日 (土) 17時53分

« テレビ番組等感想 その 252 | トップページ | テレビ番組等感想 その 253 »