From 5d3f3cae64759091ad6dc7b1e2e7f15728c8b05a Mon Sep 17 00:00:00 2001 From: Linus Groh Date: Sun, 21 May 2023 21:27:54 +0100 Subject: [PATCH] std.io.tty: Add missing colors to Color enum Also make colors not bold by default, that's what .bold is for. --- lib/std/io/tty.zig | 55 +++++++++++++++++++++++++++++++++++++--------- 1 file changed, 45 insertions(+), 10 deletions(-) diff --git a/lib/std/io/tty.zig b/lib/std/io/tty.zig index ea1c52db00..765cd20d42 100644 --- a/lib/std/io/tty.zig +++ b/lib/std/io/tty.zig @@ -34,11 +34,22 @@ pub fn detectConfig(file: File) Config { } pub const Color = enum { + black, red, green, yellow, + blue, + magenta, cyan, white, + bright_black, + bright_red, + bright_green, + bright_yellow, + bright_blue, + bright_magenta, + bright_cyan, + bright_white, dim, bold, reset, @@ -61,11 +72,22 @@ pub const Config = union(enum) { .no_color => return, .escape_codes => { const color_string = switch (color) { - .red => "\x1b[31;1m", - .green => "\x1b[32;1m", - .yellow => "\x1b[33;1m", - .cyan => "\x1b[36;1m", - .white => "\x1b[37;1m", + .black => "\x1b[30m", + .red => "\x1b[31m", + .green => "\x1b[32m", + .yellow => "\x1b[33m", + .blue => "\x1b[34m", + .magenta => "\x1b[35m", + .cyan => "\x1b[36m", + .white => "\x1b[37m", + .bright_black => "\x1b[90m", + .bright_red => "\x1b[91m", + .bright_green => "\x1b[92m", + .bright_yellow => "\x1b[93m", + .bright_blue => "\x1b[94m", + .bright_magenta => "\x1b[95m", + .bright_cyan => "\x1b[96m", + .bright_white => "\x1b[97m", .bold => "\x1b[1m", .dim => "\x1b[2m", .reset => "\x1b[0m", @@ -74,11 +96,24 @@ pub const Config = union(enum) { }, .windows_api => |ctx| if (native_os == .windows) { const attributes = switch (color) { - .red => windows.FOREGROUND_RED | windows.FOREGROUND_INTENSITY, - .green => windows.FOREGROUND_GREEN | windows.FOREGROUND_INTENSITY, - .yellow => windows.FOREGROUND_RED | windows.FOREGROUND_GREEN | windows.FOREGROUND_INTENSITY, - .cyan => windows.FOREGROUND_GREEN | windows.FOREGROUND_BLUE | windows.FOREGROUND_INTENSITY, - .white, .bold => windows.FOREGROUND_RED | windows.FOREGROUND_GREEN | windows.FOREGROUND_BLUE | windows.FOREGROUND_INTENSITY, + .black => 0, + .red => windows.FOREGROUND_RED, + .green => windows.FOREGROUND_GREEN, + .yellow => windows.FOREGROUND_RED | windows.FOREGROUND_GREEN, + .blue => windows.FOREGROUND_BLUE, + .magenta => windows.FOREGROUND_RED | windows.FOREGROUND_BLUE, + .cyan => windows.FOREGROUND_GREEN | windows.FOREGROUND_BLUE, + .white => windows.FOREGROUND_RED | windows.FOREGROUND_GREEN | windows.FOREGROUND_BLUE, + .bright_black => windows.FOREGROUND_INTENSITY, + .bright_red => windows.FOREGROUND_RED | windows.FOREGROUND_INTENSITY, + .bright_green => windows.FOREGROUND_GREEN | windows.FOREGROUND_INTENSITY, + .bright_yellow => windows.FOREGROUND_RED | windows.FOREGROUND_GREEN | windows.FOREGROUND_INTENSITY, + .bright_blue => windows.FOREGROUND_BLUE | windows.FOREGROUND_INTENSITY, + .bright_magenta => windows.FOREGROUND_RED | windows.FOREGROUND_BLUE | windows.FOREGROUND_INTENSITY, + .bright_cyan => windows.FOREGROUND_GREEN | windows.FOREGROUND_BLUE | windows.FOREGROUND_INTENSITY, + .bright_white, .bold => windows.FOREGROUND_RED | windows.FOREGROUND_GREEN | windows.FOREGROUND_BLUE | windows.FOREGROUND_INTENSITY, + // "dim" is not supported using basic character attributes, but let's still make it do *something*. + // This matches the old behavior of TTY.Color before the bright variants were added. .dim => windows.FOREGROUND_INTENSITY, .reset => ctx.reset_attributes, };