Назад | Перейти на главную страницу

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

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

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

Вы можете добиться этого, используя полные правила 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 или аналогичный, чтобы он был получен в новых оболочках.