Některé verze interpretru jazyka Python podporují úpravy příkazového řádku stejným způsobem jako třeba Korn shell nebo GNU Bash. Ty jsou implementovány za použití GNU Readline knihovny, která podporuje úpravy ve stylu programů Emacs a vi. Tato knihovna má svoji vlastní dokumentaci a zde jí nebudeme opisovat, nicméně alespoň její základy zde zmíníme. Interaktivní úpravy a historie příkazů tak, jak jsou popsány v této kapitole, jsou volitelné při kompilaci interpretru v prostředích Unix a CygWin. Tato kapitola nepopisuje editování příkazů v programu Marka Hammonda PythonWin nebo v prostředí IDLE distribuovaném s Pythonem.
Podporuje-li váš interpretr rozšířené úpravy příkazového řádku, je možné je používat kdykoli, když interpretr zobrazí primární nebo sekundární výzvu. Aktuální řádka může být editována za použití příkazů ve stylu programu Emacs. Z nich nejdůležitější jsou: C-A (Control-A) přesune kurzor na začátek řádku, C-E na jeho konec, C-B přesune kurzor o jeden znak doleva, C-F doprava. Klávesa Backspace maže znak nalevo od kurzoru, C-D napravo od něj. C-K smaže zbytek řádku napravo od kurzoru, C-Y vloží naposledy smazaný řetězec. C-podtržítko vrátí naposledy provedenou změnu, přičemž její stisk můžete opakovat pro odvolání starších změn.
Historie příkazů pracuje následujícím způsobem: všechny neprázdné řádky jsou uloženy do historie příkazů a při vytisknutí každé nové výzvy se posunete na konec této historie. C-P vás přesune na předchozí příkaz v historii příkazů, C-N na následující příkaz. Každý řádek v historii příkazů může být upraven - pak se před výzvou objeví hvězdička označující řádek jako upravený. Stiskem klávesy Return předáte aktuální řádek interpretru. C-R umožní zpětné inkrementální vyhledávání v historii, C-S vyhledává ve směru opačném.
Klávesové zkratky a některé další parametry Readline knihovny mohou být upraveny vložením příkazů do inicializačního souboru nazývaného ~/.inputrc. Klávesové zkratky jsou zapisovány ve tvaru:
jméno-klávesy: jméno-funkce
nebo
"řetězec": jméno-funkce
a parametry můžete nastavovat pomocí
set parametr hodnota
Například:
# Preferuji úpravy ve stylu vi: set editing-mode vi # Úpravy na jediné řádce: set horizontal-scroll-mode On # Upravíme nějaké klávesové zkratky: Meta-h: backward-kill-word "\C-u": universal-argument "\C-x\C-r": re-read-init-file
Klávesa Tab je v Pythonu implicitně použita pro vložení znaku Tab, zatímco Readline knihovna ji používá pro doplňování jmen souborů. Jestliže si to přejete, můžete doplňování Tabem používat i v Pythonu vložením následujícího příkazu do souboru /.inputrc:
Tab: complete
Takto se ale připravíte o možnost snadno zapisovat odsazené řádky.
Doplňování jmen proměnných a modulů je další možností, kterou umožňuje knihovna Readline. Pro její povolení v interaktivním interpretru přidejte následující řádky do inicializačního souboru:A.1
import rlcompleter, readline readline.parse_and_bind('tab: complete')
Ty svážou klávesu Tab s funkcí doplňování jmen, takže dvojitý stisk
Tab spustí doplňování. Prohledávají se všechny příkazy jazyka Python,
aktuální lokální proměnné a dostupná jména modulů. Pro výrazy používající
tečkovou notaci jako string.a
se nejprve vyhodnotí výraz před poslední
tečkou a pak se vyvolá doplňování na výsledném objektu. Tak se může spustit
určitý kód programu, jestliže objekt definující metodu __getattr__()
je částí výrazu.
Inicilizační soubor, který nabízí více možností může vypadat jako v tomto příkladě. Tento kód smaže jména, která vytvořil, když již nejsou potřeba. To se děje kvůli tomu, že inicializační soubor je spouštěn ve stejném prostoru jmen jako interaktivní příkazy a odstraněním těchto jmen se vyhneme vedlejším efektům v interaktivním prostředí. Samozřejmě zde můžete importovat i důležité moduly jako třeba os, který je potřebný téměř při každém spuštěním interpretru.
# Přidává doplňování příkazů a ukládá historii příkazů vašeho interaktivního # interpretru. Vyžaduje verzi Python 2.0 nebo vyšší, readline. Doplňování # je svázáno s klávesou Esc (tuto vazbu můžete změnit - viz dokumentace # knihovny readline). # # Uložte tento soubor jako ~/.pystartup a nastavte proměnnou prostředí tak, # aby na něj ukazovala, tj. "export PYTHONSTARTUP=/home/honza/.pystartup" # v bashi # # Proměnná PYTHONSTARTUP *neexpanduje* znak "~", takže musíte zadat celou # cestu k vašemu domácímu adresáři. import atexit import os import readline import rlcompleter historyPath = os.path.expanduser("~/.pyhistory") def save_history(historyPath=historyPath): import readline readline.write_history_file(historyPath) if os.path.exists(historyPath): readline.read_history_file(historyPath) atexit.register(save_history) del os, atexit, readline, rlcompleter, save_history, historyPath
Tyto možnosti jsou přímo pokrokové v porovnání se staršími verzemi interpretru. Některá přání ale stále visí ve vzduchu: dobré by bylo, kdyby interpretr automaticky dodržoval odsazení na průběžných řádcích (parser dobře ví, je-li odsazení požadováno nebo ne), mechanismus doplňování příkazového řádku by mohl používat tabulky symbolů interpretru, užitečný by byl příkaz pro kontrolu odpovídajících závorek, uvozovek atd.