Pourquoi le terminal affiche “^[[A” “^[[B” “^[[C” “^[[D” en appuyant sur les touches fléchées dans Ubuntu?
J'ai écrit un petit programme en C Ansi sur Windows, et j'ai compilé sur Ubuntu avec le haut-GCC maintenant.
Le programme est simple:
- lire la ligne de la console avec
scanf()
. - Analyser la chaîne et calculer.
Mais quelque chose de bizarre se passe. Quand j'essaie de bouger le curseur, il imprime quatre personnages:
- appuyant sur Up imprime "
^[[A
" - appuyant sur Dn imprime "
^[[B
" - appuyant sur Rt imprime "
^[[C
" - appuyant sur Lt imprime "
^[[D
"
-
Comment cela peut-il être évité?
-
Pourquoi faut-il imprimer ces 4 caractères au lieu de déplacer le curseur?
- Les caractères spéciaux comme ^U et retour arrière marchera car le pilote de clavier poignées de ceux-ci. Mais la flèche comportement de la touche que vous avez l'habitude de est programmée dans le shell. Lorsque vous écrivez votre propre programme, vous devez gérer vous-même, ou vous pouvez installer
rlwrap
et d'exécuter le programme commerlwrap my_prog
et il fera ce que vous attendez. Les caractères que vous voyez sont les séquences d'échappement générés par ces touches. - Ce sont les traditionnelles séquences d'échappement ANSI qui représentent les touches du curseur. Voir stackoverflow.com/questions/4130048/...
Vous devez vous connecter pour publier un commentaire.
Parce que c'est ce que le clavier envoie à l'ordinateur (plus précisément, quel est le terminal imprime pour ce qu'il a effectivement reçu depuis le clavier).
bash
par exemple obtient ces valeurs, il le déchiffre et comprend que vous voulez déplacer, de sorte qu'il sera de déplacer le curseur (dans le cas de gauche/droite) ou de l'utilisation de son histoire, pour récupérer commandes précédentes (haut/bas). Si vous ne pouvez pas attendre de votre programme grâce à la magie de soutien touches fléchées.Cependant, la lecture de l'entrée standard du terminal prend déjà en charge les flèches gauche/droite (je crois, mais je ne suis pas sous Linux dès maintenant pour tester et assurez-vous). Donc, je pense qu'il y a un autre problème interférer. Une cause possible pourrait être que l'un de vos touches de modification est coincé? Peut-être, ALT, CTRL ou SUPER?
bash
détecte le modificateur et les ignore. Malheureusement, en ce moment je suis sous Windows, donc je ne peux pas vraiment dire. Juste pour être sûr, vous l'aide de la normalegnome-terminal
et n'ont pas modifié les paramètres, soit le terminal ou le clavier (dans Ubuntu paramètres)?gnome-terminal
sans paramètres. J'ai juste utilisé Ubuntu dans le deuxième jour. 😉vim
style mode plein écran. Il y a beaucoup de choses qui se passe, et je n'ai pas le temps maintenant de regarder les détails (c'est pourquoi je ne suis pas de poster une réponse moi-même). De toute façon, quand vous voyez^[[A
apparaissent sur l'écran, c'est la séquence d'échappement envoyés pour représenter la flèche vers le haut, et rien interprété comme tel.Pour ceux qui viennent de l'osx (mac) essayez de changer les coques de
bash
Terminal -> Preferences -> Shells open with -> [select] Command (complete path)
puis collez
/bin/bash
bash
.