From 00fa8256b5c9b3ccbccbdfa8026bce2efd66d630 Mon Sep 17 00:00:00 2001 From: Heinrich Schuchardt Date: Mon, 7 Feb 2022 19:14:02 +0100 Subject: [PATCH] cli: support bracketed paste Some consoles use CSI 200~ and CSI 201~ to bracket inserts. This leads U-Boot to misinterpret the inserted string. Ignore these escape sequences. Signed-off-by: Heinrich Schuchardt --- common/cli_readline.c | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/common/cli_readline.c b/common/cli_readline.c index c7614a4..e86ee73 100644 --- a/common/cli_readline.c +++ b/common/cli_readline.c @@ -321,6 +321,7 @@ static int cread_line(const char *const prompt, char *buf, unsigned int *len, act = ESC_CONVERTED; break; /* pass off to ^N handler */ case '1': + case '2': case '3': case '4': case '7': @@ -332,7 +333,8 @@ static int cread_line(const char *const prompt, char *buf, unsigned int *len, break; } } else if (esc_len == 3) { - if (ichar == '~') { + switch (ichar) { + case '~': switch (esc_save[2]) { case '3': /* Delete key */ ichar = CTL_CH('d'); @@ -349,9 +351,25 @@ static int cread_line(const char *const prompt, char *buf, unsigned int *len, act = ESC_CONVERTED; break; /* pass to ^E handler */ } + break; + case '0': + if (esc_save[2] == '2') + act = ESC_SAVE; + break; + } + } else if (esc_len == 4) { + switch (ichar) { + case '0': + case '1': + act = ESC_SAVE; + break; /* bracketed paste */ + } + } else if (esc_len == 5) { + if (ichar == '~') { /* bracketed paste */ + ichar = 0; + act = ESC_CONVERTED; } } - switch (act) { case ESC_SAVE: esc_save[esc_len++] = ichar; -- 2.7.4