]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
ptyfwd: do not erase line after NL
authorYu Watanabe <watanabe.yu+github@gmail.com>
Wed, 13 Mar 2024 04:23:15 +0000 (13:23 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Thu, 14 Mar 2024 18:47:04 +0000 (03:47 +0900)
Otherwise, moving upwards in 'less' does not work.

Follow-up for d0aa368c85adf2efa29c363a6671927fe7e8e76f.

src/shared/ptyfwd.c

index a514428ef2c75d6f484aaa0a0569c956102880de..38b89418cde8bcae8e560b2fe3273165036720e5 100644 (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: {