Próbuję utworzyć skrypt autouzupełniania do użytku z rybami; Przekazuję skrypt zakończenia basha dla tego samego programu.Tworzenie skryptu autouzupełniania z komendami podrzędnymi
Program posiada trzy polecenia najwyższym poziomie, powiedzieć foo
, bar
i baz
i każdy ma kilka podpoleceń, po prostu powiedzieć a
b
i c
dla każdego.
Co ja widzę to, że górny poziom poleceń auto kompletne OK, więc jeśli wpisuję f
Dostaję foo
autouzupełniania, ale wtedy, gdy uderzę kartę ponownie, aby zobaczyć, co to jest sub polecenia są, widzę foo
, bar
, baz
, a
, b
, c
i powinno być po prostu a
, b
, c
używam jako odsyłającym git completion script ponieważ wydaje się działać dobrze. Używam również git flow script jako odniesienia.
myślę ten jest obsługiwany w skrypcie zakończenia git przez:
function __fish_git_needs_command
set cmd (commandline -opc)
if [ (count $cmd) -eq 1 -a $cmd[1] = 'git' ]
return 0
end
return 1
end
Który ma sens, można użyć tylko na zakończenie, jeśli istnieje jeden arg do polecenia, sam skrypt; jeśli użyjesz tego jako warunku (-n
) do wykonania połączenia na komendach najwyższego poziomu, myślę, że tak by się stało.
Jednak to, co widzę, nie jest prawdą. Skopiowałem tę funkcję do mojego skryptu, odpowiednio zmieniłem "git" i nie miałem szczęścia.
Wycięty dół scenariusz jest następujący:
function __fish_prog_using_command
set cmd (commandline -opc)
set subcommands $argv
if [ (count $cmd) = (math (count $subcommands) + 1) ]
for i in (seq (count $subcommands))
if not test $subcommands[$i] = $cmd[(math $i + 1)]
return 1
end
end
return 0
end
return 1
end
function __fish_git_needs_command
set cmd (commandline -opc)
set startsWith (echo "$cmd[1]" | grep -E 'prog$')
# there's got to be a better way to do this regex, fish newb alert
if [ (count $cmd) = 1 ]
# wtf, this is always false? it this the problem?
if [ $cmd[1] -eq $cmd[1] ]
return 1
end
end
return 0
end
complete --no-files -c prog -a bar -n "__fish_git_needs_command"
complete --no-files -c prog -a foo -n "__fish_git_needs_command"
complete --no-files -c prog -a a -n "__fish_prog_using_command foo"
complete --no-files -c prog -a b -n "__fish_prog_using_command foo"
complete --no-files -c prog -a c -n "__fish_prog_using_command foo"
complete --no-files -c prog -a baz -n "__fish_git_needs_command"
Wszelkie sugestie, w jaki sposób dokonać tej pracy jest bardzo cenione.
Tak, to działało, dziękuję. – Michael
Dzięki za wspaniały przykład @terje i @Michael! Zamiast listy 'complete -f -c prog -n '__fish_prog_using_command foo' -aa,' complete -f -c prog -n '__fish_prog_using_command foo' -ab' i 'complete -f -c prog -n '__fish_prog_using_command foo "-ac" w osobnych liniach, myślę, że można oddzielić wszystkie trzy uzupełnienia spacją: 'complete -f -c prog -n '__fish_prog_using_command foo' -a" abc "' – yegeniy