authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2024-05-23 11:10:41-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2024-05-27 20:56:48-07:00
loged36470af1c71a254bbe535bf70220aa27370f89
tree1b949c924d039b5263e55b754b6ffd83eed9768d
parent67e08e7b3cbed652953b21fb50ffff337318ae16

std.Progress: truncate trailing newline


1 files changed, 15 insertions(+), 19 deletions(-)

lib/std/Progress.zig+15-19
...@@ -367,12 +367,23 @@ fn clearTerminal() void {...@@ -367,12 +367,23 @@ fn clearTerminal() void {
367 buf[i..][0..start_sync.len].* = start_sync.*;367 buf[i..][0..start_sync.len].* = start_sync.*;
368 i += start_sync.len;368 i += start_sync.len;
369369
370 i = computeClear(buf, i);
371
372 buf[i..][0..finish_sync.len].* = finish_sync.*;
373 i += finish_sync.len;
374
375 write(buf[0..i]);
376}
377
378fn computeClear(buf: []u8, start_i: usize) usize {
379 var i = start_i;
380
370 const prev_nl_n = global_progress.newline_count;381 const prev_nl_n = global_progress.newline_count;
371 if (prev_nl_n > 0) {382 if (prev_nl_n > 0) {
372 global_progress.newline_count = 0;383 global_progress.newline_count = 0;
373 buf[i] = '\r';384 buf[i] = '\r';
374 i += 1;385 i += 1;
375 for (0..prev_nl_n) |_| {386 for (1..prev_nl_n) |_| {
376 buf[i..][0..up_one_line.len].* = up_one_line.*;387 buf[i..][0..up_one_line.len].* = up_one_line.*;
377 i += up_one_line.len;388 i += up_one_line.len;
378 }389 }
...@@ -381,10 +392,7 @@ fn clearTerminal() void {...@@ -381,10 +392,7 @@ fn clearTerminal() void {
381 buf[i..][0..clear.len].* = clear.*;392 buf[i..][0..clear.len].* = clear.*;
382 i += clear.len;393 i += clear.len;
383394
384 buf[i..][0..finish_sync.len].* = finish_sync.*;395 return i;
385 i += finish_sync.len;
386
387 write(buf[0..i]);
388}396}
389397
390const Children = struct {398const Children = struct {
...@@ -467,25 +475,13 @@ fn computeRedraw() []u8 {...@@ -467,25 +475,13 @@ fn computeRedraw() []u8 {
467 buf[i..][0..start_sync.len].* = start_sync.*;475 buf[i..][0..start_sync.len].* = start_sync.*;
468 i += start_sync.len;476 i += start_sync.len;
469477
470 const prev_nl_n = global_progress.newline_count;478 i = computeClear(buf, i);
471 if (prev_nl_n > 0) {
472 global_progress.newline_count = 0;
473 buf[i] = '\r';
474 i += 1;
475 for (0..prev_nl_n) |_| {
476 buf[i..][0..up_one_line.len].* = up_one_line.*;
477 i += up_one_line.len;
478 }
479 }
480
481 buf[i..][0..clear.len].* = clear.*;
482 i += clear.len;
483479
484 const root_node_index: Node.Index = @enumFromInt(0);480 const root_node_index: Node.Index = @enumFromInt(0);
485 i = computeNode(buf, i, serialized_node_storage, serialized_node_parents, children, root_node_index);481 i = computeNode(buf, i, serialized_node_storage, serialized_node_parents, children, root_node_index);
486482
487 // Truncate trailing newline.483 // Truncate trailing newline.
488 //if (buf[i - 1] == '\n') i -= 1;484 if (buf[i - 1] == '\n') i -= 1;
489485
490 buf[i..][0..finish_sync.len].* = finish_sync.*;486 buf[i..][0..finish_sync.len].* = finish_sync.*;
491 i += finish_sync.len;487 i += finish_sync.len;