Commit 5d3f3cae64

Linus Groh <mail@linusgroh.de>
2023-05-21 22:27:54
std.io.tty: Add missing colors to Color enum
Also make colors not bold by default, that's what .bold is for.
1 parent 0f6fa3f
Changed files (1)
lib
std
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,
                 };