input: ignore any <Escape>s before a valid command keystroke
Just like an <Esc> before a Ctrl+letter keystroke is ignored, an <Esc> before an Alt+letter keystroke should be ignored too -- it should not be interpreted as if the user had typed <Esc> <Esc> letter. This fixes https://savannah.gnu.org/bugs/?54301.master
parent
ab0897072a
commit
ecc9211afc
21
src/winio.c
21
src/winio.c
|
@ -385,7 +385,7 @@ int parse_kbinput(WINDOW *win)
|
|||
if (escapes > 3)
|
||||
escapes = 1;
|
||||
/* Take note when an Esc arrived by itself. */
|
||||
solitary = (escapes == 1 && key_buffer_len == 0);
|
||||
solitary = (key_buffer_len == 0);
|
||||
return ERR;
|
||||
}
|
||||
|
||||
|
@ -476,12 +476,13 @@ int parse_kbinput(WINDOW *win)
|
|||
}
|
||||
} else {
|
||||
if (digit_count == 0)
|
||||
/* Two escapes followed by a non-decimal
|
||||
* digit (or a decimal digit that would
|
||||
* create a byte sequence greater than 2XX)
|
||||
* and there aren't any other codes waiting:
|
||||
* control character sequence mode. */
|
||||
retval = get_control_kbinput(keycode);
|
||||
/* Two escapes followed by a non-digit: meta key
|
||||
* or control character sequence mode. */
|
||||
if (!solitary) {
|
||||
meta_key = TRUE;
|
||||
retval = keycode;
|
||||
} else
|
||||
retval = get_control_kbinput(keycode);
|
||||
else {
|
||||
/* An invalid digit in the middle of a byte
|
||||
* sequence: reset the byte sequence counter
|
||||
|
@ -505,11 +506,13 @@ int parse_kbinput(WINDOW *win)
|
|||
}
|
||||
break;
|
||||
case 3:
|
||||
if (key_buffer_len == 0)
|
||||
if (key_buffer_len == 0) {
|
||||
if (!solitary)
|
||||
meta_key = TRUE;
|
||||
/* Three escapes followed by a non-escape, and no
|
||||
* other codes are waiting: normal input mode. */
|
||||
retval = keycode;
|
||||
else
|
||||
} else
|
||||
/* Three escapes followed by a non-escape, and more
|
||||
* codes are waiting: combined control character and
|
||||
* escape sequence mode. First interpret the escape
|
||||
|
|
Loading…
Reference in New Issue