Le Thursday 22 November, Patrick Dupre LCMI a écrit :
> En Rehat 7.2, dans un fenetre gnome-terminal, j'ai une application C qui
> utilise la fenetre d'ou est lancee l'application pour notamment lire
> des donnees:
> printf puis gets
> Dans ce contexte, la touche del ou supprime, ne permettent pas de
> modifier des characteres saisis, ^H ou [[3~ sont simplement affiches et
> pas executes. Est-ce l'on peut remedier a ce probleme qui est apparu
> avec la RH6. Sur un terminal non graphique tout se passe normalement.
C'est l'e^?éternel problème du BS ou DEL sous Unix... La touche
backspace peut envoyer au choix les caractères ascii BS ou DEL. BS me
semble plus logique, mais à en juger par ma Mandrake, il semble que DEL
soit plus canonique sous Linux. Ton problème vient du fait que ton
terminal envoie BS et le pilote attend DEL. Il faut choisir.
Si tu choisis BS :
Il faut que tu expliques à ton pilote de terminal que BS sert à
effacer le dernier caractère entré. Tu fais « stty erase ^H »
(oui, un ^ suivi d'un H).
Si tu choisis DEL :
Il faut que tu expliques à ton terminal qu'il doit envoyer un DEL
quand tu appuies sur la touche backspace. Il faudrait que tu regardes
dans la doc de gnome-terminal pour ça.
Dans tous les cas, avec gets() les possibilités d'édition de la ligne
que tu tapes sont minimales. Du genre backspace pour effacer le dernier
caractère, Control-W pour effacer le dernier mot et Control-U pour
effacer toute la ligne. Cf. stty -a. C'est tout ce que permet le pilote
de terminal du noyau. Pas de touches du curseur, Home, End, Delete et
cie. Si tu veux tout ça essaye readline() au lieu de gets().
--
Edgar Bonet Tel : +33 476 881 096
Laboratoire Louis Néel -- CNRS Mobile : +33 663 384 906
25 av. des Martyrs, BP 166 Fax : +33 476 881 191
38042 Grenoble cedex 9, France e-mail : bonet@???