tastencode der normalen Tasten in C unter Linux
-
Hallo
trotz Suche über Google und hier im Archiv, finde ich es nicht:
ich schreibe ein C-Programm, wo ich auf eine Tastatureingabe warte und jedes Zeichen einzeln sammle. Mir fehlt der Tastaturcode unter Linux.
Vor allem für <Enter> und <ESC>, Pfeil nach oben, Pfeil nach unten, Bild nach oben und Bild nach unten aber auch die normalen zahlen und Buchstaben, ohne Umlaute. Kann mir jemand helfen?In manchen Foren finden ich etwas von VK_DOWN und VK_UP. es sind aber Konstanten, sind sie immer in Linux bekannt?
Vielen Dank für Eure Hilfe
frenchcancan
-
frenchcancan schrieb:
Vor allem für <Enter> und <ESC>, Pfeil nach oben, Pfeil nach unten, Bild nach oben und Bild nach unten aber auch die normalen zahlen und Buchstaben, ohne Umlaute. Kann mir jemand helfen?
Wenn dich das interessiert, könntest du in den Quelltext von ncurses schauen, da müsste das drin vorkommen. Außerdem schau mal unter dem Stichwort: ANSI Escape Squenzen.
frenchcancan schrieb:
In manchen Foren finden ich etwas von VK_DOWN und VK_UP. es sind aber Konstanten, sind sie immer in Linux bekannt?
Nein. Das sind Konstanten aus der SDL und haben mit Linux direkt nichts zu tun.
-
Ich finde einige Einträge mit dem Stichwort ncurses aber keine Tabelle aus der ich die üblichen Tasten einlesen kann.
Wo finde ich diesen Quelltext?Ich will nichts ausgeben, sondern einlesen
von einem alten Programm in C hatte ich folgende Auflistung:#define HOCH 24 #define RUNTER 25 #define RECHTS 26 #define LINKS 27 #define ENTER 13 #define BACKSPACE 127 #define DEL 127 #define HELP 124 #define ESC 123 und die zahlen waren hat mit switch (Taste) { case '1': oder case 48 case '2'... }
aber ich weiß eben nichts für Enter und ESC.
Für Die Funktionstasten braucht man glaube ich 2 Lesevorgänge.Gilt es auch unter Linux?
Danke für die Hilfefrenchcancan
-
frenchcancan schrieb:
Ich finde einige Einträge mit dem Stichwort ncurses aber keine Tabelle aus der ich die üblichen Tasten einlesen kann.
Wo finde ich diesen Quelltext?http://www.gnu.org/software/ncurses/ncurses.html
Man muss nur mal ncurses in eine Suchmaschiene eingeben.Empfehlung von mir: Mach, was auch immer du vor hast, mit ncurses oder du wirst nicht darum herum kommen, dir Terminal Codierungen anzusehen.
Zu den Escape-Sequenzen: Du musst ja erstmal dem Terminal mitteilen, dass es dir solche Tastendrücke überhaupt schicken soll.
-
Lies doch in deinem Programm den Tastencode ein und vor dem Vergleich, was es nun für eine Taste ist, gib den Code aus (den du dann in deinem Programm verwenden kannst...)
Wie ließt du die Tasten denn überhaupt ein?
Meiner Meinung nach gibt es nämlich keinen Standard-Header, der entsprechende Macros enthält, lass mich aber gerne vom Gegenteil überzeugen.
-
Ich bekomme ich bei Taste:
1->49
a->97 etc...
Enter->10Aber bei backspace oder Pfeil nach oben, etc... bekomme ich immer 27.
Ich glaube es gibt 2 Zeichen im tastaturpuffer bei diesen Tasten?Ist es so?
frenchcancan
-
Mit folgendem Programm:
#include <termios.h> #include <stdio.h> int main() { int ch; struct termios neu, alt; tcgetattr(fileno(stdin), &alt); neu = alt; neu.c_lflag &= ~(ICANON|ECHO); tcsetattr(fileno(stdin), TCSANOW, &neu); while ((ch = getchar()) != EOF) printf("Key %d\n", ch); tcsetattr(fileno(stdin), TCSANOW, &alt); return 0; }
Bekomm ich für die Pfeiltasten immer das Tripel 27+91+(65...68)
War doch nicht so schwer!?
-
ich hatte es jetzt so gelöst: (ist aber nicht so elegant, aber funktioniert):
ich habe gemerkt, dass im tatsutpuffer Folgendes liegt:
/* Tastencode un ESC Sequenzen*/
ENTER: 10 32 32 32
ESC: 27 -1 -1 -1
BILDAUF: 27 91 53 126
BILDAB: 27 91 54 126
PFEILOBEN: 27 91 65 126
PFEILUNTEN:27 91 66 126
TAB: 9 32 32 32
BACKSPACE: 8 32 32 32if (kbhit()) { int tastencode1,tastencode2, tastencode3, tastencode4; tastencode1 = getchar(); tastencode2 = getchar(); tastencode3 = getchar(); tastencode4 = getchar(); switch(tastencode1) { case 10: // ENTER aktion = EINGEBEN; break; default: /* wenn der erste Tastencode 27 ist, ist der dritte byte die eigentliche taste. Zum beispiel ESC->27 -1 Bildauf-> 53 Bild ab: */ switch (tastencode3) { case -1: //ESC aktion = 0; ende = 1; break; case 53: // Bildauf springen zum vorigen Bereich aktion = VORIGERBEREICH; break; case 54: // Bildab springen zum nächsten Bereich aktion = NAECHSTERBEREICH; break; case 65: aktion = VORIGEZEILE; break; case 66: // Pfeil unten aktion = NAECHSTEZEILE; break; default: aktion = 0; break; } break; } }
kbhit ist eine Funktion, die schon beim ersten Tastendruck den tastaturpuffer zurückgibt, ohne auf ENTER zu warten.
Aber vielen Dank, deine werde ich auch gut gebrauchen können!
frenchcancan