use Io interface for enabling ansi escape codes

This commit is contained in:
Carter Snook 2026-02-08 18:44:36 -06:00
parent 7d4162e388
commit df3f2df50b

View File

@ -128,23 +128,13 @@ pub fn build(b: *Build) !void {
if (!validate_exercises()) std.process.exit(2); if (!validate_exercises()) std.process.exit(2);
use_color_escapes = false; use_color_escapes = false;
if (try std.Io.File.stderr().supportsAnsiEscapeCodes(io)) { const stderr = std.Io.File.stderr();
if (try stderr.supportsAnsiEscapeCodes(io)) {
use_color_escapes = true; use_color_escapes = true;
} else if (builtin.os.tag == .windows) { } else if (builtin.os.tag == .windows) {
const w32 = struct { if (stderr.enableAnsiEscapeCodes(io)) {
const DWORD = std.os.windows.DWORD; use_color_escapes = true;
const ENABLE_VIRTUAL_TERMINAL_PROCESSING = 0x0004; } else |_| {}
const STD_ERROR_HANDLE: DWORD = @bitCast(@as(i32, -12));
const GetStdHandle = std.os.windows.kernel32.GetStdHandle;
const GetConsoleMode = std.os.windows.kernel32.GetConsoleMode;
const SetConsoleMode = std.os.windows.kernel32.SetConsoleMode;
};
const handle = w32.GetStdHandle(w32.STD_ERROR_HANDLE).?;
var mode: w32.DWORD = 0;
if (w32.GetConsoleMode(handle, &mode) != 0) {
mode |= w32.ENABLE_VIRTUAL_TERMINAL_PROCESSING;
use_color_escapes = w32.SetConsoleMode(handle, mode) != 0;
}
} }
if (use_color_escapes) { if (use_color_escapes) {