nano

nano with my custom patches
git clone git://bsandro.tech/nano
Log | Files | Refs | README | LICENSE

commit 4dcbd40c49532842ce25918f5335573eeb8c0327
parent 72645b160d30453a8bffe028460f2e2a2ac22620
Author: Benno Schulenberg <bensberg@telfort.nl>
Date:   Thu, 26 Dec 2019 13:53:48 +0100

input: consume and ignore the raw escape sequences for F17 to F24

When --rawsequences is used, consume the full escape sequences for
the F17 to F24 function keys (on xterm-compatible terminals and on
the Linux console), to prevent them entering junk into the buffer.

This fixes https://savannah.gnu.org/bugs/?57483.

Diffstat:
Msrc/winio.c | 12++++++++++--
1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/src/winio.c b/src/winio.c @@ -1068,7 +1068,9 @@ int convert_sequence(const int *seq, size_t length, int *consumed) #endif } /* ->->->->->->-> */ - } + } else if (length > 5 && seq[3] == ';' && seq[5] == '~') + /* Esc [ 1 n ; 2 ~ == F17...F20 on some terminals. */ + *consumed = 6; break; case '2': if (length > 3 && seq[3] == '~') { @@ -1100,6 +1102,9 @@ int convert_sequence(const int *seq, size_t length, int *consumed) else if (length > 4 && seq[2] == ';' && seq[4] == '~') /* Esc [ 2 ; x ~ == modified Insert on xterm. */ *consumed = 5; + else if (length > 5 && seq[3] == ';' && seq[5] == '~') + /* Esc [ 2 n ; 2 ~ == F21...F24 on some terminals. */ + *consumed = 6; break; case '3': /* Esc [ 3 ~ == Delete on VT220/VT320/ * Linux console/xterm/Terminal. */ @@ -1132,6 +1137,9 @@ int convert_sequence(const int *seq, size_t length, int *consumed) if (length > 2 && seq[2] == '@') /* Esc [ 3 @ == Ctrl-Shift-Delete on urxvt. */ return controlshiftdelete; + if (length > 3 && seq[3] == '~') + /* Esc [ 3 n ~ == F17...F20 on some terminals. */ + *consumed = 4; #endif break; case '4': /* Esc [ 4 ~ == End on VT220/VT320/ @@ -1321,7 +1329,7 @@ int parse_escape_sequence(WINDOW *win, int kbinput) * (the longest possible escape sequence) from the keybuffer and * translate the sequence into its corresponding keycode. */ put_back(kbinput); - length = (key_buffer_len < 5 ? key_buffer_len : 5); + length = (key_buffer_len < 6 ? key_buffer_len : 6); sequence = get_input(NULL, length); retval = convert_sequence(sequence, length, &consumed);