Primeiro, deixe-me esclarecer alguns equívocos em sua pergunta.
- Em geral, as configurações de conclusão são distribuídas com o seu shell, não com programas individuais. Embora programas individuais possam vir acompanhados de configurações de conclusão, da mesma forma que são empacotados com lançadores de área de trabalho e entradas de menu (pelo menos nas principais distribuições de desktop), na prática, os programadores não escrevem configurações de conclusão, desenvolvedores de shell fazer.
- A conclusão é geralmente ajustada para concluir tudo o que pode ser útil, não apenas os casos mais comuns. Por exemplo, o Inkscape pode abrir arquivos JPEG, mesmo que geralmente não seja o melhor programa para isso, portanto,
*.jpg
arquivos são incluídos nas conclusões deinkscape
. Além disso, por padrão, a conclusão inclui todos os arquivos.
Para o bash, as configurações de conclusão são distribuídas no pacote separado bash-completion . A partir da versão 2.1, não há configurações para gimp
, portanto, a conclusão de argumentos para gimp
oferece todos os arquivos. Para inkspace
, a função de conclusão está ciente de algumas opções e conclui um grande conjunto de extensões de arquivo de imagem.
Você pode exibir ou modificar as configurações de conclusão no bash com o complete
builtin. Por exemplo:
$ 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
Se você não gosta da função _inkscape
, escreva o seu. Para gimp
, o bash não conhece a conclusão; Uma vez que você tentou a conclusão pelo menos uma vez, ele registra _minimal
como a função de conclusão. Defina sua própria função (convencionalmente chamada _gimp
, mas isso não é uma obrigação) se você quiser algo diferente.
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)'
}
O Zsh oferece mecanismos mais sofisticados , como completar um conjunto restrito, mas recorrer a um conjunto mais amplo, se não houver correspondências.