ncurses nutzt eine eigenes Terminal-Window mit eigener print-Funktion
mvaddstr
und mit einem ziemlichen Initialisierungs-Overhead
initscr();
raw();
noecho();
keypad(stdscr, TRUE);
und mit Eigenschaften, die std-printf()-Ausgaben "verzerren", so wird z.B. nach \n kein carriage return ausgeführt. Mehrmals einen string mit \n ausgeben lässt ihn daher mit Treppenstufen-Versatz in die nächste Zeile nach rechts rutschen, nicht untereinander ab Anfang jeder Zeile.
Außerdem kann ncurses - zumindest per Testcode - z.B. kein shift+F1 anzeigen. Von daher ist also einerseits nicht mehr standardconform, und zum anderen auch noch von sehr eingeschränktem Nutzungsumfang.
für ncurses hatte ich mal diesen testcode ausprobiert:
Code:#include <ncurses.h> int main( void ) { /* Initialize ncurses */ initscr(); const char *str; int ch; /* Switch of echoing and enable keypad */ raw(); noecho(); keypad(stdscr, TRUE); mvaddstr( LINES-1, 0, "Press keys, 'q' to quit" ); /* Loop until user hits 'q' to quit */ while( (ch = getch()) != 'q' ) { switch( ch ) { case KEY_F(1): str = "F1 key"; break; case KEY_F(2): str = "F2 key"; break; case KEY_F(3): str = "F3 key"; break; case KEY_F(4): str = "F4 key"; break; case 'a' ... 'z': str = "Lower case letter"; break; case 'A' ... 'Z': str = "Upper case letter"; break; case '0' ... '9': str = "Digit"; break; case KEY_UP: str = "KEY_UP"; break; case KEY_DOWN: str = "KEY_DOWN"; break; case KEY_LEFT: str = "KEY_LEFT"; break; case KEY_RIGHT: str = "KEY_RIGHT"; break; case KEY_HOME: str = "KEY_HOME"; break; case KEY_END: str = "KEY_END"; } //mvaddstr( LINES-1, 0, str ); printf("%s\n", str); clrtoeol(); } /* Clean up after ourselves */ endwin(); return 0; }
Einen (wünschenswerten) Pseudocode hatte ich ja bereits selber skizziert, zu Erläuterungszwecken.
Was ich aber jetzt brauche, ist kein Pseudocode, sondern echten Code, zusammen mit einer Liste aller möglichen denkbaren modifier-Kombis, damit man nicht das Rad neu erfinden muss.
**arrrgs** und schon wieder keine Code Tags hier vorhanden...Code:key plain shift ctrl alt shift+ctrl ctrl+alt shift+alt shift+ctrl+alt Home Insert Delete End Pgup PgDn F1 F2 F3 ... cur_up cur_dn cur_left cur_right ... A B C ...
"Das Rad nicht neu erfinden" gilt übrigens auch für meine gesuchte Funktion, ich denke, das müsste es nach 40 Jahren UNIX/Linux sicher schon längst geben.
- - - Aktualisiert - - -
pps,
für BIOS/MSDOS etc gabs das ja, gelistet z.B. hier
http://flint.cs.yale.edu/cs422/doc/a...pdf/APNDXC.PDF
(Appendices Page 1353)
so etwas bräuchte ich nun für Linux als Art "getscancode()" etc.







Zitieren

Lesezeichen