Terminal de linux. Autocompletado.

Arnau Sanchez arnau en ehas.org
Mar Nov 14 16:29:26 CET 2006


tny escribió:
> He visto que a la hora de escribir muchos comandos en el terminal de
> linux, se autocompletan con el tabulador.
>
> Quisiera que al pasar los parámetros a mis programas python se puediera
> emplear también el autocompletado.
>   
Esto es ligeramente off-topic, pero en fin...

(Sólo conozco Debian, pero imagino que será similar en otras distros)

La bash tiene completado programable, es capaz de expandir 
inteligentemente cualquier tipo de parámetro, no sólo ficheros y 
directorios. Para activarlo para un usuario edita su ~/.bashrc y añade 
(o normalmente, descomenta):

/etc/bash_completion ]; then
    . /etc/bash_completion
fi

A partir de este momento (además de muchas otras cosas), comandos como 
uname o wget expanden los parámetros con nombre largo (--xxxx) . ¿Cómo 
lo hace? en vez de tenerlo guardado estáticamente en algún fichero (lo 
que sería muy costoso de mantener, aunque en algunos casos -rsync- sí lo 
hace así), usa la función _getops definida en /etc/bash_completion y 
ejecuta al programa con "--help", parseando la salida. Si quieres que tu 
programa esté incluido entre los que expande escribe:

complete -o default -F _longopt miscript.py

(y para que sea permanente, ponlo por ejemplo en .bashrc)

Puedes comprobar que otros programas hacen uso del longopt con:

complete -p | grep _longopt

Naturalmente, debes asegurarte que tu aplicación responde 
convenientemente a un --help. En mis scripts python siempre uso el 
módulo optparse para el control de parámetros (en vez de getopt, que me 
parece más pobre) y el parseador entiende perfectamente su salida.

Usando convenientemente el completado de la bash se puede expandir de 
todo:  parámetros, nombres de host, de paquetes, servicios, nombres de 
usuario, etc, es una herramienta muy potente.

------------ próxima parte ------------
_______________________________________________
Python-es mailing list
Python-es en aditel.org
http://listas.aditel.org/listinfo/python-es


Más información sobre la lista de distribución Python-es