Précédent Index Suivant

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'  
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 '­V­H

Enfin si l'on veut supprimer cette fonction d'édition, il suffira pour cela d'ordonner
 stty erase undef 
ou encore
 stty erase u 
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 wh­H_ ­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 


Précédent Index Suivant