2009-07-25 20 views
15

Nel tentativo di ottenere l'input dai tasti freccia tramite curses (ncurses) non prenderà come KEY_UP ecc. Ho usato la funzione della tastiera con un argomento vero ma getch restituisce ancora una sequenza di escape. Come setacciare i valori restituiti da getch() e afferrare i tasti freccia in modo specifico?Maledizioni che ottengono i tasti freccia

risposta

13

ero la memorizzazione getch() chiamate come char, quando avrebbero dovuto essere Int di. Funziona perfettamente dopo l'interruttore.

5

I terminali standard (tipo VT100) inviano una sequenza di caratteri quando si premono i tasti freccia. Devi solo tenere traccia di se questi sono premuti in sequenza. Qui sono del char da guardare per:

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

Ci sono codici di escape si poteva entrare come combinazione di tasti o una sequenza usando ctrl per questi? –

+0

Nessuna necessità; puoi digitarli direttamente 0x1B = esc, 0x5B = [, e 0x41 - 0x44 = A - D. Digitare esc [D nel terminale e il cursore si sposta a sinistra. –

+12

Questo approccio sconfigge completamente l'intero scopo di lavorare con la libreria curses in primo luogo :-) –

11

ho trovato lo stesso problema su Mac OS X. Ma è stato risolto aggiungendo il seguente:

keypad(stdscr, TRUE); 
+2

Tuttavia, l'OP ha dichiarato che questo non ha funzionato per lui. – augurar

Problemi correlati