Uzupełnianie niestandardowej zakładki bash

34

Mam niestandardowe narzędzie konsoli cooltoolz listą opcji

fooOption
barOption

Co powinienem zrobić, aby móc automatycznie uzupełnić opcje bash, naciskając tabklawisz?

Mam na myśli wpisany przez użytkownika

$ ./cooltool foo_

następnie wciśnięty tab. I wtedy

$ ./cooltool fooOption _

pojawiło się.

Wuffers
źródło
1
Nie przechodź przez pocztę.
Wuffers
2
Zauważ, że ten jest migrowany, a drugi nie. Myślę, że wielu użytkowników wciąż nie zdaje sobie sprawy, że nie powinni zadawać pytań na wielu stronach SE. Służą do rozróżniania forów, które nie są ujednoliconym systemem, gdzie możesz poprosić na kilku różnych forach o większą szansę na szybką odpowiedź.
jcrawfordor

Odpowiedzi:

2

Napisz skrypt zakończenia bash dla cooltool. Pakiet bash-complete zawiera skrypty dla wielu popularnych programów, których możesz użyć jako przykładów.

grawitacja
źródło
40

Najprostszym sposobem jest dodanie następujących elementów do pliku .bashrc.

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

Za każdym razem, gdy piszesz cooltool f[TAB][TAB], _cooltool()funkcja jest wywoływana. Sprawdza, jakie jest twoje obecne słowo częściowe, a następnie określa compgen, które opcje pasują. Są one przechowywane w tablicy o nazwie, COMPREPLYktóra jest następnie wyświetlana. Patrzeć man completei man compgenszczegóły.

Aby uzyskać fajny samouczek, sprawdź: Pisanie własnej funkcji uzupełniania bash

dogbane
źródło
7

Możesz przyjrzeć się bliżej swojemu katalogowi /etc/bash_completion.d w systemie.

Powinieneś także przeczytać to wprowadzenie . Druga część wprowadzenia jest jeden trzeba.

AlexTheBird
źródło
1
Korzystam z systemu Mac OS X 10.6, więc nie ma katalogu
Ach, dobrze wiedzieć.
2

Oprócz odpowiedzi dogbane możesz także:

complete -W "fooOption barOption" cooltool

jeśli po prostu chcesz dopasować listę słów od początku łańcucha. Wygląda na to, że pełna i kompgenowa udostępnia większość opcji. Zauważyłem tylko dopasowanie „początku łańcucha” w poleceniach, których używam, więc uważam, że fajnie jest robić inne rzeczy w funkcji _cooltool, takie jak:

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

dopasować w dowolnym miejscu w nazwie opcji.

dcc310
źródło