プログラムをパッケージ化している人は、自分が作成したbashオートコンプリート設定でわかるように、自分のプログラムを使用して開くファイルの種類について広すぎる見方をしているようです。たとえば、a.svgファイルとa.jpgファイルがある場合がよくあります。ここで、a.jpgはビットマップとしてレンダリングされたa.svgです。 svgファイルを編集するにはinkscapeを使用し、jpgファイルを編集するにはgimpを使用します。しかし、「inkscape a」または「gimp a」と入力してオートコンプリートタブをクリックすると、これらの各プログラムは、a.svgまたはaを編集したいと想像しながら、過度に情熱的な子犬のように動作します。私は明確にする必要があります。
もっと愚かな例(バグのように見える)は、gimpがa.odt(libre Officeファイル)を開くことを示唆していますが、実際にそうしようとするとエラーが発生することです。
これらのプログラムのオートコンプリート設定を減らして不便を最小限に抑えるカスタム設定を設定するにはどうすればよいですか。
答え1
まず、あなたの質問に関するいくつかの誤解を解決します。
- 通常、完了設定は個々のプログラムではなくシェルを介して配布されます。個々のプログラムは、デスクトップランチャーとメニュー項目と共にバンドルされているように(少なくとも主要なデスクトップディストリビューションでは)完成設定と一緒にバンドルできますが、アプリケーションプログラマーは実際に完成設定を作成しませんが、シェル開発者は作成します。
- 完了は通常、最も一般的なケースだけでなく、役に立つすべてを完了するように調整されます。たとえば、Inkscapeは通常使用するのに最適なプログラムではありませんが、JPEGファイルを開くことができるため、
*.jpg
そのファイルは完成ファイルに含まれていますinkscape
。また、完了にはデフォルトですべてのファイルが含まれます。
Bashの場合、完了設定は別々に配布されます。バッシュ完了パック。バージョン2.1以降は設定がないため、gimp
パラメータのみを入力するとgimp
すべてのファイルが提供されます。の場合、inkspace
補完機能はいくつかのオプションを知っており、大規模なイメージファイル拡張子のセットを完成させます。
次のコマンドを使用して、Bashで完了設定を表示または変更できます。complete
内蔵。たとえば、
$ complete -p inkscape
complete -F _inkscape inkscape
$ type _inkscape
_inkscape is a function
_inkscape ()
{
local cur;
COMPREPLY=();
cur=${COMP_WORDS[COMP_CWORD]};
if [[ "$cur" == -* ]]; then
COMPREPLY=($( compgen -W '-? --help --usage -V --version \
-z --without-gui -g --with-gui -f --file= -p --print= \
-e --export-png= -d --export-dpi= -a --export-area= \
-w --export-width= -h --export-height= -i --export-id= \
-j --export-id-only -t --export-use-hints -b --export-background= \
-y --export-background-opacity= -l --export-plain-svg= -s --slideshow' -- $cur ));
else
_filedir '@(ai|ani|bmp|cur|dia|eps|gif|ggr|ico|jpe|jpeg|jpg|pbm|pcx|pdf|pgm|png|ppm|pnm|ps|ras|sk|svg|svgz|targa|tga|tif|tiff|txt|wbmp|wmf|xbm|xpm)';
fi
}
$ complete -p gimp
complete -F _minimal gimp
この機能が気に入らない場合は、_inkscape
自分で書いてください。の場合、bashは完了について知りません。 1回以上完了しようとすると、完了機能として記録gimp
されます。_minimal
他に何かをしたい場合は、独自の関数を定義してください(通常と呼ばれますが、必須では_gimp
ありません)。
complete -F _gimp gimp
_gimp () {
_filedir '@(ai|ani|bmp|cur|gif|ggr|ico|jpe|jpeg|jpg|pbm|pcx|pgm|png|ppm|pnm|ras|sk|targa|tga|tif|tiff|wbmp|wmf|xbm|xpm)'
}
Zshはより複雑なメカニズムを提供しますたとえば、限られたセットを完了したが競争がなければ、より広いセットに戻ることです。