le monde de crabs (Christophe Cazajus)

Un BACKSPACE correct dans un XTERM

Backspace corret dans les applications avec xterm

C'est souvent que j'avais le « ^H » lors de l'appui sur « backspace » (« Retour Arrière avec effacement » dans les applications dans un xterm, alors que le bash semblait comprendre ce « backspace ». De plus, ce problème n'était pas présent avec d'autres terminaux tels-que « Terminal » (XFCE) ou « konsole » (KDE).

 

Dès le début de ma recherche, je me suis aperçu que le programme suivant révélait le problème :

    1 #include <stdio.h>
    2 
    3 int main()
    4     {
    5     char line[2048] ;
    6     printf( "? " ) ; fflush( stdout ) ;
    7     scanf( "%s", line ) ;
    8     puts( line ) ;
    9     return 0 ;
   10     }

Télécharger backspace.cTélécharger backspace.c

 

Après avoir fouillé les configurations des divers produits, je suis aperçu que le caractère d'effacement était défini comme '^?' et non comme « ^H », ce qui conviendrait mieux à la lib C. qui se conforte à la configuration du terminal (stty). Les émulateurs de console plus évolués, font à priori une détection automatique et transforment le caractère « ^H » en « ^? », ce comportement étant modifiable par configuration.

Fort de cette découverte, je crée un petit script qui va me permettre de modifier le code du « erase » afin qu'il corresponde à ma touche « backspace » :

# vi ctrl_h.sh
#!/bin/sh
stty erase ^H
# chmod +x ctrl_h.sh
# ./ctrl_h.sh

Et là, par magie, le « backspace » fonctionne correctement...

 

Par la suite, j'ai donc créé 2 fichiers dans les zones de configuration de l'environnement de login des utilisateurs, ainsi tout le monde va en profiter.

# vi /etc/profile.d/stty.sh
#!/bin/sh
if [ "$TERM" == xterm ] ; then
	stty erase ^H
fi
# vi /etc/profile.d/stty.csh
#!/bin/csh
if ( "$TERM" == xterm )
	stty erase ^H
endif
# chmod +x /etc/profile.d/stty.*

Une petite ouverture et fermeture de session, et plus de problème de « backspace » dans les applications dans un xterm...

Saisir « ^H » avec elvis (vi de la Slackware)

Ce qui viennent de tenter de lire cet article sans connaître un truc pour saisir le « ^H » doivent être en train de faire chauffer leur moteur de recherche ou certains forums pour trouver ce truc...

Avant de saisir un caractère de contrôle sous elvis, il faut précéder sa frapper par « ^V » (CONTROLE V). Ainsi pour saisir la ligne stty erase ^H, il faut taper en mode édition dans elvis (un caractère par ligne) :

s
t
t
y
[ESPACE]
e
r
a
s
e
[ESPACE]
[^V]
[BACKSPACE]
[ENTREE]

Et comme par magie, « backspace » c'est transformé en « ^H ».

Renseignez-vous sur les brevets logiciels en Europe :

NoSoftWarePatents.com (en français)

Les images représentant des sociétes, des associations ou des marques restent associées, par un lien, à ces sociétés, associations ou marques. Elles ne signifie en rien que ces sociétés, associations ou marques soutiennent ce site.

Sauf précisions contraire, le contenu de ce site est mis à disposition sous un contrat Creative Commons.

Les informations fournies le sont sans aucune garantie. L'auteur ne pourra être tenu responsable de leurs utilisations.

De par l'utilisation du HTML 4.01 Strict et des CSS 2.1, le monde de crabs sera correctement vu avec les navigateurs respectant ces normes, Mozilla ou FireFox par exemple.

Site : Le Monde de Crabs
Titre : Un BACKSPACE correct dans un XTERM
Date du document : 04/09/2008
Auteur : Christophe Cazajus
Mail : crabs(mettre le @)crabs-world.com
ou utiliser ce formulaire de contact
Mots-clé : crabs, monde, francais, francophone, français, backspace, xterm
Description : Un petit truc pour que le Backspace fonctionne correctement dans une application tournant avec Xterm et une astuce vi (elvis pour Slackware) pour saisir ^H.
Validation : html, css
The Linux Counter
Info iconelvis iconbash iconphp icongimp iconpovray iconxml iconxslt iconcss iconhtml icon
Slackware Linux
Creative Commons License

Le calendrier et les scores du Stade Toulousain sont accessibles sur cette page : Le monde de crabs et le Stade Toulousain.

Crabs's World : English Section