ncurses zur Außenschale und Rücken Messing mit Schlüsseln
Frage
Ich habe diese ncurses-Anwendung, die das Standardrezept tut für vorübergehend Abwurf von ncurses out, läuft eine externe Herausgeber / Schale / was auch immer, und dann zurück zu ncurses fallen, wenn es fertig ist.
Das ~ fast funktioniert, mit der Ausnahme, dass die ersten Drücken von Tasten, dass ncurses wird danach offensichtlich gefälscht sind; ncurses denkt ^ [und A gesehen jeweils, wenn ich zweimal Pfeil nach oben drücken.
Wer dieses Verhalten gesehen und weiß, was die Magie incant zu fix das ist? Wenn es irgendwelche hilft, ist dies die Ruby-ncurses Bibliothek.
Lösung
Nach rootling ein bisschen herum, fand ich eine Ladung culting Lösung: explizit Anruf Tastatur (1) nach der Shell auf stdscr raus. Ich habe keine Ahnung, warum das funktioniert, aber es funktioniert. Ich werde jemand andere Antwort als Ja markieren, wenn sie erklären, warum können. Die aktuelle Arbeits Theorie ist, dass Tastatur, eine Art internen Puffers berührt und löscht es.
Scratch, dass:
NCURSES_EXPORT(int) keypad(WINDOW *win, bool flag) { T((T_CALLED("keypad(%p,%d)"), win, flag)); if (win) { win->_use_keypad = flag; returnCode(_nc_keypad(SP, flag)); } else returnCode(ERR); }
Andere Tipps
Ja. Ohne Tastatur ncurses nicht Escape-Codes für Sie. Von der Tastatur-man-Seite:
The keypad option enables the keypad of the user's terminal. If en-
abled (bf is TRUE), the user can press a function key (such as an arrow
key) and wgetch returns a single value representing the function key,
as in KEY_LEFT. If disabled (bf is FALSE), curses does not treat func-
tion keys specially and the program has to interpret the escape se-
quences itself. If the keypad in the terminal can be turned on (made
to transmit) and off (made to work locally), turning on this option
causes the terminal keypad to be turned on when wgetch is called. The
default value for keypad is false.
Oft das erste, was ich in einem ncurses Programm tue Anruf Tastatur (stdscr, true) schöne Tastaturbelegung zu aktivieren.
Ich hoffe, das hilft.