El autocompletado permite predecir lo que el usuario va a escribir.
Muchos programas soportan el autocompletado. Por ejemplo, si escribimos
ls --
y pulsamos Tabulador en una terminal con Bash u otra
shell similar, nos aparecen todas las opciones disponibles que comienzan
con --
. Si escribimos ls --au
y pulsamos Tabulador, se
autocompleta el parámetro --author
porque es el único que comienza por
--au
. En el siguiente vídeo se puede ver en acción esta
funcionalidad.
Sin embargo, no todos los programas permiten el autocompletado. Pero no
es un gran problema, ya que es muy sencillo de añadir este soporte.
Simplemente basta con crear un archivo con el nombre del programa al que
quieres añadirle soporte para autocompletado en el directorio
/etc/bash_completion.d
. Ese archivo deberá contener la función de
autocompletado correspondiente a ese programa.
La función complete
de Bash sirve para especificar cómo realizar el
autocompletado (ejecuta help complete
para más información). El
parámetro -F
sirve para indicar que queremos usar una función para el
autocompletado, después de -F
debemos escribir el nombre de la función
que usaremos y el nombre del programa al que se le aplicarán las reglas
que hayamos definido en dicha función.
Como ejemplo voy a crear el autocompletado para la versión 0.5.3 de un programa llamado Ducker. Simplemente voy a completar los parámetros del programa, pero podríamos crear reglas más complejas y específicas si el programa lo requiriera.
_ducker()
{
# Aquí estableceremos las reglas de autocompletado
}
complete -F _ducker ducker
A continuación, necesitamos crear algunas variables:
COMPREPLY
. Es una variable que tiene un significado particular para Bash. Dentro de la función de completado se usa para mostrar la salida del intento de autocompletado.cur
. La opción de completado actual.prev
. La opción de completado previaopts
. Todas las opciones de completado que tiene nuestro programa (en este caso, los parámetros disponibles del programa).
Después necesitamos establecer una condición para intentar realizar el
completado. En nuestro caso es suficiente si la opción actual comienza
por u guion (-), pues todos los parámetros de Ducker comienzan con un
guion. La función compgen
, generará los valores que coinciden con el
texto introducido cuando se pulsa Tabulador y su resultado
será guardado en COMPREPLY
. Posteriormente se saldrá de la función
devolviendo 0, lo cual indica que se ha ejecutado con éxito.
A continuación, se muestra el código completo.
_ducker()
{
local cur prev opts
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
opts=" -h --help --version -m --multiple-search -w --website-search -H --no-javascript -l --lite -i --image-search"
if [[ ${cur} == -* ]] ; then
COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
return 0
fi
}
complete -F _ducker ducker
Comentarios