PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : wieder mal curses und getch



lokicall
02-07-2007, 19:49
Hallo,

ich hab ein Programm geschrieben, welche getch benutzt um die Tasten abzufragen für ein Menue.
Für ein Abbruch habe ich die ESCAPE Taste definiert(da der Wert meines Wissens nirgends festgelegt wurde) hab ich den Standardcode 27 benutzt.

Nun warum muss ich um das Menue zu verlassen muss ich 2mal schnell hintereinander ESCAPE drücken, damit es funktioniert. Langsam einmal drücken hat keine Wirkung.





int ch;
#define ESCAPE 27

...
initscr();
curs_set(); /*funktioniert auch nicht*/
noecho();
raw();
keypad(stdsrc,TRUE);
...
while((ch=getch())!=ESCAPE) {
switch(ch) {
case KEY_UP:
printw("KEY UP");
break;
case KEY_DOWN:
printw("KEY DOWN");
break;
case KEY_LEFT:
printw("KEY LEFT");
break;
case KEY_RIGHT:
printw("KEY RIGHT");
break;
case KEY_PPAGE:
printw("KEY PAGEUP");
break;
case KEY_NPAGE:
printw("KEY PAGEDOWN");
break;
case 'q': case 'Q':
return EXIT_SUCCESS;
default:
printw("Falsche Taste");
break;
}
}

Als Betriebssystem NetBSD 4.0beta(auch auf 3.1 getestet).ncurses-5.5nb1

rgubatz
03-07-2007, 07:01
weil dein Terminal nach dem drücken der ESC-Taste eine ESC-Sequenz erwartet. Erst das 2. ESC wird an dein Programm weitergegeben.
Nimm einfach eine andere Tastenbelegung ('q'), dann funktioniert es.