Commit ed36470af1

Andrew Kelley <andrew@ziglang.org>
2024-05-23 20:10:41
std.Progress: truncate trailing newline
1 parent 67e08e7
Changed files (1)
lib
lib/std/Progress.zig
@@ -367,12 +367,23 @@ fn clearTerminal() void {
     buf[i..][0..start_sync.len].* = start_sync.*;
     i += start_sync.len;
 
+    i = computeClear(buf, i);
+
+    buf[i..][0..finish_sync.len].* = finish_sync.*;
+    i += finish_sync.len;
+
+    write(buf[0..i]);
+}
+
+fn computeClear(buf: []u8, start_i: usize) usize {
+    var i = start_i;
+
     const prev_nl_n = global_progress.newline_count;
     if (prev_nl_n > 0) {
         global_progress.newline_count = 0;
         buf[i] = '\r';
         i += 1;
-        for (0..prev_nl_n) |_| {
+        for (1..prev_nl_n) |_| {
             buf[i..][0..up_one_line.len].* = up_one_line.*;
             i += up_one_line.len;
         }
@@ -381,10 +392,7 @@ fn clearTerminal() void {
     buf[i..][0..clear.len].* = clear.*;
     i += clear.len;
 
-    buf[i..][0..finish_sync.len].* = finish_sync.*;
-    i += finish_sync.len;
-
-    write(buf[0..i]);
+    return i;
 }
 
 const Children = struct {
@@ -467,25 +475,13 @@ fn computeRedraw() []u8 {
     buf[i..][0..start_sync.len].* = start_sync.*;
     i += start_sync.len;
 
-    const prev_nl_n = global_progress.newline_count;
-    if (prev_nl_n > 0) {
-        global_progress.newline_count = 0;
-        buf[i] = '\r';
-        i += 1;
-        for (0..prev_nl_n) |_| {
-            buf[i..][0..up_one_line.len].* = up_one_line.*;
-            i += up_one_line.len;
-        }
-    }
-
-    buf[i..][0..clear.len].* = clear.*;
-    i += clear.len;
+    i = computeClear(buf, i);
 
     const root_node_index: Node.Index = @enumFromInt(0);
     i = computeNode(buf, i, serialized_node_storage, serialized_node_parents, children, root_node_index);
 
     // Truncate trailing newline.
-    //if (buf[i - 1] == '\n') i -= 1;
+    if (buf[i - 1] == '\n') i -= 1;
 
     buf[i..][0..finish_sync.len].* = finish_sync.*;
     i += finish_sync.len;