nano

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

commit 435d9acb5ca455e3f085484242a9a3065c61a658
parent 12fe0a3b29df6335f77c0ca8760b912ff43d9515
Author: Benno Schulenberg <bensberg@telfort.nl>
Date:   Sat,  8 Aug 2020 20:00:15 +0200

tweaks: exclude old and mistaken "Esc O" sequences from the tiny version

The correct sequences begin with "Esc [" instead.  I cannot find in the
histories of VTE and Gnome Terminal when these sequences were corrected.

Also exclude a bug check from the tiny version.

Diffstat:
Msrc/winio.c | 26+++++++++++++++-----------
1 file changed, 15 insertions(+), 11 deletions(-)

diff --git a/src/winio.c b/src/winio.c @@ -332,35 +332,37 @@ 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; switch (seq[2]) { case '2': - switch (seq[3]) { - case 'A': /* Esc O 1 ; 2 A == Shift-Up on Terminal. */ - case 'B': /* Esc O 1 ; 2 B == Shift-Down on Terminal. */ - case 'C': /* Esc O 1 ; 2 C == Shift-Right on Terminal. */ - case 'D': /* Esc O 1 ; 2 D == Shift-Left on Terminal. */ - shift_held = TRUE; - return arrow_from_ABCD(seq[3]); + if ('A' <= seq[3] && seq[3] <= 'D') { + /* Esc O 1 ; 2 A == Shift-Up on old Terminal. */ + /* Esc O 1 ; 2 B == Shift-Down on old Terminal. */ + /* Esc O 1 ; 2 C == Shift-Right on old Terminal. */ + /* Esc O 1 ; 2 D == Shift-Left on old Terminal. */ + shift_held = TRUE; + return arrow_from_ABCD(seq[3]); } break; case '5': switch (seq[3]) { - case 'A': /* Esc O 1 ; 5 A == Ctrl-Up on Terminal. */ + case 'A': /* Esc O 1 ; 5 A == Ctrl-Up on old Terminal. */ return CONTROL_UP; - case 'B': /* Esc O 1 ; 5 B == Ctrl-Down on Terminal. */ + case 'B': /* Esc O 1 ; 5 B == Ctrl-Down on old Terminal. */ return CONTROL_DOWN; - case 'C': /* Esc O 1 ; 5 C == Ctrl-Right on Terminal. */ + case 'C': /* Esc O 1 ; 5 C == Ctrl-Right on old Terminal. */ return CONTROL_RIGHT; - case 'D': /* Esc O 1 ; 5 D == Ctrl-Left on Terminal. */ + case 'D': /* Esc O 1 ; 5 D == Ctrl-Left on old Terminal. */ return CONTROL_LEFT; } break; } } break; +#endif case '2': /* Shift */ case '3': /* Alt */ case '4': /* Shift+Alt */ @@ -826,8 +828,10 @@ int parse_escape_sequence(int starter) keycode = convert_SS3_sequence(sequence, length, &consumed); else if (starter == '[') keycode = convert_CSI_sequence(sequence, length, &consumed); +#ifndef NANO_TINY else die("Bad sequence starter -- please report a bug\n"); +#endif /* If not all grabbed integers were consumed, put the leftovers back. */ for (int i = length - 1; i >= consumed; i--)