[eside-ghost] temillas varios...
Jon Ander Hernández
hernandez en movimage.com
Mar Oct 11 19:10:57 CEST 2005
Aupa ppl!!!
Lo de completar lo cierto es que es bastante intrigante, un día me
percate de que era un sistema extensible y bastante inteligente, que por
ejemplo si haces $ tar -xjvf y le das al tab, te muestra los ficheros
*.tar.bz2 de ese directorio y no el resto, con lo cual... evidentemente
no pude resistirme a echarle un ojo para ver que pasaba xDDDD.
La cosa es que es una funcionalidad nativa de bash y al parecer (tampoco
lo he investigado a profundidades excesivas) lo que permite es asignar
patrones que filtren por ejemplo los ficheros que debe un fichero ser
capaz de leer. Ejemplo :
$ grep -e 'zip' < /etc/bash_completion | grep -e 'unzip'
complete -f -X '!*.?(t)bz?(2)' bunzip2 bzcat bzcmp bzdiff bzegrep
bzfgrep bzgrep
complete -f -X '!*.@(zip|ZIP|jar|JAR|exe|EXE|pk3|war|wsz|ear|zargo|xpi|
sxw|ott)' unzip zipinfo
complete -f -X '!*.@(Z|gz|tgz|Gz|dz)' gunzip zcmp zdiff zcat zegrep
zfgrep zgrep zless zmore
No se como funciona la sintaxis pero tiene tiene toda la pinta de que
por ahí van los tiros. Si queréis cacharrear con ello el comando
"complete" que es un comando builtin de bash esta documentado en el man
de bash, y el fichero donde estan todos los trucos es el
fichero /etc/bash_completion que esta bastante documentado también.
Pero claro esto no explica lo de apt-get install porque si lo hace es
que bash es demasiado inteligente o han hecho un hack para leer la DDBB
de dpkg que no mola un pelo... pero la cosa no va por ahí, y es que el
comando complete permite también asociar un patrón a un comando ayudante
que le chive el autocompletado y aunque no lo he mirado supongo que por
ahí van los tiros.
Un ejemplo de esta funcionalidad lo encontramos en gstreamer que es un
framework multimedia que aparte de servir para crear aplicaciones como
Rythmbox, Banshee o amaroK, también permite contruir pipelines de
objetos para crear en plena consola y en un plas desde la consola te
creas desde un programa que te captura la pantalla y te la manda por UDP
haciendo streaming, o un pillar un streaming como una radio y guardarla
a un OGG, o incluso rippearte un DVD. El problema es que construir esta
pipelines es un poco chungo así que se han creado un ayudante que te
ayuda mediante autocompletado a crear estas pipelines.
>From $ man /usr/share/man/man1/gst-complete-0.8.1.gz :
NAME
gst-complete - do bash completion for gst-launch command-lines
SYNOPSIS
complete -C gst-complete gst-launch
Bueno una vez explicado todo esto que es muy interesante para saber que
hay debajo de bash como hacer que autocomplete recorcholis xDDDD
Pues es super fácil, si estas en debian o alguna de sus derivadas no
tienes más que descomentar unas cuantas lineas de ~/.bashrc
# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
#if [ -f /etc/bash_completion ]; then
# . /etc/bash_completion
#fi
Y como nos dice el comentario si descomentas las mismas lineas que
también existen en /etc/bash.bashrc, pues el autocompletado funcionará
no solo para ese user sino para todos.
Un saludete!!
JonAn.
Más información sobre la lista de distribución eside-ghost