# 14. Editing dell’input interattivo e sostituzione della history

Alcune versioni dell’interprete Python supportano la modifica della riga di input corrente e la sostituzione della history, simili alle funzionalità presenti nella shell Korn e nella shell GNU Bash. Questo è implementato utilizzando la libreria GNU Readline, che supporta vari stili di modifica. Questa libreria ha la sua documentazione che non duplicheremo qui.

## 14.1. Completamento con il tasto Tab e modifica della history

Il completamento dei nomi delle variabili e dei moduli è automaticamente abilitato all’avvio dell’interprete in modo che il tasto `Tab` invochi la funzione di completamento; essa esamina i nomi delle istruzioni Python, le variabili locali correnti e i nomi dei moduli disponibili. Per le espressioni puntate come `string.a`, valuterà l’espressione fino all’ultimo `'.'` e quindi suggerirà completamenti dagli attributi dell’oggetto risultante. Nota che questo potrebbe eseguire codice definito dall’applicazione se un oggetto con un metodo `__getattr__()` fa parte dell’espressione. La configurazione predefinita salva anche la tua history in un file chiamato `.python_history` nella tua directory utente. La history sarà disponibile nuovamente durante la prossima sessione dell’interprete interattivo.

## 14.2. Alternative all’interprete interattivo

Questa funzionalità è un enorme passo avanti rispetto alle versioni precedenti dell’interprete; tuttavia, alcuni desideri sono rimasti: sarebbe bello se l’indentazione corretta venisse suggerita sulle linee di continuazione (il parser sa se è richiesto un token di indentazione successivo). Il meccanismo di completamento potrebbe utilizzare la tabella dei simboli dell’interprete. Un comando per controllare (o addirittura suggerire) parentesi, virgolette, ecc. corrispondenti, sarebbe anche molto utile.

Un’alternativa all’interprete interattivo migliorato che esiste da molto tempo è IPython, che offre il completamento con il tasto Tab, l’esplorazione degli oggetti e una gestione avanzata della history. Può anche essere personalizzato a fondo e incorporato in altre applicazioni. Un altro ambiente interattivo migliorato simile è bpython.