mail archive of the barebox mailing list
 help / color / mirror / Atom feed
From: Ahmad Fatoum <a.fatoum@barebox.org>
To: barebox@lists.infradead.org
Cc: Ahmad Fatoum <a.fatoum@barebox.org>
Subject: [PATCH 1/5] readkey: wait for the rest of an escape sequence
Date: Sun,  8 Nov 2026 10:32:03 +0100	[thread overview]
Message-ID: <20261108093354.1247607-2-a.fatoum@barebox.org> (raw)
In-Reply-To: <20261108093354.1247607-1-a.fatoum@barebox.org>

Since commit 68d07f38e8e8 ("readkey: handle standalone ESC keypress
with timeout"), read_key() waits at most 50ms for each of the two
characters after an ESC. The gap after the ESC is what tells a bare ESC
from an escape sequence, but once the next character is a [ or an O,
the rest of the sequence is on its way. When it arrives later, e.g.
because it went into the next packet or the next batch of an emulator,
the ESC and the [ are dropped, and the line editor inserts the rest:
the up arrow types an A.

Wait for the rest of a sequence without a timeout, as read_key() did
before and still does for the digits in ESC [ 1 ~ and the like. Any
other character after an ESC can't start a sequence we know, so return
right away then instead of waiting for one more.

Fixes: 68d07f38e8e8 ("readkey: handle standalone ESC keypress with timeout")
Signed-off-by: Ahmad Fatoum <a.fatoum@barebox.org>
---
 lib/readkey.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/lib/readkey.c b/lib/readkey.c
index 71f9b41c5055..fed2f70418b0 100644
--- a/lib/readkey.c
+++ b/lib/readkey.c
@@ -80,9 +80,11 @@ int read_key(void)
 		if (poll_key_into_buf(&esc[i++]))
 			return '\e';
 
-		if (poll_key_into_buf(&esc[i++]))
+		if (esc[0] != '[' && esc[0] != 'O')
 			return -1;
 
+		esc[i++] = getchar();
+
 		if (isdigit(esc[1])) {
 			while(1) {
 				esc[i] = getchar();
-- 
2.47.3




  reply	other threads:[~2026-11-08  9:35 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-11-08  9:32 [PATCH 0/5] console: escape sequence handling improvement Ahmad Fatoum
2026-11-08  9:32 ` Ahmad Fatoum [this message]
2026-11-08  9:32 ` [PATCH 2/5] lib: term: ask the terminal when a console can't tell its size Ahmad Fatoum
2026-11-08  9:32 ` [PATCH 3/5] serial: virtio_console: report the console size Ahmad Fatoum
2026-11-08  9:32 ` [PATCH 4/5] console: give each console implementation its own console_ctrlc() Ahmad Fatoum
2026-11-08  9:32 ` [PATCH 5/5] console: keep the keys typed ahead when checking for Ctrl-C Ahmad Fatoum
2026-11-09  9:50 ` [PATCH 0/5] console: escape sequence handling improvement Sascha Hauer

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20261108093354.1247607-2-a.fatoum@barebox.org \
    --to=a.fatoum@barebox.org \
    --cc=barebox@lists.infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox