% stty erase ^?
Si le caractère est effacé, mais d'une manière bizarre, c'est que les
paramètres du terminal sont mauvais. Si echoprt
est activé, les
caractères effacés s'affichent entre \
et /
.
Si echoe
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: Libux###nux
(avec # comme
caractère d'effacement).On utilisera donc généralement stty echoe -echoprt
. La commande
stty sane
activera ces paramètres et bien d'autres. La commande
stty -a
affiche les paramètres actuels. Pourquoi ces paramètres ne
sont pas activés par défaut ? Il suffit d'utiliser le bon getty
.
Il est à noter que beaucoup de programmes (comme bash
, emacs
etc.) ont leur propres assignations de touches (définis dans
~/.inputrc
, ~/.emacs
, etc.) et ne tiennent pas compte
de ces paramètres de terminal.
Jadis, la console traduisait DEL (\177
) en BS Espace BS
(\010\040\010
).
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.
Au premier essai, on parle à getty
, au deuxième à
login
, deux programmes distincts qui peuvent se comporter différemment.
Quand on utilise la console, ou plus précisément, quand le clavier n'est pas en mode (medium)raw, il faut utiliser:
% loadkeys monclavier.map
Sous X, utiliser:
% xmodmap monclavier.xmap
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 xmodmap
superflue.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:
% loadkeys
keycode 14 = BackSpace
%
(i) Parce que les terminaux VT100 ont une touche Delete au dessus de la touche Entrée.
(ii) Parce que Linus en a décidé ainsi.
% xmodmap -e "keysym BackSpace = Delete" -e "keysym Delete = BackSpace"
Ou, si vous voulez juste que Backspace génère le code BackSpace:
% xmodmap -e "keycode 22 = BackSpace"
Ou, si vous voulez juste que Delete génère le code Delete:
% xmodmap -e "keycode 107 = Delete"
(mais généralement c'est déjà la disposition par défaut).Mettez dans votre .emacs
les lignes:
(global-set-key "\?" 'delete-backward-char)
(global-set-key "\C-h" 'help-command)
Bien sûr, vous pouvez associer d'autres commandes à d'autres touches
de la même manière.Mettez dans votre .emacs
les lignes:
(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)
Mettez dans votre .kermrc
les lignes:
set key \127 \8
set key \8 \127
Normalement xterm hérite des modes de terminal du processus qui l'appelle.
Pour xdm
, les caractères erase et kill sont #
et @
,
comme sur les bons vieux Unix Version 6.
Si ça ne vous plaît pas, vous pouvez mettre
XTerm*ttymodes: erase ^? kill ^U intr ^C quit ^\ eof ^D susp ^Z start ^Q stop ^S eol ^@
dans /usr/lib/X11/app-defaults/XTerm
ou dans
$HOME/.Xresources
, à condition d'exécuter la commande
xrdb $HOME/.Xresources
dans votre $HOME/.xinitrc
.Mettre
*XmText.translations: #override\n\
<Key>osfDelete: delete-previous-character()
*XmTextField.translations: #override\n\
<Key>osfDelete: delete-previous-character()
dans votre $HOME/.Xresources
devrait faire l'affaire.Cependant, la FAQ de netscape dit:
Pourquoi ma touche Backspace ne marche pas dans les boites texte ? Par défaut, Linux et XFree86 ont leur touches Backspace et Delete mal configurées. Tous les programmes Motif (y compris Netscape Navigator) auront les mêmes problèmes. Les spécifications Motif disent que Backspace doit effacer le caractère précédent et Delete le caractère suivant. Par défaut sous Linux et XFree86 Backspace et Delete génèrent le code DEL. Le problème peut être résolu en utilisant un programme tel que xmodmap, xkeycaps, ou loadkeys pour que la touche Backspace génère le code BackSpace au lieu de Delete. Une autre solution consiste à 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 résoudre ce problème. Si vous le faites, vous annulez toutes les autres programmations de touches dans les boites textes de Netscape Navigator.
Les gens qui ont des problèmes avec backspace ont tendance à aller
voir dans leur fichier termcap (ou terminfo), et effectivement la
ressource kb
(ou kbs
) 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.