Jak jsme si již říkali na samém začátku naší učebnice, interpretr Pythonu může být zkompilován s knihovnou GNU Readline, která zpřístupňuje rozšířené úpravy příkazového řádku. Tuto knihovnu používá například Unixový shell GNU Bash. Tuto knihovnu můžete dokonce nakonfigurovat tak, že bude používat klávesové zkratky ve stylu obou nejpoužívanějších editorů - Emacs a vi. Přestože má tato knihovna svůj vlastní manuál, zmíníme zde základy její konfigurace, jež by se mohli hodit každému začátečníkovi.
Po celou následující kapitolu budeme předpokládat, že váš interpretr je zkompilován s podporou knihovny Readline.
Rozšířené úpravy příkazového řádku pro zadání vstupu pro interpretr je možné používat kdykoli, přičemž nezáleží, zda interpretr zobrazil primární nebo sekundární výzvu. Aktuální řádka můžete upravovat např. za použití příkazů, které možná znáte z programu EmacsA.1. Jde především o klávesy C-F (C-B), jež slouží pro pohyb o jeden znak vpřed (vzad). Další dvojice kláves M-F a M-B posouvají kurzor o jedno slovo vpřed resp. vzad. Pro pohyb na konec případně začátek řádku použijete klávesy C-E a C-A. Klávesou C-K smažete vše od kurzoru do konce řádku, C-Y vloží naposledy smazaný řetězec. Konečně C-podtržítko vrátí poslední změnu na tomto řádku.
Historie příkazů pracuje naprosto stejně jako v libovolném jiném programu, který jako svoje rozhraní používá příkazový řádek. Klávesa C-P vás přesune na předchozí příkaz v historii, C-N na následující. Každý řádek, který jste vyvolali z historie může být upraven. Po dokončení vašich úprav stiskněte klávesu Return a aktuální řádek bude předán interpretru k opětovnému spuštění. Pro vyhledávání v historii použijte stisk kláves C-R. Pomocí kláves C-S spustíte vyhledávání v opačném směru.
Klávesové zkratky a další parametry knihovny GNU Readline můžete nastavovat pomocí příkazů v inicializačním souboru ~./inputrc. V něm jsou klávesové zkratky zapisovány ve tvaru:
jméno-klávesy: jméno-funkce
nebo:
"řetězec": jméno-funkce
Různé parametry se pak nastavují příkazy
set parametr hodnota
Zde si uvedeme jednu možnou konfiguraci knihovny Readline:
# 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
Knihovna Readline obvykle používá klávesu Tab pro doplňování jmen souborů a příkazů, v Pythonu však slouží pro vložení znaku tabulátor. Jestliže si přejete používat doplňování vázané na klávesu Tab, zapište do svého souboru ~/.inputrc následující řádek:
Tab: complete
Za použití tohoto namapování kláves se ale připravíte o možnost přímo vkládat znaky tabulátor na příkazové řádce interpretru. Doplňování jmen proměnných a modulů je další rozšíření, které přináší knihovny GNU Readline do interpretru Pythonu. Pokud si přejete dolňování jmen používat, přidejte následující řádky do inicializačního souboru Pythonu:A.2
import rlcompleter, readline readline.parse_and_bind('tab: complete')
Tento kód sváže klávesu Tab s funkcí doplňování jmen (complete).
Při doplňování jmen se prohledává seznam všech příkazů jazyka Python, aktuální
lokální prostor jmen a jména modulů. Pro výrazy, které používají tečkovou
notaci jako např. string.a
se nejprve vyhodnotí výraz před poslední
tečkou a pak se vyvolá doplňování jmen na výsledném objektu. Takto může dojít
i k nechtěnému spuštění kódu programu. Stačí aby objekt definoval metodu
__getattr__() a při prvním doplňování složitějšího výrazu, který
se odkazuje na atributy takové instance se spustí kód této metody.
Inicializační soubor může nabízet i více možností. Jako příklad může posloužit následující výpis souboru. Podotkněme, že inicializační soubor se spouští ve stejném prostoru jmen, ve kterém budou pozděje vykonávány interaktivní příkazy. Proto je slušností zanechat toto prostředí "čisté", kvůli čemuž skript po sobě snaže nepotřebná jména z tohoto jmenného prostoru odstraní:
# 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
V porovnání s prvními verzemi interpretru jsou tyto možnosti přímo pohádkové. Stále ale zbývá implementovat několik dalších vlastností, které by editování příkazového řádku udělaly ještě pohodlnější než je nyní.