zig

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

commit 59a12cd293a6d84090071b0ebb4828cd6626e079 (tree)
parent 729a051e9e38674233190aea23c0ac8c134f2d67
Author: Christofer Nolander <christofer.nolander@gmail.com>
Date:   Fri, 14 Apr 2023 16:07:51 +0200

windows: detect ANSI support in more terminals

Diffstat:
Mlib/std/fs/file.zig | 7+++++++
Mlib/std/os/windows.zig | 2++
2 files changed, 9 insertions(+), 0 deletions(-)

diff --git a/lib/std/fs/file.zig b/lib/std/fs/file.zig @@ -230,6 +230,13 @@ pub const File = struct { /// Test whether ANSI escape codes will be treated as such. pub fn supportsAnsiEscapeCodes(self: File) bool { if (builtin.os.tag == .windows) { + if (!os.isatty(self.handle)) return false; + + var console_mode: os.windows.DWORD = 0; + if (os.windows.kernel32.GetConsoleMode(self.handle, &console_mode) != 0) { + if (console_mode & os.windows.ENABLE_VIRTUAL_TERMINAL_PROCESSING != 0) return true; + } + return os.isCygwinPty(self.handle); } if (builtin.os.tag == .wasi) { diff --git a/lib/std/os/windows.zig b/lib/std/os/windows.zig @@ -3387,6 +3387,8 @@ pub const CONSOLE_SCREEN_BUFFER_INFO = extern struct { dwMaximumWindowSize: COORD, }; +pub const ENABLE_VIRTUAL_TERMINAL_PROCESSING = 0x4; + pub const FOREGROUND_BLUE = 1; pub const FOREGROUND_GREEN = 2; pub const FOREGROUND_RED = 4;