Завершение Bash без пробелов - PullRequest
4 голосов
/ 22 июля 2011

Я работаю над завершением для команды, которая принимает аргумент типа «один: два: три».

Проще говоря, я хочу, чтобы ':' обрабатывался так же, как символ пробела по умолчанию. Есть ли простой способ сделать это, что мне не хватает?

Я обнаружил, что ':' находится в COMP_WORDBREAKS, но символ в COMP_WORDBREAKS также обрабатывается как слова.

Так что, если командная строка:

cmd one:tw[TAB]

COMP_CWORD будет 3, а COMP_WORDS [COMP_CWORD-1] будет ':'

Для сравнения, если командная строка:

cmd one tw[TAB]

COMP_CWORD будет 2, а COMP_WORDS [COMP_CWORD-1] будет «один»

Еще хуже то, что если вы нажмете [TAB] сразу после разделителя ':', он будет действовать в основном как пробел:

cmd one:[TAB]

Теперь COMP_CWORD будет 2, а COMP_WORDS [COMP_CWORD-1] будет «один».

Я могу легко разобрать командную строку из COMP_LINE, но лучше найти способ просто сделать ':' действовать как '' в моем произвольном завершении. Возможно ли это?

1 Ответ

0 голосов
/ 23 июля 2011

Сначала возьмите пользовательское проанализированное решение. Люблю знать, если есть лучший способ:

parms=$(echo "$COMP_LINE" | cut -d ' ' -f 2)
vals="${parms}XYZZY"
IFS=$":"
words=( $vals )
unset IFS
count=${#words[@]}
cur="${words[$count-1]%%XYZZY}"
...