commit 5d3f3cae64759091ad6dc7b1e2e7f15728c8b05a (tree)
parent 0f6fa3f20b3b28958921bd63a9a9d96468455e9c
Author: Linus Groh <mail@linusgroh.de>
Date: Sun, 21 May 2023 21:27:54 +0100
std.io.tty: Add missing colors to Color enum
Also make colors not bold by default, that's what .bold is for.
Diffstat:
1 file changed, 45 insertions(+), 10 deletions(-)
diff --git 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,
};