From: memeplex Date: Sat, 19 Oct 2019 03:13:15 +0000 (-0300) Subject: Replay key if kboard is interrupted while initializing (Bug#37782) X-Git-Tag: emacs-27.0.90~888 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=e3cebbb839fc94f314659bf667c6790edebf4297;p=emacs.git Replay key if kboard is interrupted while initializing (Bug#37782) The problem with the original fix for bug#5095 is that it drops the current event, which is a valid character event and not -2. Thus, the first ESC character sent by the terminal after turning on focus tracking is lost and we get '[' and 'I' events separately inserted into the buffer afterwards. * src/keyboard.c (read_key_sequence): Add key as mock_input and replay sequence using new keyboard, when the key is not -2. --- diff --git a/src/keyboard.c b/src/keyboard.c index 56ab79068ad..0eab8fdfae1 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -9596,7 +9596,16 @@ read_key_sequence (Lisp_Object *keybuf, Lisp_Object prompt, Fcons (make_lispy_switch_frame (frame), KVAR (interrupted_kboard, kbd_queue))); } - mock_input = 0; + if (FIXNUMP (key) && XFIXNUM (key) == -2) + mock_input = 0; + else + { + /* If interrupted while initializing terminal, we + need to replay the interrupting key. See + Bug#5095 and Bug#37782. */ + mock_input = 1; + keybuf[0] = key; + } goto replay_entire_sequence; } }