Sous-sections


A. Edition d'Entrée Interactive et Substitution Historique

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.


A.1 Edition de Ligne

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é.


A.2 Substitution Historique

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.


A.3 Définition des Touches

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.


A.4 Commentaire

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.


See About this document... for information on suggesting changes.