Я хотел бы иметь 2 разных поведения «вкладки» в зависимости от контекста использования.
Я хотел бы иметь поведение по умолчанию bind '"\t":complete'
в любое время, кроме случаев, когда пользователи пытаются заполнить аргументы команды «mybashfunction». В этом случае я вызываю специальную функцию для генерации завершения, но я бы хотел, чтобы «вкладка» работала, как если бы bind '"\t":menu-complete'
был установлен.
Я считаю, что его библиотека readline будет поддерживать только один тип поведения при завершении табуляции за раз.
Это то, что вы ищете? Bash: полное меню только на несколько матчей
Вы можете добиться этого, используя полные правила bash ...
_myfunc() {
_opts="zero one two"
# COMPREPLY is bash built-in for array of possible completions
COMPREPLY=()
# cur & prev are current & previous words typed in shell
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
COMPREPLY=( $( compgen -W "${_opts}" -- ${cur} ))
return 0
}
complete -F _myfunc myfunc
Это не коснется нормального завершения bash, но когда вы завершите myfunc, у вас будет «ноль один два» в качестве возможных завершений.
Изменить: о да, вставьте это в свой bashrc или аналогичный, чтобы он был получен в новых оболочках.