Динамическое поведение завершения Bash

Динамическое поведение завершения Bash

Я хотел бы иметь 2 разных поведения "tab" в зависимости от контекста использования.
Я хотел бы иметь поведение по умолчанию в bind '"\t":complete'любое время, за исключением случаев, когда пользователи пытаются завершить аргументы команды "mybashfunction". В этом случае я вызываю специальную функцию для генерации завершения, но я хотел бы, чтобы "tab" работал так, как если бы bind '"\t":menu-complete'был установлен.

решение1

Я считаю, что библиотека Readline будет поддерживать только один тип поведения автодополнения по табуляции за раз.

решение2

решение3

Этого можно добиться, используя полные правила 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, но когда вы нажмете Tab Complete myfunc, у вас будут «ноль, один, два» в качестве возможных завершений.

Редактировать: о да, вставьте это в свой bashrc или что-то подобное, чтобы оно использовалось в новых оболочках.

Связанный контент