authorgravatar for mail@linusgroh.deLinus Groh <mail@linusgroh.de> 2023-05-21 21:27:54+01:00
committergravatar for mail@linusgroh.deLinus Groh <mail@linusgroh.de> 2023-05-24 10:15:02+01:00
log5d3f3cae64759091ad6dc7b1e2e7f15728c8b05a
tree3e5a6027db004f42f37ef01d3bb71ded97410c48
parent0f6fa3f20b3b28958921bd63a9a9d96468455e9c

std.io.tty: Add missing colors to Color enum

Also make colors not bold by default, that's what .bold is for.

1 files changed, 45 insertions(+), 10 deletions(-)

lib/std/io/tty.zig+45-10
......@@ -34,11 +34,22 @@ pub fn detectConfig(file: File) Config {
3434}
3535
3636pub 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,
......@@ -61,11 +72,22 @@ pub const Config = union(enum) {
6172 .no_color => return,
6273 .escape_codes => {
6374 const color_string = switch (color) {
64 .red => "\x1b[31;1m",
65 .green => "\x1b[32;1m",
66 .yellow => "\x1b[33;1m",
67 .cyan => "\x1b[36;1m",
68 .white => "\x1b[37;1m",
75 .black => "\x1b[30m",
76 .red => "\x1b[31m",
77 .green => "\x1b[32m",
78 .yellow => "\x1b[33m",
79 .blue => "\x1b[34m",
80 .magenta => "\x1b[35m",
81 .cyan => "\x1b[36m",
82 .white => "\x1b[37m",
83 .bright_black => "\x1b[90m",
84 .bright_red => "\x1b[91m",
85 .bright_green => "\x1b[92m",
86 .bright_yellow => "\x1b[93m",
87 .bright_blue => "\x1b[94m",
88 .bright_magenta => "\x1b[95m",
89 .bright_cyan => "\x1b[96m",
90 .bright_white => "\x1b[97m",
6991 .bold => "\x1b[1m",
7092 .dim => "\x1b[2m",
7193 .reset => "\x1b[0m",
......@@ -74,11 +96,24 @@ pub const Config = union(enum) {
7496 },
7597 .windows_api => |ctx| if (native_os == .windows) {
7698 const attributes = switch (color) {
77 .red => windows.FOREGROUND_RED | windows.FOREGROUND_INTENSITY,
78 .green => windows.FOREGROUND_GREEN | windows.FOREGROUND_INTENSITY,
79 .yellow => windows.FOREGROUND_RED | windows.FOREGROUND_GREEN | windows.FOREGROUND_INTENSITY,
80 .cyan => windows.FOREGROUND_GREEN | windows.FOREGROUND_BLUE | windows.FOREGROUND_INTENSITY,
81 .white, .bold => windows.FOREGROUND_RED | windows.FOREGROUND_GREEN | windows.FOREGROUND_BLUE | windows.FOREGROUND_INTENSITY,
99 .black => 0,
100 .red => windows.FOREGROUND_RED,
101 .green => windows.FOREGROUND_GREEN,
102 .yellow => windows.FOREGROUND_RED | windows.FOREGROUND_GREEN,
103 .blue => windows.FOREGROUND_BLUE,
104 .magenta => windows.FOREGROUND_RED | windows.FOREGROUND_BLUE,
105 .cyan => windows.FOREGROUND_GREEN | windows.FOREGROUND_BLUE,
106 .white => windows.FOREGROUND_RED | windows.FOREGROUND_GREEN | windows.FOREGROUND_BLUE,
107 .bright_black => windows.FOREGROUND_INTENSITY,
108 .bright_red => windows.FOREGROUND_RED | windows.FOREGROUND_INTENSITY,
109 .bright_green => windows.FOREGROUND_GREEN | windows.FOREGROUND_INTENSITY,
110 .bright_yellow => windows.FOREGROUND_RED | windows.FOREGROUND_GREEN | windows.FOREGROUND_INTENSITY,
111 .bright_blue => windows.FOREGROUND_BLUE | windows.FOREGROUND_INTENSITY,
112 .bright_magenta => windows.FOREGROUND_RED | windows.FOREGROUND_BLUE | windows.FOREGROUND_INTENSITY,
113 .bright_cyan => windows.FOREGROUND_GREEN | windows.FOREGROUND_BLUE | windows.FOREGROUND_INTENSITY,
114 .bright_white, .bold => windows.FOREGROUND_RED | windows.FOREGROUND_GREEN | windows.FOREGROUND_BLUE | windows.FOREGROUND_INTENSITY,
115 // "dim" is not supported using basic character attributes, but let's still make it do *something*.
116 // This matches the old behavior of TTY.Color before the bright variants were added.
82117 .dim => windows.FOREGROUND_INTENSITY,
83118 .reset => ctx.reset_attributes,
84119 };