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ę.


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.


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




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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.