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.
Lesezeichen