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