ptyfwd: do not erase line after NL

Otherwise, moving upwards in 'less' does not work.

Follow-up for d0aa368c85.
This commit is contained in:
Yu Watanabe
2024-03-15 03:47:04 +09:00
parent f63c1ada25
commit 0d1606df0b
+6 -39
View File
@@ -266,7 +266,7 @@ static int insert_string(PTYForward *f, size_t offset, const char *s) {
return (int) l;
}
static int insert_newline_color_erase(PTYForward *f, size_t offset) {
static int insert_background_color(PTYForward *f, size_t offset) {
_cleanup_free_ char *s = NULL;
assert(f);
@@ -274,29 +274,6 @@ static int insert_newline_color_erase(PTYForward *f, size_t offset) {
if (!f->background_color)
return 0;
/* When we see a newline (ASCII 10) then this sets the background color to the desired one, and erase the rest
* of the line with it */
s = background_color_sequence(f);
if (!s)
return -ENOMEM;
if (!strextend(&s, ANSI_ERASE_TO_END_OF_LINE))
return -ENOMEM;
return insert_string(f, offset, s);
}
static int insert_carriage_return_color(PTYForward *f, size_t offset) {
_cleanup_free_ char *s = NULL;
assert(f);
if (!f->background_color)
return 0;
/* When we see a carriage return (ASCII 13) then this sets only the background */
s = background_color_sequence(f);
if (!s)
return -ENOMEM;
@@ -430,27 +407,17 @@ static int pty_forward_ansi_process(PTYForward *f, size_t offset) {
case ANSI_COLOR_STATE_TEXT:
break;
case ANSI_COLOR_STATE_NEWLINE: {
/* Immediately after a newline insert an ANSI sequence to erase the line with a background color */
case ANSI_COLOR_STATE_NEWLINE:
case ANSI_COLOR_STATE_CARRIAGE_RETURN:
/* Immediately after a newline (ASCII 10) or carriage return (ASCII 13) insert an
* ANSI sequence set the background color back. */
r = insert_newline_color_erase(f, i);
r = insert_background_color(f, i);
if (r < 0)
return r;
i += r;
break;
}
case ANSI_COLOR_STATE_CARRIAGE_RETURN: {
/* Immediately after a carriage return insert an ANSI sequence set the background color back */
r = insert_carriage_return_color(f, i);
if (r < 0)
return r;
i += r;
break;
}
case ANSI_COLOR_STATE_ESC: {