diff options
author | Heinrich Schuchardt <heinrich.schuchardt@canonical.com> | 2022-02-07 19:14:02 +0100 |
---|---|---|
committer | Heinrich Schuchardt <heinrich.schuchardt@canonical.com> | 2022-07-18 17:21:49 +0200 |
commit | 00fa8256b5c9b3ccbccbdfa8026bce2efd66d630 (patch) | |
tree | 02d2f5e1d4ddea4dd839444fbf269aebb4b2fa05 /common | |
parent | 085cbdafca9c3d7bc2f27523a343f61db82f2ccb (diff) |
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 <heinrich.schuchardt@canonical.com>
Diffstat (limited to 'common')
-rw-r--r-- | common/cli_readline.c | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/common/cli_readline.c b/common/cli_readline.c index c7614a4c90..e86ee73faf 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; |