<HTML> <HEAD> <TITLE>Delete et Backspace</TITLE> </HEAD> <BODY> <H1>5. <A NAME="s5"></A>Delete et Backspace</H1> <P> <A HREF="Keyboard-HOWTO.html#toc5">Contenu de cette section</A></P> <P></P> <P></P> <H2>5.1 <A NAME="ss5.1"></A> Comment choisir le caractère à utiliser pour effacer le dernier caractère tapé</H2> <P></P> <P> <BLOCKQUOTE><CODE> <PRE> % stty erase ^? </PRE> </CODE></BLOCKQUOTE> Si le caractère est effacé, mais d'une manière bizarre, c'est que les paramètres du terminal sont mauvais. Si <CODE>echoprt</CODE> est activé, les caractères effacés s'affichent entre <CODE>\</CODE> et <CODE>/</CODE>. Si <CODE>echoe</CODE> est désactivé, les caractères ne sont plus effacés à l'écran, mais leur effacement est signalé par l'affichage du caractère d'effacement, exemple: <CODE>Libux###nux</CODE> (avec # comme caractère d'effacement).</P> <P>On utilisera donc généralement <CODE>stty echoe -echoprt</CODE>. La commande <CODE>stty sane</CODE> activera ces paramètres et bien d'autres. La commande <CODE>stty -a</CODE> affiche les paramètres actuels. Pourquoi ces paramètres ne sont pas activés par défaut ? Il suffit d'utiliser le bon <CODE>getty</CODE>.</P> <P>Il est à noter que beaucoup de programmes (comme <CODE>bash</CODE>, <CODE>emacs</CODE> etc.) ont leur propres assignations de touches (définis dans <CODE>~/.inputrc</CODE>, <CODE>~/.emacs</CODE>, etc.) et ne tiennent pas compte de ces paramètres de terminal.</P> <P></P> <H3>`Getty comprenait bien DEL et BS, mais plus maintenant ?'</H3> <P></P> <P>Jadis, la console traduisait DEL (<CODE>\177</CODE>) en BS Espace BS (<CODE>\010\040\010</CODE>).</P> <P>Les DEL sont désormais ignorés (comme le devrait toute émulation vt100 fidèle). Choisissez un meilleur getty, i.e., qui n'affiche pas les DEL.</P> <P></P> <H3>`Login ne fait pas la même chose au premier et au deuxième essai?'</H3> <P></P> <P>Au premier essai, on parle à <CODE>getty</CODE>, au deuxième à <CODE>login</CODE>, deux programmes distincts qui peuvent se comporter différemment.</P> <P></P> <H2>5.2 <A NAME="ss5.2"></A> Comment dire à Linux quel code générer à l'appui sur une touche</H2> <P></P> <P>Quand on utilise la console, ou plus précisément, quand le clavier n'est pas en mode (medium)raw, il faut utiliser: <BLOCKQUOTE><CODE> <PRE> % loadkeys monclavier.map </PRE> </CODE></BLOCKQUOTE> Sous X, utiliser: <BLOCKQUOTE><CODE> <PRE> % xmodmap monclavier.xmap </PRE> </CODE></BLOCKQUOTE> Remarque: depuis XFree86-2.1, X initialise son clavier à partir de la configuration du clavier de la console. Bien que les deux systèmes ne soient pas 100% compatibles, cette technique rend généralement l'utilisation de <CODE>xmodmap</CODE> superflue.</P> <P>Si, par exemple, si vous voulez que la touche Backspace génère le code BackSpace (ˆH), au lieu du code par défaut (Delete), faites: <BLOCKQUOTE><CODE> <PRE> % loadkeys keycode 14 = BackSpace % </PRE> </CODE></BLOCKQUOTE> </P> <P></P> <H3>`Pourquoi la touche BackSpace ne génère pas BackSpace par défaut ?'</H3> <P></P> <P>(i) Parce que les terminaux VT100 ont une touche Delete au dessus de la touche Entrée.</P> <P>(ii) Parce que Linus en a décidé ainsi.</P> <P></P> <H2>5.3 <A NAME="ss5.3"></A> Comment dire à X d'échanger Delete et Backspace</H2> <P></P> <P> <BLOCKQUOTE><CODE> <PRE> % xmodmap -e "keysym BackSpace = Delete" -e "keysym Delete = BackSpace" </PRE> </CODE></BLOCKQUOTE> Ou, si vous voulez juste que Backspace génère le code BackSpace: <BLOCKQUOTE><CODE> <PRE> % xmodmap -e "keycode 22 = BackSpace" </PRE> </CODE></BLOCKQUOTE> Ou, si vous voulez juste que Delete génère le code Delete: <BLOCKQUOTE><CODE> <PRE> % xmodmap -e "keycode 107 = Delete" </PRE> </CODE></BLOCKQUOTE> (mais généralement c'est déjà la disposition par défaut).</P> <P></P> <H2>5.4 <A NAME="ss5.4"></A> Comment dire à emacs ce qu'il doit faire des codes Delete et Backspace</H2> <P></P> <P>Mettez dans votre <CODE>.emacs</CODE> les lignes: <BLOCKQUOTE><CODE> <PRE> (global-set-key "\?" 'delete-backward-char) (global-set-key "\C-h" 'help-command) </PRE> </CODE></BLOCKQUOTE> Bien sûr, vous pouvez associer d'autres commandes à d'autres touches de la même manière.</P> <P></P> <H2>5.5 <A NAME="ss5.5"></A> Comment dire à emacs de permuter Delete et Backspace</H2> <P></P> <P>Mettez dans votre <CODE>.emacs</CODE> les lignes: <BLOCKQUOTE><CODE> <PRE> (setq keyboard-translate-table (make-string 128 0)) (let ((i 0)) (while (< i 128) (aset keyboard-translate-table i i) (setq i (1+ i)))) (aset keyboard-translate-table ?\b ?\^?) (aset keyboard-translate-table ?\^? ?\b) </PRE> </CODE></BLOCKQUOTE> </P> <P></P> <H2>5.6 <A NAME="ss5.6"></A> Comment dire à kermit d'échanger Delete et Backspace</H2> <P></P> <P>Mettez dans votre <CODE>.kermrc</CODE> les lignes: <BLOCKQUOTE><CODE> <PRE> set key \127 \8 set key \8 \127 </PRE> </CODE></BLOCKQUOTE> </P> <P></P> <H2>5.7 <A NAME="ss5.7"></A> Comment régler xterm selon vos modes de terminal préférés</H2> <P></P> <P>Normalement xterm hérite des modes de terminal du processus qui l'appelle. Pour <CODE>xdm</CODE>, les caractères erase et kill sont <CODE>#</CODE> et <CODE>@</CODE>, comme sur les bons vieux Unix Version 6. Si ça ne vous plaît pas, vous pouvez mettre <BLOCKQUOTE><CODE> <PRE> XTerm*ttymodes: erase ^? kill ^U intr ^C quit ^\ eof ^D susp ^Z start ^Q stop ^S eol ^@ </PRE> </CODE></BLOCKQUOTE> dans <CODE>/usr/lib/X11/app-defaults/XTerm</CODE> ou dans <CODE>$HOME/.Xresources</CODE>, à condition d'exécuter la commande <BLOCKQUOTE><CODE> <PRE> xrdb $HOME/.Xresources </PRE> </CODE></BLOCKQUOTE> dans votre <CODE>$HOME/.xinitrc</CODE>.</P> <P></P> <H2>5.8 <A NAME="ss5.8"></A> Comment dire à xmosaic que la touche Backspace génère une DEL</H2> <P></P> <P>Mettre <BLOCKQUOTE><CODE> <PRE> *XmText.translations: #override\n\ <Key>osfDelete: delete-previous-character() *XmTextField.translations: #override\n\ <Key>osfDelete: delete-previous-character() </PRE> </CODE></BLOCKQUOTE> dans votre <CODE>$HOME/.Xresources</CODE> devrait faire l'affaire.</P> <P>Cependant, la FAQ de netscape dit: <PRE> Pourquoi ma touche Backspace ne marche pas dans les boites texte ? Par defaut, Linux et XFree86 ont leur touches Backspace et Delete mal configurees. Tous les programmes Motif (y compris Netscape Navigator) auront les memes problemes. Les specifications Motif disent que Backspace doit effacer le caractere precedent et Delete le caractere suivant. Par defaut sous Linux et XFree86 Backspace et Delete generent le code DEL. Le probleme peut etre resolu en utilisant un programme tel que xmodmap, xkeycaps, ou loadkeys pour que la touche Backspace genere le code BackSpace au lieu de Delete. Une autre solution consiste a avoir un fichier .motifbind; voir la page de manuel de VirtualBindings(3). Note: n'utilisez pas les ressources *XmText.translations ou *XmTextField.translations pour essayer de resoudre ce probleme. Si vous le faites, vous annulez toutes les autres programmations de touches dans les boites textes de Netscape Navigator. </PRE> </P> <P></P> <H2>5.9 <A NAME="ss5.9"></A> Et les fichier termcap et terminfo?</H2> <P></P> <P>Les gens qui ont des problèmes avec backspace ont tendance à aller voir dans leur fichier termcap (ou terminfo), et effectivement la ressource <CODE>kb</CODE> (ou <CODE>kbs</CODE>) décrit le code généré par la touche Backspace. Cependant peu de programmes utilisent ces bases de données pour rechercher le code envoyé par backspace, donc, à moins de n'avoir des problèmes qu'avec certains programmes, il faut en général chercher ailleurs. Cela dit, il vaut mieux de toute façon avoir un termcap (ou terminfo) correct. Voir aussi "La variable TERM" plus loin.</P> <P></P> <HR> <P> Chapitre <A HREF="Keyboard-HOWTO-6.html">suivant</A>, Chapitre <A HREF="Keyboard-HOWTO-4.html">Précédent</A> <P> Table des matières de <A HREF="Keyboard-HOWTO.html#toc5">ce chapitre</A>, <A HREF="Keyboard-HOWTO.html#toc">Table des matières</A> générale</P> <P> <A HREF="Keyboard-HOWTO.html">Début</A> du document, <A HREF="#0"> Début de ce chapitre</A></P> </BODY> </HTML>