From e4924fb0d1fa474f0c0874eefd872ad72626a76c Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Fri, 19 Jan 2024 23:39:13 +0100 Subject: [PATCH] ptyfwd: when leaving a session with tinted background, clear to end of screen So if we tint the background of a ptyfwd session with a color and the session ends, then so far we reset the bg color and clear till the end of line. Let's instead clear till the end of the screen. This is nicer since it means that any follow-up output will not be affected by the changed background color anymore. --- src/basic/terminal-util.h | 3 +++ src/shared/ptyfwd.c | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/basic/terminal-util.h b/src/basic/terminal-util.h index ee60ff4840..4822917f28 100644 --- a/src/basic/terminal-util.h +++ b/src/basic/terminal-util.h @@ -80,6 +80,9 @@ /* Erase characters until the end of the line */ #define ANSI_ERASE_TO_END_OF_LINE "\x1B[K" +/* Erase characters until end of screen */ +#define ANSI_ERASE_TO_END_OF_SCREEN "\x1B[J" + /* Move cursor up one line */ #define ANSI_REVERSE_LINEFEED "\x1BM" diff --git a/src/shared/ptyfwd.c b/src/shared/ptyfwd.c index 03660ad417..c05ce79489 100644 --- a/src/shared/ptyfwd.c +++ b/src/shared/ptyfwd.c @@ -115,7 +115,7 @@ static void pty_forward_disconnect(PTYForward *f) { (void) fd_nonblock(f->output_fd, false); if (colors_enabled()) - (void) loop_write(f->output_fd, ANSI_NORMAL ANSI_ERASE_TO_END_OF_LINE, SIZE_MAX); + (void) loop_write(f->output_fd, ANSI_NORMAL ANSI_ERASE_TO_END_OF_SCREEN, SIZE_MAX); if (f->close_output_fd) f->output_fd = safe_close(f->output_fd); -- 2.25.1