]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
terminal-util: during terminal reset clear from beginning of line to end of screen
authorLennart Poettering <lennart@poettering.net>
Thu, 6 Mar 2025 15:07:02 +0000 (16:07 +0100)
committerLuca Boccassi <luca.boccassi@gmail.com>
Thu, 6 Mar 2025 22:32:32 +0000 (22:32 +0000)
tianocore does some weird shit with its terminal emulation and regular
fills half the terminal with grey background and then invokes us with
this not cleared up. Hence let us clear this up for it: as part of the
ansi sequence based reset let's position the cursor explicitly at the
beginning of the current line, and erase everything till the end of the
screen. This makes boot output in tianocore vms much much cleaner.

Note that this does *not* erase any terminal output *before* the cursor
position where we take over, because that typically contains valuable
information still we should not erase.

src/basic/terminal-util.c

index 5303910b4c599c0a78415054f9df5a2f5375e338..50ad4c89af309ce40ec147b30439dcf7b680d4f4 100644 (file)
@@ -974,7 +974,9 @@ static int terminal_reset_ansi_seq(int fd) {
         k = loop_write_full(fd,
                             "\033[!p"      /* soft terminal reset */
                             "\033]104\007" /* reset colors */
-                            "\033[?7h",    /* enable line-wrapping */
+                            "\033[?7h"     /* enable line-wrapping */
+                            "\033[1G"      /* place cursor at beginning of current line */
+                            "\033[0J",     /* erase till end of screen */
                             SIZE_MAX,
                             100 * USEC_PER_MSEC);
         if (k < 0)