From ed36470af1c71a254bbe535bf70220aa27370f89 Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Thu, 23 May 2024 11:10:41 -0700 Subject: [PATCH] std.Progress: truncate trailing newline --- lib/std/Progress.zig | 50 ++++++++++++++++++++------------------------ 1 file changed, 23 insertions(+), 27 deletions(-) diff --git a/lib/std/Progress.zig b/lib/std/Progress.zig index 0e625f4785d046495689bf55d60889230fb30d35..3703b1f8d1e3cc75dde8bd68f67732219bc443a2 100644 --- a/lib/std/Progress.zig +++ b/lib/std/Progress.zig @@ -367,19 +367,7 @@ fn clearTerminal() void { 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); buf[i..][0..finish_sync.len].* = finish_sync.*; i += finish_sync.len; @@ -387,6 +375,26 @@ fn clearTerminal() void { 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 (1..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; + + return i; +} + const Children = struct { child: Node.OptionalIndex, sibling: Node.OptionalIndex, @@ -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; -- 2.54.0