diff options
| author | r00ster91 <r00ster91@proton.me> | 2022-10-14 09:32:26 +0200 |
|---|---|---|
| committer | r00ster91 <r00ster91@proton.me> | 2022-10-14 09:38:09 +0200 |
| commit | ab4e696e1fac3eda1ad0481cfbdc1829cb5c6847 (patch) | |
| tree | 1e9a4a12e85af18d2eca5bad788f5f6fe18c5988 /lib/std/Progress.zig | |
| parent | 4ae8717fb301008c64a5f7fad9db92f1d59a31d0 (diff) | |
| download | zig-ab4e696e1fac3eda1ad0481cfbdc1829cb5c6847.tar.gz zig-ab4e696e1fac3eda1ad0481cfbdc1829cb5c6847.zip | |
fix: handle larger window sizes more robustly
We should now be able to handle virtually any window size gracefully.
Diffstat (limited to 'lib/std/Progress.zig')
| -rw-r--r-- | lib/std/Progress.zig | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/lib/std/Progress.zig b/lib/std/Progress.zig index dcdf5deaae..6097fde41b 100644 --- a/lib/std/Progress.zig +++ b/lib/std/Progress.zig @@ -48,8 +48,9 @@ timer: ?time.Timer = null, /// Used to compare with `refresh_rate_ms`. prev_refresh_timestamp: u64 = undefined, -/// This buffer represents the maximum number of bytes written to the terminal -/// with each refresh. +/// This is the maximum number of bytes that can be written to the terminal each refresh. +/// Anything larger than this is truncated. +// we can bump this up if we need to output_buffer: [256]u8 = undefined, output_buffer_slice: []u8 = undefined, @@ -247,7 +248,7 @@ fn getTerminalCursorColumn(self: Progress, file: std.fs.File) !u16 { }; try file.writeAll("\x1b[6n"); - var buf: ["\x1b[256;256R".len]u8 = undefined; + var buf: ["\x1b[65536;65536R".len]u8 = undefined; const output = try file.reader().readUntilDelimiter(&buf, 'R'); var splitter = std.mem.split(u8, output, ";"); _ = splitter.next().?; // skip first half @@ -356,7 +357,7 @@ fn refreshWithHeldLock(self: *Progress) void { // we possibly wrote previously don't affect whether we truncate the line in `bufWrite`. const unprintables = end; end = 0; - self.output_buffer_slice = self.output_buffer[unprintables .. unprintables + self.max_width.?]; + self.output_buffer_slice = self.output_buffer[unprintables..@minimum(self.output_buffer.len, unprintables + self.max_width.?)]; if (!self.done) { var need_ellipsis = false; |
