Skip to content

Commit 1d614f9

Browse files
committed
std.io: Add missing colors to TTY.Color
Also make colors not bold by default, that's what .bold is for.
1 parent ab1c267 commit 1d614f9

File tree

1 file changed

+45
-10
lines changed

1 file changed

+45
-10
lines changed

lib/std/io/tty.zig

Lines changed: 45 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,22 @@ pub fn detectTTYConfig(file: File) TTY.Config {
3434
/// such as coloring text, etc.
3535
pub const TTY = struct {
3636
pub const Color = enum {
37+
black,
3738
red,
3839
green,
3940
yellow,
41+
blue,
42+
magenta,
4043
cyan,
4144
white,
45+
bright_black,
46+
bright_red,
47+
bright_green,
48+
bright_yellow,
49+
bright_blue,
50+
bright_magenta,
51+
bright_cyan,
52+
bright_white,
4253
dim,
4354
bold,
4455
reset,
@@ -59,11 +70,22 @@ pub const TTY = struct {
5970
.no_color => return,
6071
.escape_codes => {
6172
const color_string = switch (color) {
62-
.red => "\x1b[31;1m",
63-
.green => "\x1b[32;1m",
64-
.yellow => "\x1b[33;1m",
65-
.cyan => "\x1b[36;1m",
66-
.white => "\x1b[37;1m",
73+
.black => "\x1b[30m",
74+
.red => "\x1b[31m",
75+
.green => "\x1b[32m",
76+
.yellow => "\x1b[33m",
77+
.blue => "\x1b[34m",
78+
.magenta => "\x1b[35m",
79+
.cyan => "\x1b[36m",
80+
.white => "\x1b[37m",
81+
.bright_black => "\x1b[90m",
82+
.bright_red => "\x1b[91m",
83+
.bright_green => "\x1b[92m",
84+
.bright_yellow => "\x1b[93m",
85+
.bright_blue => "\x1b[94m",
86+
.bright_magenta => "\x1b[95m",
87+
.bright_cyan => "\x1b[96m",
88+
.bright_white => "\x1b[97m",
6789
.bold => "\x1b[1m",
6890
.dim => "\x1b[2m",
6991
.reset => "\x1b[0m",
@@ -72,11 +94,24 @@ pub const TTY = struct {
7294
},
7395
.windows_api => |ctx| if (native_os == .windows) {
7496
const attributes = switch (color) {
75-
.red => windows.FOREGROUND_RED | windows.FOREGROUND_INTENSITY,
76-
.green => windows.FOREGROUND_GREEN | windows.FOREGROUND_INTENSITY,
77-
.yellow => windows.FOREGROUND_RED | windows.FOREGROUND_GREEN | windows.FOREGROUND_INTENSITY,
78-
.cyan => windows.FOREGROUND_GREEN | windows.FOREGROUND_BLUE | windows.FOREGROUND_INTENSITY,
79-
.white, .bold => windows.FOREGROUND_RED | windows.FOREGROUND_GREEN | windows.FOREGROUND_BLUE | windows.FOREGROUND_INTENSITY,
97+
.black => 0,
98+
.red => windows.FOREGROUND_RED,
99+
.green => windows.FOREGROUND_GREEN,
100+
.yellow => windows.FOREGROUND_RED | windows.FOREGROUND_GREEN,
101+
.blue => windows.FOREGROUND_BLUE,
102+
.magenta => windows.FOREGROUND_RED | windows.FOREGROUND_BLUE,
103+
.cyan => windows.FOREGROUND_GREEN | windows.FOREGROUND_BLUE,
104+
.white => windows.FOREGROUND_RED | windows.FOREGROUND_GREEN | windows.FOREGROUND_BLUE,
105+
.bright_black => windows.FOREGROUND_INTENSITY,
106+
.bright_red => windows.FOREGROUND_RED | windows.FOREGROUND_INTENSITY,
107+
.bright_green => windows.FOREGROUND_GREEN | windows.FOREGROUND_INTENSITY,
108+
.bright_yellow => windows.FOREGROUND_RED | windows.FOREGROUND_GREEN | windows.FOREGROUND_INTENSITY,
109+
.bright_blue => windows.FOREGROUND_BLUE | windows.FOREGROUND_INTENSITY,
110+
.bright_magenta => windows.FOREGROUND_RED | windows.FOREGROUND_BLUE | windows.FOREGROUND_INTENSITY,
111+
.bright_cyan => windows.FOREGROUND_GREEN | windows.FOREGROUND_BLUE | windows.FOREGROUND_INTENSITY,
112+
.bright_white, .bold => windows.FOREGROUND_RED | windows.FOREGROUND_GREEN | windows.FOREGROUND_BLUE | windows.FOREGROUND_INTENSITY,
113+
// "dim" is not supported using basic character attributes, but let's still make it do *something*.
114+
// This matches the old behavior of TTY.Color before the bright variants were added.
80115
.dim => windows.FOREGROUND_INTENSITY,
81116
.reset => ctx.reset_attributes,
82117
};

0 commit comments

Comments
 (0)