# 14. Interaktywna edycja danych wejściowych oraz podstawianie z historii

Niektóre wersje interpretera Python, podobnie jak ułatwienia znajdowane w powłokach Korn i GNU Bash, wspierają edycję bieżącej linii danych wejściowych oraz podstawianie z historii. Do implementacji użyto biblioteki GNU Readline, która wspiera różne style edytowania. Biblioteka ta ma własną dokumentację, której nie będziemy tutaj powielać.

## 14.1. Uzupełnianie z tabulatorem oraz edycja historii

Uzupełnianie zmiennych i nazw modułów jest włączane automatycznie podczas uruchamiania interpretera w taki sposób, że klawisz `Tab` wywołuje funkcję uzupełniania; sprawdza nazwy instrukcji Pythona, bieżące zmienne lokalne oraz dostępne nazwy modułów. Dla wyrażeń kropkowanych takich jak `string.a`, ewaluuje wyrażenie do ostaniej `'.'`, a następnie sugeruje uzupełnienie z atrybutów obiektu wynikowego. Zauważ, że może to wykonać zdefiniowany w aplikacji kod, jeżeli obiekt z metodą `__getattr__()` jest częścią wyrażenia. Domyślna konfiguracja zapisuje także twoją historię do pliku `.python_history` w katalogu użytkownika. Historia będzie ponownie dostępna podczas następnej interaktywnej sesji interpretera.

## 14.2. Alternatywy dla interaktywnego interpretera

To ułatwienie jest olbrzymim krokiem naprzód w porównaniu z wcześniejszymi wersjami interpretera, jednakże, niektóre życzenia pozostają: byłoby dobrze, gdyby prawidłowe wcięcia były podpowiadane w kontynuowanych liniach (analizator składni wie, jeżeli token `INDENT` jest dalej wymagany). Mechanizm uzupełniania mógłby używać tabeli symboli interpretera. Polecenie, aby sprawdzić (lub nawet podpowiedzieć) pasujący nawias, cudzysłów itp. także byłoby użyteczne.

Jednym z alternatywnych udoskonalonych interaktywnych interpreterów dostępnych od pewnego czasu jest IPython, który posiada funkcję uzupełniania tabulatorem, eksplorację obiektów oraz zaawansowane zarządzanie historią. Można go także wszechstronnie dostosowywać oraz osadzać w innych aplikacjach. Innym podobnym udoskonalonym środowiskiem interaktywnego interpretera jest bpython.