top: avoid potential xterm state corruption
To support the cursor navigation keys, after saving the termios structure top issues 'smkx/keypad_xmit' during startup. However, some terminals appear to treat that directive as persistent which leaves a corrupted tty state after top exit. This commit reverses the above terminal directive via 'rmkx/keypad_local' just prior to restoring the saved termios structure at program end. For discovering this bug, and providing the 'rmkx' clue to its solution, thanks to: Kirill A. Shutemov <kirill@shutemov.name> Signed-off-by: Jim Warner <james.warner@comcast.net>
This commit is contained in:
parent
bb6cc9c159
commit
edd8aae5ba
@ -312,6 +312,7 @@ static const char *tg2 (int x, int y) {
|
|||||||
static void bye_bye (const char *str) NORETURN;
|
static void bye_bye (const char *str) NORETURN;
|
||||||
static void bye_bye (const char *str) {
|
static void bye_bye (const char *str) {
|
||||||
if (Ttychanged) {
|
if (Ttychanged) {
|
||||||
|
if (keypad_local) putp(keypad_local);
|
||||||
tcsetattr(STDIN_FILENO, TCSAFLUSH, &Tty_original);
|
tcsetattr(STDIN_FILENO, TCSAFLUSH, &Tty_original);
|
||||||
putp(tg2(0, Screen_rows));
|
putp(tg2(0, Screen_rows));
|
||||||
putp(Cap_curs_norm);
|
putp(Cap_curs_norm);
|
||||||
@ -923,6 +924,7 @@ static int keyin (int init) {
|
|||||||
STRLCPY(buf15, fmtmk("\033%s", tOk(key_left)));
|
STRLCPY(buf15, fmtmk("\033%s", tOk(key_left)));
|
||||||
// next is critical so returned results match bound terminfo keys
|
// next is critical so returned results match bound terminfo keys
|
||||||
putp(tOk(keypad_xmit));
|
putp(tOk(keypad_xmit));
|
||||||
|
// ( see the converse keypad_local at program end, just in case )
|
||||||
return 0;
|
return 0;
|
||||||
#undef tOk
|
#undef tOk
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user