Conclusão personalizada da guia bash

34

Eu tenho meu utilitário de console personalizado cooltoolcom lista de opções

fooOption
barOption

O que devo fazer para que o bash complete automaticamente as opções pressionando a tabtecla?

Quero dizer, o usuário digitou

$ ./cooltool foo_

depois pressionado tab. E depois

$ ./cooltool fooOption _

apareceu.

Wuffers
fonte
11
Não cruze a postagem.
Wuffers 27/05
2
Observe que este é migrado e o outro não. Acho que muitos usuários ainda não percebem que não deveriam postar uma pergunta em vários sites SE. Eles são usados ​​para fóruns díspares que não são um sistema unificado, onde você pode pedir em alguns fóruns diferentes uma melhor chance de uma resposta rápida.
Jcrawfordor

Respostas:

2

Escreva um script de conclusão do bash para cooltool. O pacote bash-complete vem com scripts para muitos programas populares, que você pode usar como exemplos.

gravidade
fonte
40

A maneira mais simples é adicionar o seguinte ao seu .bashrc.

_cooltool()
{
    local cur=${COMP_WORDS[COMP_CWORD]}
    COMPREPLY=( $(compgen -W "fooOption barOption" -- $cur) )
}
complete -F _cooltool cooltool

Sempre que você digita cooltool f[TAB][TAB], a _cooltool()função é chamada. Ele descobrirá qual é a sua palavra parcial atual e, em seguida compgen, descobrirá quais opções correspondem. Eles são armazenados em uma matriz chamada, COMPREPLYque é exibida. Veja man completee man compgenpara detalhes.

Para um bom tutorial, confira: Escrevendo sua própria função de conclusão de bash

dogbane
fonte
7

Você pode dar uma olhada mais de perto no diretório /etc/bash_completion.d do seu sistema.

Você também deve ler esta introdução . A segunda parte da introdução é a que você precisa.

AlexTheBird
fonte
11
Estou usando o Mac OS X 10.6, portanto, não há diretório
Ah Ok, bom saber.
2

Além da resposta da dogbane, você também pode:

complete -W "fooOption barOption" cooltool

se você simplesmente deseja combinar uma lista de palavras desde o início da string. Parece que complete e compgen compartilham a maioria das opções. Eu só notei a correspondência "início da string" nos comandos que uso, então achei interessante que você pudesse fazer outras coisas na função _cooltool como:

COMPREPLY=( $(grep "$cur" ~/my_potential_args.txt) )

para corresponder a qualquer lugar no nome da opção.

dcc310
fonte