5.4 La ligne courante
La notion de ligne courante n'existe que parce que l'on commet des erreurs
de frappe.
Ces erreurs sont correctibles tant que l'on demeure au sein d'une même ligne.
Deux caractères spéciaux permettent d'éditer (c'est-à-dire de
corriger ou plus généralement de modifier) la ligne courante.
5.4.1 Effacement de caractère
Ce caractère (erase character en
terminologie UNIX.)
annule le dernier caractère présent dans la ligne courante.
Visuellement, sur les lignes de transmission rapide (où quelques caractères
de plus ne se font aucunement cruellement sentir), l'écho est
H,
SP (SP est le code ASCII numéro 32, ou blanc.
Les caractères seront nommés indifféremment par leurs divers noms.
SP est plus commode que « » !),
H ce qui permet de revenir en arrière d'un caractère, de l'effacer en
écrivant par dessus un blanc, puis de se repositionner sur ce même
caractère effacé.
Le prochain caractère frappé au clavier remplacera donc celui-là même
qui vient d'être effacé.
Schématiquement (le symbole _ représente, dans la ligne
courante, l'endroit où insérer le prochain caractère et sur l'écran,
la position du curseur.)
---------- |
-------- |
---------- |
------- |
caractères |
état du |
caractère |
état de |
émis par |
tampon |
émis vers |
l'écran |
le clavier |
|
l'écran |
|
---------- |
-------- |
--------- ------- |
initialement |
_ |
|
_ |
w |
w_ |
w |
w_ |
h |
wh_ |
h |
wh_ |
H |
w_ |
H |
wh |
|
|
SP |
w _ |
|
|
H |
w_ |
Les choses ne sont pas si simples sur une imprimante où l'on ne peut
effacer ce qui a été imprimé. On peut alors préférer, comme dans les
vieux UNIX effacer avec # plutôt que H. L'écho est alors limité
au seul caractère # ce qui permet par simple inspection visuelle de
déduire ce qui reste de la ligne courante.
wha#oiz##is quie#i##einnec
est alors la représentation, non équivoque quoique illisible, de
whois queinnec
Ce processus est répétitif, plusieurs frappes consécutives de H
effacent successivement les derniers caractères entrés.
On ne peut bien sûr effacer plus de caractères qu'il n'y en a dans le
tampon.
Schématiquement
---------- |
-------- |
---------- |
------- |
caractères |
état du |
caractère |
état de |
émis par |
tampon |
émis vers |
l'écran |
le clavier |
|
l'écran |
|
---------- |
-------- |
--------- ------- |
initialement |
w_ |
|
w_ |
H |
_ |
H |
w |
|
|
SP |
_ |
|
|
H |
_ |
H |
_ |
rien |
_ |
Le caractère d'effacement peut être programmé par
stty erase 'c'
où c peut être un caractère quelconque même visualisable comme
dièse.
stty erase '#'
ou encore un caractère de contrôle exprimé comme une séquence de deux
caractères dont le premier est l'accent circonflexe, et le second un
caractère visualisable (cf. Annexe 1).
Par convention, dans tout ce texte, toute séquence x
désignera un caractère de contrôle tandis que x ne sera que
la suite des caractères accent circonflexe et lettre x. Cette
dernière séquence permet de représenter pour certains programmes comme
stty un caractère de contrôle de façon lisible.
On écrira:
stty erase '^H'
ou même
stty erase '^h'
Une troisième solution consiste à faire précéder BS d'un caractère
d'échappement approprié.
par exemple, pour
sh (cf. Désinformation locale)
stty erase 'VH'
Enfin si l'on veut supprimer cette fonction d'édition, il suffira pour cela
d'ordonner
stty erase undef
ou encore
stty erase u
où
undef et
u signifient
undefined.
Dans ce dernier cas H est considéré comme un caractère normal et donc
transmis et réémis en écho.
---------- |
-------- |
---------- |
------- |
caractères |
état du |
caractère |
état de |
émis par |
tampon |
émis vers |
l'écran |
le clavier |
|
l'écran |
|
---------- |
-------- |
--------- ------- |
initialement |
wh_ |
|
wh_ |
H |
whH_ |
H |
wh |
La ligne qui sera fournie à la tâche qui a demandé cette lecture sur le
clavier comportera cet espacement arrière en troisième caractère.
5.4.2 Annulation d'une ligne entière
Effacer complètement la ligne courante parce que l'on a commis une
faute en début de ligne ou bien que l'on a changé d'idée, est possible
grâce à X (ou kill character en
terminologie UNIX).
En écho est émis ce qu'il faut comme séquence H, SP, H pour effacer
toute la ligne présente sur l'écran.
On peut bien sûr programmer ce caractère grâce à
stty kill '^X'
ou comme dans les vieux
UNIX
stty kill '@'
On peut bien sûr annuler cette fonction par
stty kill undef