Comportamiento dinámico de finalización de bash

Comportamiento dinámico de finalización de bash

Me gustaría tener 2 comportamientos diferentes de "pestaña" según el contexto de uso.
Me gustaría tener el comportamiento predeterminado de bind '"\t":complete'cualquier momento, excepto cuando los usuarios intentan completar los argumentos del comando "mybashfunction". En este caso, llamo a una función especial para generar la finalización, pero me gustaría que la "pestaña" funcione como si bind '"\t":menu-complete'estuviera configurada.

Respuesta1

Creo que su biblioteca readline solo admitirá un tipo de comportamiento de finalización de tabulación a la vez.

Respuesta2

¿Es esto lo que estás buscando?Bash: menú completo solo para algunas coincidencias

Respuesta3

Puedes lograr esto usando reglas completas de 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

Esto no afectará la finalización normal de bash, pero cuando completes myfunc con la pestaña tendrás "cero uno dos" como posibles finalizaciones.

Editar: oh sí, inserte esto en su bashrc o similar para que se obtenga en nuevos shells.

información relacionada