aboutsummaryrefslogtreecommitdiff
path: root/lib/std/Io/File/Writer.zig
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2025-12-10 20:55:11 -0800
committerAndrew Kelley <andrew@ziglang.org>2025-12-23 22:15:09 -0800
commitb042e935228db5d46271d4d3d17afeb9ba5d7ce3 (patch)
treefd02941ee06e6abed96f0f1193a27ce1dfe41cc3 /lib/std/Io/File/Writer.zig
parent7837d975dcaa17ff22f536607c4ff6db7b697b04 (diff)
downloadzig-b042e935228db5d46271d4d3d17afeb9ba5d7ce3.tar.gz
zig-b042e935228db5d46271d4d3d17afeb9ba5d7ce3.zip
std: update tty config references in the build system
Diffstat (limited to 'lib/std/Io/File/Writer.zig')
-rw-r--r--lib/std/Io/File/Writer.zig41
1 files changed, 36 insertions, 5 deletions
diff --git a/lib/std/Io/File/Writer.zig b/lib/std/Io/File/Writer.zig
index 8f9f573a4b..03e4ad8a15 100644
--- a/lib/std/Io/File/Writer.zig
+++ b/lib/std/Io/File/Writer.zig
@@ -99,7 +99,7 @@ pub const Mode = union(enum) {
pub const SetColorError = std.os.windows.SetConsoleTextAttributeError || Io.Writer.Error;
- pub fn setColor(mode: Mode, io_w: *Io.Writer, color: Color) Mode.SetColorError!void {
+ pub fn setColor(mode: Mode, io_w: *Io.Writer, color: Color) SetColorError!void {
switch (mode) {
.streaming, .positional, .streaming_simple, .positional_simple, .failure => return,
.terminal_escaped => {
@@ -155,6 +155,34 @@ pub const Mode = union(enum) {
},
}
}
+
+ fn DecorateArgs(comptime Args: type) type {
+ const fields = @typeInfo(Args).@"struct".fields;
+ var new_fields: [fields.len]type = undefined;
+ for (fields, &new_fields) |old, *new| {
+ if (old.type == std.debug.FormatStackTrace) {
+ new.* = std.debug.FormatStackTrace.Decorated;
+ } else {
+ new.* = old.type;
+ }
+ }
+ return @Tuple(&new_fields);
+ }
+
+ pub fn decorateArgs(file_writer_mode: std.Io.File.Writer.Mode, args: anytype) DecorateArgs(@TypeOf(args)) {
+ var new_args: DecorateArgs(@TypeOf(args)) = undefined;
+ inline for (args, &new_args) |old, *new| {
+ if (@TypeOf(old) == std.debug.FormatStackTrace) {
+ new.* = .{
+ .stack_trace = old.stack_trace,
+ .file_writer_mode = file_writer_mode,
+ };
+ } else {
+ new.* = old;
+ }
+ }
+ return new_args;
+ }
};
pub const Error = error{
@@ -426,6 +454,8 @@ pub fn end(w: *Writer) EndError!void {
.streaming,
.streaming_simple,
+ .terminal_escaped,
+ .terminal_winapi,
.failure,
=> {},
}
@@ -453,10 +483,11 @@ pub const Color = enum {
reset,
};
-pub const SetColorError = Mode.SetColorError;
-
-pub fn setColor(w: *Writer, color: Color) SetColorError!void {
- return w.mode.setColor(&w.interface, color);
+pub fn setColor(w: *Writer, color: Color) Io.Writer.Error!void {
+ return w.mode.setColor(&w.interface, color) catch |err| switch (err) {
+ error.WriteFailed => |e| return e,
+ else => |e| w.err = e,
+ };
}
pub fn disableEscape(w: *Writer) Mode {