zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit 7192ca14b7d5db62f3c38c49d36b07d6be86c6b9 (tree)
parent 155029b709ac3056dc2e6fb620fb4a99d4252c7e
Author: Vexu <git@vexu.eu>
Date:   Thu, 30 Apr 2020 18:35:55 +0300

Merge pull request #5216 from alexnask/windows_ansi_codes

Progress will now use ANSI escape codes on windows for terminals that support them
Diffstat:
Mlib/std/progress.zig | 10+++++++---
1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/lib/std/progress.zig b/lib/std/progress.zig @@ -13,6 +13,9 @@ pub const Progress = struct { /// not print on update() terminal: ?std.fs.File = undefined, + /// Whether the terminal supports ANSI escape codes. + supports_ansi_escape_codes: bool = false, + root: Node = undefined, /// Keeps track of how much time has passed since the beginning. @@ -103,6 +106,7 @@ pub const Progress = struct { self.terminal = null; if (stderr.supportsAnsiEscapeCodes()) { self.terminal = stderr; + self.supports_ansi_escape_codes = true; } else if (std.builtin.os.tag == .windows and stderr.isTty()) { self.terminal = stderr; } @@ -138,10 +142,10 @@ pub const Progress = struct { // restore the cursor position by moving the cursor // `columns_written` cells to the left, then clear the rest of the // line - if (std.builtin.os.tag != .windows) { + if (self.supports_ansi_escape_codes) { end += (std.fmt.bufPrint(self.output_buffer[end..], "\x1b[{}D", .{self.columns_written}) catch unreachable).len; end += (std.fmt.bufPrint(self.output_buffer[end..], "\x1b[0K", .{}) catch unreachable).len; - } else { + } else if (std.builtin.os.tag == .windows) { var info: windows.CONSOLE_SCREEN_BUFFER_INFO = undefined; if (windows.kernel32.GetConsoleScreenBufferInfo(file.handle, &info) != windows.TRUE) unreachable; @@ -174,7 +178,7 @@ pub const Progress = struct { if (windows.kernel32.SetConsoleCursorPosition(file.handle, cursor_pos) != windows.TRUE) unreachable; - } + } else unreachable; self.columns_written = 0; }