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 {...@@ -34,11 +34,22 @@ pub fn detectConfig(file: File) Config {
34}34}
3535
36pub const Color = enum {36pub const Color = enum {
37 black,
37 red,38 red,
38 green,39 green,
39 yellow,40 yellow,
41 blue,
42 magenta,
40 cyan,43 cyan,
41 white,44 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,
42 dim,53 dim,
43 bold,54 bold,
44 reset,55 reset,
...@@ -61,11 +72,22 @@ pub const Config = union(enum) {...@@ -61,11 +72,22 @@ pub const Config = union(enum) {
61 .no_color => return,72 .no_color => return,
62 .escape_codes => {73 .escape_codes => {
63 const color_string = switch (color) {74 const color_string = switch (color) {
64 .red => "\x1b[31;1m",75 .black => "\x1b[30m",
65 .green => "\x1b[32;1m",76 .red => "\x1b[31m",
66 .yellow => "\x1b[33;1m",77 .green => "\x1b[32m",
67 .cyan => "\x1b[36;1m",78 .yellow => "\x1b[33m",
68 .white => "\x1b[37;1m",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",
69 .bold => "\x1b[1m",91 .bold => "\x1b[1m",
70 .dim => "\x1b[2m",92 .dim => "\x1b[2m",
71 .reset => "\x1b[0m",93 .reset => "\x1b[0m",
...@@ -74,11 +96,24 @@ pub const Config = union(enum) {...@@ -74,11 +96,24 @@ pub const Config = union(enum) {
74 },96 },
75 .windows_api => |ctx| if (native_os == .windows) {97 .windows_api => |ctx| if (native_os == .windows) {
76 const attributes = switch (color) {98 const attributes = switch (color) {
77 .red => windows.FOREGROUND_RED | windows.FOREGROUND_INTENSITY,99 .black => 0,
78 .green => windows.FOREGROUND_GREEN | windows.FOREGROUND_INTENSITY,100 .red => windows.FOREGROUND_RED,
79 .yellow => windows.FOREGROUND_RED | windows.FOREGROUND_GREEN | windows.FOREGROUND_INTENSITY,101 .green => windows.FOREGROUND_GREEN,
80 .cyan => windows.FOREGROUND_GREEN | windows.FOREGROUND_BLUE | windows.FOREGROUND_INTENSITY,102 .yellow => windows.FOREGROUND_RED | windows.FOREGROUND_GREEN,
81 .white, .bold => windows.FOREGROUND_RED | windows.FOREGROUND_GREEN | windows.FOREGROUND_BLUE | windows.FOREGROUND_INTENSITY,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.
82 .dim => windows.FOREGROUND_INTENSITY,117 .dim => windows.FOREGROUND_INTENSITY,
83 .reset => ctx.reset_attributes,118 .reset => ctx.reset_attributes,
84 };119 };