From: Lennart Poettering Date: Thu, 15 May 2025 16:46:06 +0000 (+0200) Subject: terminal-util: explicitly reset cursor X-Git-Tag: v258-rc1~583 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=b177095bfac9d04871762cff4febfca43e790529;p=thirdparty%2Fsystemd.git terminal-util: explicitly reset cursor Apparently there are terminals where our usual reset is not enough to turn the cursor back on. Hence do so explicitly. Fixes: #22168 --- diff --git a/src/basic/terminal-util.c b/src/basic/terminal-util.c index 7c900c267d4..5c78f1ec861 100644 --- a/src/basic/terminal-util.c +++ b/src/basic/terminal-util.c @@ -55,6 +55,11 @@ #include "user-util.h" #include "utf8.h" +#define ANSI_RESET_CURSOR \ + "\033?25h" /* turn on cursor */ \ + "\033?12l" /* reset cursor blinking */ \ + "\033 1q" /* reset cursor style */ + static volatile unsigned cached_columns = 0; static volatile unsigned cached_lines = 0; @@ -856,6 +861,7 @@ int vt_disallocate(const char *tty_path) { return fd2; return loop_write_full(fd2, + ANSI_RESET_CURSOR "\033[r" /* clear scrolling region */ "\033[H" /* move home */ "\033[3J" /* clear screen including scrollback, requires Linux 2.6.40 */ @@ -972,6 +978,7 @@ static int terminal_reset_ansi_seq(int fd) { return log_debug_errno(r, "Failed to set terminal to non-blocking mode: %m"); k = loop_write_full(fd, + ANSI_RESET_CURSOR "\033[!p" /* soft terminal reset */ "\033]104\007" /* reset colors */ "\033[?7h" /* enable line-wrapping */