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"

Pourquoi le terminal affiche “^[[A” “^[[B” “^[[C” “^[[D” en appuyant sur les touches fléchées dans Ubuntu?

  • 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 comme rlwrap 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/...
InformationsquelleAutor Kevin Dong | 2014-01-27