| ... | @@ -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; |
| 369 | | 369 | |
| | 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 | |
| | 378 | fn 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; |
| 383 | | 394 | |
| 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 | } |
| 389 | | 397 | |
| 390 | const Children = struct { | 398 | const 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; |
| 469 | | 477 | |
| 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; | | |
| 483 | | 479 | |
| 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); |
| 486 | | 482 | |
| 487 | // Truncate trailing newline. | 483 | // Truncate trailing newline. |
| 488 | //if (buf[i - 1] == '\n') i -= 1; | 484 | if (buf[i - 1] == '\n') i -= 1; |
| 489 | | 485 | |
| 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; |