Subsecciones


A. Edici�n de entrada interactiva y sustituci�n de historia

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.


A.1 Edici�n de l�nea

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).


A.2 Sustituci�n de historia

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.


A.3 Teclas

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.


A.4 Comentarios

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.



Notas al pie

... arranqueA.1
Python ejecutar� el contenido de un fichero identificado por la variable de entorno $PYTHONSTARTUP al arrancar una sesi�n interactiva del int�rprete

Ver Sobre este documento... para obtener informaci�n sobre sugerencias.