video/console: Implement ANSI clear line command
authorAndre Przywara <andre.przywara@arm.com>
Sat, 23 Mar 2019 01:29:58 +0000 (01:29 +0000)
committerAnatolij Gustschin <agust@denx.de>
Sun, 14 Apr 2019 12:18:47 +0000 (14:18 +0200)
There is a standard ANSI terminal escape sequence to clear a whole line
of text. So far the DM_VIDEO console was missing this code.

Detect the sequence and use vidconsole_set_row with the background
colour to fix this omission.

Signed-off-by: Andre Przywara <andre.przywara@arm.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
drivers/video/vidconsole-uclass.c

index 6cf9124c42b5d0d106106b97599167f80f9886c1..cf2f0dff441fa76a61b82cc21caee21976b7b223 100644 (file)
@@ -346,6 +346,25 @@ static void vidconsole_escape_char(struct udevice *dev, char ch)
                }
                break;
        }
+       case 'K': {
+               struct video_priv *vid_priv = dev_get_uclass_priv(dev->parent);
+               int mode;
+
+               /*
+                * Clear (parts of) current line
+                *   [0K       - clear line to end
+                *   [2K       - clear entire line
+                */
+               parsenum(priv->escape_buf + 1, &mode);
+
+               if (mode == 2) {
+                       int row, col;
+
+                       get_cursor_position(priv, &row, &col);
+                       vidconsole_set_row(dev, row, vid_priv->colour_bg);
+               }
+               break;
+       }
        case 'm': {
                struct video_priv *vid_priv = dev_get_uclass_priv(dev->parent);
                char *s = priv->escape_buf;