Quelques versions de l'interpréteur Python supportent l'édition de la ligne d'entrée courante et la substitution historique, des commodités semblables à celles du shell Korn et du shell GNU Bash. Ceci est implémenté en utilisant la librairie GNU Readline, qui supporte l'édition à la vi et à la emacs. Cette librairie a sa propre documentation, que je ne dupliquerai pas ici; toutefois, les bases peuvent être vite expliquées.
Ce chapitre ne documente pas les capacités d'édition du paquetage PythonWin de Mark Hammond ou l'environnement basé sur Tk, IDLE, distribué avec Python. Le rappel d'historique de ligne de commande qui fonctionne dans les fenêtres DOS sous NT et d'autres variantes de DOS et Windows est encore un autre bestiau.
Si elle est supportée, l'édition de ligne d'entrée est active lorsque l'interpréteur affiche un prompt primaire ou secondaire. La ligne courante peut être éditée en utilisant les caractères de contrôle conventionnels d'Emacs. Les plus importants sont: C-A (Control-A) déplace le curseur en début de ligne, C-E en fin de ligne, C-B déplace d'une position vers la gauche, C-F vers la droite. Backspace efface le caractère à gauche du curseur, C-D le caractère à droite. C-K tue (efface) le reste de la ligne à droite du curseur, C-Y rappelle la dernière chaîne tuée. C-tiret-bas défait le dernier changement réalisé; il peut être répété pour un effet cumulé.
La substitution historique fonctionne ainsi. Toutes les lignes d'entrée non-vides sont enregistrées dans un tampon d'historique, et lorsqu'un nouveau prompt est affiché, vous êtes dans une nouvelle ligne à la fin de ce tampon. C-P déplace d'une ligne vers le haut (vers l'arrière) dans l'historique, C-N vers le bas. Toute ligne de l'historique peut être éditée; un astérisque apparaît en début de ligne avant le prompt pour indiquer que la ligne a été modifiée. Appuyer sur Entrée passe la ligne courante à l'interpréteur. C-R commence une recherche incrémentale en arrière; C-S une recherche en avant.
Les associations des touches aux commandes et d'autres paramètres de la bibliothèque Readline peuvent être redéfinis en plaçant des commandes d'initialisation dans le fichier $HOME/.inputrc. Les définitions de raccourcis clavier ont la forme
nom-de-touche: nom-de-fonction
ou bien
"chaîne": nom-de-fonction
et les options sont modifiées avec
set nom-option valeur
Par exemple:
# Je préfère l'édition à la vi: set editing-mode vi # Edition sur une seule ligne: set horizontal-scroll-mode On # Redéfinir quelques touches: Meta-h: backward-kill-word "\C-u": universal-argument "\C-x\C-r": re-read-init-file
Remarquez que l'action liée a la tabulation en Python est d'insérer une tabulation, au lieu de l'action par défaut de Readline, qui est la complétion de noms. Si vous insistez, vous pouvez redéfinir cela avec
Tab: complete
dans le fichier $HOME/.inputrc. (Bien sûr, cela rend plus difficile l'indentation des lignes de continuation...)
La complétion automatique des noms de variable et de module est disponible en option. Pour l'activer dans le mode interactif de l'interpréteur, rajouter ceci à votre fichier $HOME/.pythonrc:
import rlcompleter, readline readline.parse_and_bind('tab: complete')
Ceci lie la touche TAB à la fonction de complétion, donc appuyer deux
fois sur TAB affiche les suggestions de complétion; celles-ci sont
cherchées parmi les noms d'instructions, les variables locales
actuelles et les noms de module disponibles. Pour des expressions avec
un point comme string.a
, la complétion sera réalisée jusqu'au
"." puis les complétions correspondant aux attributs
suivants seront suggérées. Remarquez que cela peut amener à exécuter
du code propre à une application si un objet avec une méthode
__getattr__() apparaît dans l'expression.
Cette commodité est un énorme pas en avant par rapport aux versions plus anciennes de l'interpréteur; néanmoins, quelques vux restent à remplir: ce serait bien que l'indentation soit suggérée sur les lignes de continuation (l'interpréteur sait si un lexème d'indentation est requis par la suite). Le mécanisme de complétion pourrait se servir de la table de symboles de l'interpréteur. Une commande pour vérifier (voire suggérer) l'équilibre des parenthèses, des quotes, etc. serait aussi très utile.