From d2869ab348005b06f97ca7eaddd3c829257bcb68 Mon Sep 17 00:00:00 2001 From: Benno Schulenberg Date: Thu, 1 Oct 2020 14:01:36 +0200 Subject: [PATCH] build: include some raw sequences for the graphical Debian installer The terminal window in the graphical Debian installer (the default) produces the same escape sequences as xterm for F1 to F4. Though TERM is set to xterm, the xterm terminfo data is not available, so ncurses is unable to translate the sequences for us. :| Therefore, recognize the relevant raw escape sequences. Also, eat all bytes of the non-recognized modified function and arrow keys, so that they do not enter junk into the buffer. --- src/winio.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/winio.c b/src/winio.c index 4da9b9ed..1efbef23 100644 --- a/src/winio.c +++ b/src/winio.c @@ -325,10 +325,10 @@ int arrow_from_ABCD(int letter) int convert_SS3_sequence(const int *seq, size_t length, int *consumed) { switch (seq[0]) { -#ifndef NANO_TINY case '1': if (length > 3 && seq[1] == ';') { *consumed = 4; +#ifndef NANO_TINY switch (seq[2]) { case '2': if ('A' <= seq[3] && seq[3] <= 'D') { @@ -353,9 +353,9 @@ int convert_SS3_sequence(const int *seq, size_t length, int *consumed) } break; } +#endif } break; -#endif case '2': /* Shift */ case '3': /* Alt */ case '4': /* Shift+Alt */ @@ -391,18 +391,21 @@ int convert_SS3_sequence(const int *seq, size_t length, int *consumed) case 'C': /* Esc O C == Right on VT100/VT320. */ case 'D': /* Esc O D == Left on VT100/VT320. */ return arrow_from_ABCD(seq[0]); +#ifndef NANO_TINY case 'F': /* Esc O F == End on old xterm. */ return KEY_END; case 'H': /* Esc O H == Home on old xterm. */ return KEY_HOME; -#ifndef NANO_TINY case 'M': /* Esc O M == Enter on numeric keypad * with NumLock off on VT100/VT220/VT320. */ return KEY_ENTER; +#endif case 'P': /* Esc O P == F1 on VT100/VT220/VT320/xterm/Mach console. */ case 'Q': /* Esc O Q == F2 on VT100/VT220/VT320/xterm/Mach console. */ case 'R': /* Esc O R == F3 on VT100/VT220/VT320/xterm/Mach console. */ case 'S': /* Esc O S == F4 on VT100/VT220/VT320/xterm/Mach console. */ + return KEY_F(seq[0] - 'O'); +#ifndef NANO_TINY case 'T': /* Esc O T == F5 on Mach console. */ case 'U': /* Esc O U == F6 on Mach console. */ case 'V': /* Esc O V == F7 on Mach console. */ @@ -477,19 +480,18 @@ int convert_CSI_sequence(const int *seq, size_t length, int *consumed) case '2': /* Esc [ 1 2 ~ == F2 on rxvt/Eterm. */ case '3': /* Esc [ 1 3 ~ == F3 on rxvt/Eterm. */ case '4': /* Esc [ 1 4 ~ == F4 on rxvt/Eterm. */ +#endif case '5': /* Esc [ 1 5 ~ == F5 on xterm/rxvt/Eterm. */ return KEY_F(seq[1] - '0'); -#endif case '7': /* Esc [ 1 7 ~ == F6 on VT220/VT320/ * Linux console/xterm/rxvt/Eterm. */ case '8': /* Esc [ 1 8 ~ == F7 on the same. */ case '9': /* Esc [ 1 9 ~ == F8 on the same. */ return KEY_F(seq[1] - '1'); } - } -#ifndef NANO_TINY - else if (length > 3 && seq[1] == ';') { + } else if (length > 3 && seq[1] == ';') { *consumed = 4; +#ifndef NANO_TINY switch (seq[2]) { case '2': switch (seq[3]) { @@ -565,10 +567,10 @@ int convert_CSI_sequence(const int *seq, size_t length, int *consumed) } break; } +#endif /* !NANO-TINY */ } else if (length > 4 && seq[2] == ';' && seq[4] == '~') /* Esc [ 1 n ; 2 ~ == F17...F20 on some terminals. */ *consumed = 5; -#endif /* !NANO-TINY */ #ifdef USE_SLANG else if (length == 3 && seq[2] == ';') /* Discard broken sequences that Slang produces. */