Как добавить табуляцию в команду с двумя аргументами (и табуляция завершить оба)? - PullRequest
0 голосов
/ 30 января 2019

Давайте иметь команду command.Эта команда имеет параметр -o, который принимает 2 аргумента.Я хотел бы добавить завершение табуляции для обоих аргументов.

Я пробовал

complete -c command -x -s o -a "complete first arg"

Я, но не могу добавить завершение табуляции ко второму аргументу.


Я хотел бы автозаполнить command, если не указан параметр.это прекрасно работает:

complete -c command -a "no option completion"

, но когда я нажимаю клавишу табуляции после первого аргумента в опции -o, отображаются эти ^ завершения.

вот так:

command -o "fist" <tab>
no
option
completion

если я не могу добавить завершение для второго аргумента, я бы хотел хотя бы удалить эти дополнения.

1 Ответ

0 голосов
/ 30 января 2019

Эта команда имеет параметр -o, который принимает 2 аргумента.

Это довольно необычно.Вы уверены в этом?

Как правило, у вас есть либо параметры, которые принимают один аргумент, либо параметры, которые действуют как "флаги" и изменяют все остальные аргументы.Таким образом, вы просто проверите их наличие.

"- o" "-old-style" опции также не так распространены, как "--gnu-style" длинные опции или "-s", поэтомуЯ предлагаю двойную проверку.

complete -c команда -a "завершение без опции"

Это означает предложение "нет", "опция" и "завершение"если команда «команда».

Условие не указано, поэтому предлагаются всегда .

То, что вы хотите, - это использовать условие --condition(или "-n") опция для complete.Это берет скрипт (как строку), который выполняется.Если он возвращает 0 (т. Е. Истина), предлагается соответствующее завершение (остаток этого complete вызова - опция и аргументы).

Что-то вроде

# The first condition is just to see that `commandline -opc`, 
# which tokenizes (-o) all tokens of the current process (-p) 
# up to (but not including) the cursor (-c)
# returns just one token - which must be the command.
#
# Alternatively this condition could also be 
# the inverse of the other conditions
# (offer this if nothing else would be)
complete -c command -n 'test (count (commandline -opc)) -lt 2' -a 'stuff for no argument'

# The first argument to the option we handle via "-a" to the option
complete -c command -o the-option -a 'the first argument'

# The second argument needs to be offered
# if the second-to-last token is the option.
#
# This is incomplete, because theoretically a token that
# _looks_ like the option could be offered as an argument to _another_ option.
complete -c command -n 'set -l option (commandline -opc)[-2]; test "$option" = "-o"' -a 'the second argument'
...