nano

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

commit ecc9211afc2bdf6e240cedc1c23f55a537be17d9
parent ab0897072a237121105d924b56a3051790de55bc
Author: Benno Schulenberg <bensberg@telfort.nl>
Date:   Thu, 28 Jun 2018 11:52:17 +0200

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.

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

diff --git a/src/winio.c b/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