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 Hilfe

    frenchcancan



  • 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->10

    Aber 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 32

    if (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


Anmelden zum Antworten