Pregunta

Estoy tratando de escribir un pequeño lanzador de aplicaciones del sistema, y ??que le gustaría utilizar la ficha terminaciones de golpe en mi propio sistema de finalización. He sido capaz de obtener una lista de las terminaciones de los comandos generales utilizando compgen -abck.
Sin embargo, también me gustaría que para obtener terminaciones para los comandos específicos: por ejemplo, la entrada de git p debería mostrar la finalización de los comandos de Git.

¿Hay alguna manera de poder utilizar compgen para hacer esto? Si no es así, ¿hay alguna otra manera puedo obtener una lista de terminaciones programación?

[EDIT: Para aclarar, no estoy tratando de proporcionar finalización de fiesta - mi aplicación es un lanzador de comandos GUI. Me gustaría simplemente como a terminaciones existentes utilización de golpe de mi propia aplicación.]

¿Fue útil?

Solución

Yo realmente no sé cómo funciona, pero el impresionante gestor de ventanas utilizando el siguiente código para Lua para acceder a consecuencia de la finalización bash:

https://github.com/awesomeWM/ impresionante / burbuja / maestro / lib / horrible / completion.lua # L119

  1. Vía complete -p encontramos complete -o bashdefault -o default -o nospace -F _git git. Recordamos "_git" para más adelante.
  2. La longitud de "l git" es 5, por lo que nos propusimos COMP_COUNT = 6. Estamos terminando el primer argumento de "git", por lo COMP_CWORD = 1.

Todos juntos utilice la siguiente secuencia de comandos:

__print_completions() {
    printf '%s\n' "${COMPREPLY[@]}"
}

# load bash-completion functions
source /etc/bash_completion

# load git's completion function
_completion_loader git

COMP_WORDS=(git l)
COMP_LINE='git l'
COMP_POINT=6
COMP_CWORD=1
_git
__print_completions

Salida: "registro"

Otros consejos

Tome un vistazo a la Administración de Debian Una introducción a la finalización fiesta - Es bastante fácil de entender - por cierto, también tiene un segunda parte

Comprobar en el directorio /etc/bash_completion.d/. Aquí es donde se quedan los diferentes guiones de terminación de comandos.

A continuación, un simple ejemplo de trabajo, pero en bash:

function foo_completion()
{
    local currentWord=${COMP_WORDS[COMP_CWORD]}
    local completionList=""

    case "${COMP_CWORD}" in
        "1")
            completionList="command1 command2 command3";
            ;;
        "2")
            completionList="param1 param2 param3";
            ;;
    esac

    COMPREPLY=( $( compgen -W "${completionList}" -- ${currentWord} ) )
}

complete -F foo_completion foo

Con este tipo de código, obtendrá COMMANDn completado cuando se escribe "foo c" + tab y paramN completado cuando se escribe "foo comando1 p" + tab

Puede calcular la lista de terminación de la ayuda de comandos.

MY2C

Me cortó hasta este script hace un tiempo que le da bastante exacto el hombre-Bash página Finalización sé que otras personas han hecho cosas similares con opción de análisis de la salida --help.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top