From b177095bfac9d04871762cff4febfca43e790529 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Thu, 15 May 2025 18:46:06 +0200 Subject: [PATCH] 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 --- src/basic/terminal-util.c | 7 +++++++ 1 file changed, 7 insertions(+) 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 */ -- 2.47.3