Algunas versiones del int�rprete de Python permiten la edici�n de la l�nea de entrada en curso y la sustituci�n hist�rica, servicios similares a los existentes en ksh y bash de GNU. Esto se consigue mediante la biblioteca de GNU Readline, que permite edici�n estilo Emacs y estilo vi. Esta biblioteca tiene su propia documentaci�n, que no voy a duplicar aqu�. Sin embargo, es f�cil contar lo m�s b�sico. La edici�n interactiva y el hist�rico descritos aqu� est�n disponibles opcionalmente en las versiones Unix y CygWin del int�rprete.
Este cap�tulo no documenta los servicios de edici�n del Paquete PythonWin de Mark Hammond ni el entorno basado en Tk, IDLE, distribuido con Python. La recuperaci�n de historia de la l�nea de �rdenes que funciona en DOS o en NT u otras cosas es tambi�n otra historia.
Si est� disponible, la edici�n de l�nea de entrada est� activa siempre que el int�rprete imprime un indicador principal o secundario. Se puede modificar la l�nea en curso utilizando los caracteres de control normales de Emacs. Los m�s importantes son: C-A (Control-A) mueve el cursor al principio de la l�nea, C-E final. C-K borra hasta el final de la l�nea, C-Y recupera la �ltima cadena eliminada. C-_ deshace el �ltimo cambio realizado (se puede deshacer varias veces).
La sustituci�n de historia funciona de la siguiente manera. Cualquier l�nea de entrada no vac�a se guarda en un hist�rico. Cuando se emite un nuevo indicador, est�s situado en una l�nea nueva debajo de todo el hist�rico. C-P sube una l�nea (hacia l�neas anteriores) en el hist�rico y C-N baja una l�nea. Se puede editar cualquier l�nea del hist�rico: aparece un asterisco en frente del indicador para indicar que una l�nea se ha modificado. Al pulsar la tecla de retorno, se pasa la l�nea actual al int�rprete. C-R comienza una b�squeda inversa incremental y C-S empieza una b�squeda hacia delante.
Es posible personalizar las asignaciones de teclas y otros par�metros de la biblioteca Readline insertando �rdenes en un fichero de arranque denominado ~/.inputrc. Las asignaciones de teclas tienen esta forma:
nombre-tecla: nombre-funci�n
o
"cadena": nombre-funci�n
y se cambian las opciones con
set nombre-opci�n valor
Por ejemplo:
# Prefiero edici�n tipo vi: set editing-mode vi # Editar con una sola l�nea: set horizontal-scroll-mode On # Reasignar varias teclas: Meta-h: backward-kill-word "\C-u": universal-argument "\C-x\C-r": re-read-init-file
Observa que la asignaci�n por omisi�n del tabulador en Python corresponde a insertar un tabulador, en lugar de la funci�n de completado de nombre de fichero por omisi�n en Readline. Si insistes, se puede forzar esto poniendo
Tab: complete
en tu fichero ~/.inputrc (por supuesto, esto dificulta teclear l�neas de continuaci�n sangradas).
Opcionalmente, esta disponible el completado autom�tico de nombres de m�dulos y variables. Para activarlo en el modo interactivo, a�ade lo siguiente al fichero de arranqueA.1.
import rlcompleter, readline readline.parse_and_bind('tab: complete')
Esto asocia el tabulador a la funci�n de completado, por lo que
pulsar dos veces el tabulador sugiere terminaciones posibles de la palabra.
Busca en los nombres de sentencias Python, las variables locales actuales
y los nombres de m�dulos disponibles. Para expresiones con punto,
como cadena.a
, primero eval�a la expresi�n hasta el
�ltimo "." y sugiere los atributos del objeto resultante.
F�jate que esto puede provocar la ejecuci�n de c�digo definido por
la aplicaci�n si hay un objeto con un m�todo __getattr__()
como parte de la expresi�n.
Este servicio es un enorme paso adelante comparado con las anteriores versiones del int�rprete. Sin embargo, quedan muchos deseos por cumplir: Ser�a c�modo que se pusiera autom�ticamente el sangrado correcto en l�neas de continuaci�n (el analizador sabe si hace falta un sangrado). El mecanismo de completado autom�tico podr�a utilizar la tabla de s�mbolos del int�rprete. Tambi�n vendr�a bien una orden para comprobar (y hasta sugerir) las parejas de par�ntesis, comillas, etc.