]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
cli: support bracketed paste
authorHeinrich Schuchardt <heinrich.schuchardt@canonical.com>
Mon, 7 Feb 2022 18:14:02 +0000 (19:14 +0100)
committerHeinrich Schuchardt <heinrich.schuchardt@canonical.com>
Mon, 18 Jul 2022 15:21:49 +0000 (17:21 +0200)
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>
common/cli_readline.c

index c7614a4c90ff069168015ed7ca482870b3b07334..e86ee73faf7afd841b331947fedff9ffaf340f7a 100644 (file)
@@ -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;