2010-11-22 8 views
3

Sie fragten, wie Tasten wie F11 oder insand getchr erfassen nichts für diese Tasten zurückkehren, und es gibt nichts, was ich finden kann, dass akzeptiert roh Eingabe von Eingabeereignissen arbeiten ..Getch gibt -1 zurück?

ich jetzt versuche ncurses/Flüche in einem C++ - Programm, um diese Schlüssel zu erfassen.

Mein Programm Test ist einfach, es ist im Grunde:

#include <stdlib.h> 
#include <stdio.h> 
#include <curses.h> 
int main() { 
    int car; 
    while(c != '\b') { 
     c = getch(); 
     printf("%i", c); 
    } 
    return 0; 
} 

Ich benutze es natürlich das gleiche wie ein andere getch() Funktion, aber es gibt -1 unendlich mal .. ich einen aktuellen Kernel verwenden in Arch linux, in einem Standard-Terminal (getestet in xterm auch)

Gibt es einen bestimmten Schalter muss ich einschalten, um diese getch() in den Bibliotheken zu verwenden?

Antwort

7

Sie müssen initscr(); anrufen, um Flüche vor dem Aufruf getch() zu initialisieren.

Darüber hinaus möchten Sie wahrscheinlich nicht-line-gepufferten Modus, so sollten Sie auch cbreak(); noecho(); aufrufen (Echo-Modus sollte nicht mit Cbreak-Modus verwendet werden).

+0

Ich bin kein Fluchsexperte, aber es scheint, dass Sie auch 'keypad (stdscr, TRUE);' 'nennen möchten, so dass ncurses spezielle Tasten Escape-Sequenzen übersetzen und von' getch() 'die bequemen Werte zurückgeben kann * KEY_ * Makros. z.B. 'if (getch() == KEY_F0 + 11) {/ * f11 gedrückt * /}' –

+0

Vielen Dank. Meine FN-Tasten funktionieren unter Linux aus irgendeinem Grund nicht, deshalb kann ich sie nicht testen, aber es funktioniert auf seltsamen wie einfügen und whatnot .. Ich hoffe, ich muss keine rohe Tastatureingabe vom Kernel zuordnen, um diese Fn + zu bekommen Ins Schlüssel und Zeug, um Pause zu bekommen: \ – John

Verwandte Themen