2009-07-25 20 views
15

En essayant d'obtenir une entrée des touches fléchées via des curses (ncurses), elle ne sera pas saisie comme KEY_UP etc. J'ai utilisé la fonction clavier avec un vrai argument mais getch renvoie toujours une séquence échappée. Comment puis-je passer en revue les valeurs retournées par getch() et saisir les touches fléchées spécifiquement?Les flèches obtenant les touches fléchées

Répondre

13

Je stockait getch() appels comme de l'omble quand ils étaient censés être des années int. Fonctionne parfaitement après l'interrupteur.

5

Les terminaux standard (de type VT100) envoient une séquence de caractères lorsque les touches fléchées sont enfoncées. Vous devez juste garder une trace de si oui ou non ceux-ci sont pressés en séquence. Voici de l'omble chevalier à surveiller:

Down Arrow 0x1B 0x5B 0x42 
Left Arrow 0x1B 0x5B 0x44 
Right Arrow 0x1B 0x5B 0x43 
Up Arrow 0x1B 0x5B 0x41 
+1

Y at-il des codes d'échappement, vous pouvez entrer en une combinaison de touches ou d'une séquence en utilisant ctrl pour ces? –

+0

Pas besoin; vous pouvez les taper directement. 0x1B = esc, 0x5B = [, et 0x41 - 0x44 = A - D. Tapez esc [D dans votre terminal, et le curseur se déplace vers la gauche. –

+12

Cette approche défait à peu près entièrement l'objectif de travailler avec la bibliothèque de curses en premier lieu :-) –

11

J'ai trouvé le même problème sur Mac OS X. Mais il a été résolu en ajoutant ce qui suit:

keypad(stdscr, TRUE); 
+2

Cependant, l'OP a déclaré que cela n'a pas fonctionné pour lui. – augurar