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:
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--)