[eside-ghost] Completar comandos en programa Bash
Jon Ander Hernandez
jonan.h en gmail.com
Dom Feb 17 19:29:40 CET 2013
El día 17 de febrero de 2013 00:36, Jorge García - Bardok
<bardok en gmail.com> escribió:
> He estado investigando un poquillo (en Ubuntu) (info sacada de
> http://tldp.org/LDP/abs/html/tabexpansion.html):
La verdad es que casi todos los artículos sobre el autocompletado
están obsoletos :-S, como este que está bastante bien para ver un poco
la idea http://www.debian-administration.org/article/An_introduction_to_bash_completion_part_2
Para obtener las variables cur y pre que apuntan a la palabra actual y
a la previa se recomienda usar la función _get_comp_words_by_ref
porque gestiona cuando el autocompletado se realiza por ejemplo en
medio de una palabra (además creo recordar que también resolvía algún
problema de compatibilidad entre versiones de Bash). Aunque acabo de
descubrir que ahora se usa _init_completion, pero igual no está en
squeeze porque hace 8 meses no la conocía.
_animal()
{
local cur prev
COMPREPLY=()
_get_comp_words_by_ref cur prev
COMPREPLY=( $( compgen -W '--gatito --perrito' -- $cur ) );
} &&
complete -F _animal animal.sh
Te faltaba la llamada complete Bardok ;-)
Un buena forma de mirar como implementar uno es mirando el git de debian:
http://anonscm.debian.org/gitweb/?p=bash-completion/bash-completion.git;a=blob;f=completions/xsltproc
Hay un montón de funciones interesantes y bien documentadas en el
fichero bash_completion:
http://anonscm.debian.org/gitweb/?p=bash-completion/bash-completion.git;a=blob_plain;f=bash_completion;hb=HEAD
Pero para cosas sencillas la mejor manera y más simple es añadir un
parametro --help y hacer que use la función _longopt (que parsea la
salida de --help para las flags y autocompleta ficheros y directorios)
y listo.
complete -F _longopt animal.sh
Un saludete! ;-)
JonAn.
Más información sobre la lista de distribución eside-ghost