Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion build.zig
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,6 @@ pub fn build(b: *std.Build) void {
"tests/registry_import_test.zig",
"tests/registry_test.zig",
"tests/session_test.zig",
"tests/terminal_color_test.zig",
"tests/time_relative_test.zig",
"tests/table_layout_test.zig",
"tests/tui_display_test.zig",
Expand Down
4 changes: 2 additions & 2 deletions src/cli/help.zig
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ pub fn printHelp() !void {
var stdout: io_util.Stdout = undefined;
stdout.init();
const out = stdout.out();
const use_color = style.stdoutColorEnabled();
const use_color = stdout.color_enabled;
try writeHelp(out, use_color);
try out.flush();
}
Expand Down Expand Up @@ -89,7 +89,7 @@ pub fn printCommandHelp(topic: HelpTopic) !void {
var stdout: io_util.Stdout = undefined;
stdout.init();
const out = stdout.out();
try writeCommandHelp(out, style.stdoutColorEnabled(), topic);
try writeCommandHelp(out, stdout.color_enabled, topic);
try out.flush();
}

Expand Down
5 changes: 3 additions & 2 deletions src/cli/live_remove.zig
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ const terminal_color = @import("../terminal/color.zig");
const selection = @import("selection.zig");
const row_data = @import("rows.zig");
const render = @import("render.zig");
const style = @import("style.zig");
const picker = @import("picker.zig");
const tui_mod = @import("tui.zig");
const live_tui = @import("live_tui.zig");
Expand Down Expand Up @@ -106,15 +107,15 @@ pub fn runRemoveLiveActions(
bounded_viewport.max_cols = tui.terminalCols();

frame.clearRetainingCapacity();
var styled_frame = style.StyledWriter.init(&frame.writer, use_color);
renderRemoveScreenViewport(
&frame.writer,
&styled_frame,
borrowed.reg,
rows.items,
@max(@as(usize, 2), indexWidth(rows.selectable_row_indices.len)),
rows.widths,
cursor_idx,
checked_flags,
use_color,
status_line,
action_message orelse "",
number_buf[0..number_len],
Expand Down
5 changes: 3 additions & 2 deletions src/cli/live_switch.zig
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ const terminal_color = @import("../terminal/color.zig");
const selection = @import("selection.zig");
const row_data = @import("rows.zig");
const render = @import("render.zig");
const style = @import("style.zig");
const picker = @import("picker.zig");
const tui_mod = @import("tui.zig");
const live_tui = @import("live_tui.zig");
Expand Down Expand Up @@ -140,14 +141,14 @@ pub fn runSwitchLiveActions(
bounded_viewport.max_cols = tui.terminalCols();

frame.clearRetainingCapacity();
var styled_frame = style.StyledWriter.init(&frame.writer, use_color);
renderSwitchScreenViewport(
&frame.writer,
&styled_frame,
borrowed.reg,
rows.items,
@max(@as(usize, 2), indexWidth(total_accounts)),
rows.widths,
selected_display_idx,
use_color,
status_line,
action_message orelse "",
number_buf[0..number_len],
Expand Down
9 changes: 5 additions & 4 deletions src/cli/live_view.zig
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ const terminal_color = @import("../terminal/color.zig");
const selection = @import("selection.zig");
const row_data = @import("rows.zig");
const render = @import("render.zig");
const style = @import("style.zig");
const picker = @import("picker.zig");
const tui_mod = @import("tui.zig");
const live_tui = @import("live_tui.zig");
Expand Down Expand Up @@ -107,14 +108,14 @@ pub fn selectAccountWithLiveUpdates(
bounded_viewport.max_cols = tui.terminalCols();

frame.clearRetainingCapacity();
var styled_frame = style.StyledWriter.init(&frame.writer, use_color);
renderSwitchScreenViewport(
&frame.writer,
&styled_frame,
borrowed.reg,
rows.items,
@max(@as(usize, 2), indexWidth(total_accounts)),
rows.widths,
selected_display_idx,
use_color,
status_line,
"",
number_buf[0..number_len],
Expand Down Expand Up @@ -286,13 +287,13 @@ pub fn viewAccountsWithLiveUpdates(
bounded_viewport.max_cols = tui.terminalCols();

frame.clearRetainingCapacity();
var styled_frame = style.StyledWriter.init(&frame.writer, use_color);
renderListScreenViewport(
&frame.writer,
&styled_frame,
&current_display.reg,
rows.items,
@max(@as(usize, 2), indexWidth(rows.selectable_row_indices.len)),
rows.widths,
use_color,
status_line,
bounded_viewport,
) catch |err| return mapTuiOutputError(err);
Expand Down
10 changes: 5 additions & 5 deletions src/cli/login.zig
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
const std = @import("std");
const app_runtime = @import("../core/runtime.zig");
const io_util = @import("../core/io_util.zig");
const types = @import("types.zig");
const output = @import("output.zig");
const style = @import("style.zig");

pub fn codexLoginArgs(opts: types.LoginOptions) []const []const u8 {
return if (opts.device_auth)
Expand All @@ -22,10 +22,10 @@ fn ensureCodexLoginSucceeded(term: std.process.Child.Term) !void {
}

fn writeCodexLoginLaunchFailureHint(err_name: []const u8) !void {
var buffer: [512]u8 = undefined;
var writer = std.Io.File.stderr().writer(app_runtime.io(), &buffer);
const out = &writer.interface;
try output.writeCodexLoginLaunchFailureHintTo(out, err_name, style.stderrColorEnabled());
var stderr: io_util.Stderr = undefined;
stderr.init();
const out = stderr.out();
try output.writeCodexLoginLaunchFailureHintTo(out, err_name, stderr.color_enabled);
try out.flush();
}

Expand Down
121 changes: 56 additions & 65 deletions src/cli/output.zig
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
const std = @import("std");
const app_runtime = @import("../core/runtime.zig");
const builtin = @import("builtin");
const display_rows = @import("../tui/display.zig");
const registry = @import("../registry/root.zig");
Expand All @@ -21,10 +20,10 @@ pub fn importReportMarker(outcome: registry.ImportOutcome, is_windows: bool) []c
}

pub fn printUsageError(usage_err: *const UsageError) !void {
var buffer: [2048]u8 = undefined;
var writer = std.Io.File.stderr().writer(app_runtime.io(), &buffer);
const out = &writer.interface;
const use_color = style.stderrColorEnabled();
var stderr: io_util.Stderr = undefined;
stderr.init();
const out = stderr.out();
const use_color = stderr.color_enabled;
try writeErrorPrefixTo(out, use_color);
try out.print(" {s}\n\n", .{usage_err.message});
try help.writeUsageSection(out, usage_err.topic);
Expand All @@ -45,9 +44,9 @@ pub fn printVersion() !void {
pub fn printImportReport(report: *const registry.ImportReport) !void {
var stdout: io_util.Stdout = undefined;
stdout.init();
var stderr_buffer: [4096]u8 = undefined;
var stderr_writer = std.Io.File.stderr().writer(app_runtime.io(), &stderr_buffer);
try writeImportReport(stdout.out(), &stderr_writer.interface, report);
var stderr: io_util.Stderr = undefined;
stderr.init();
try writeImportReport(stdout.out(), stderr.out(), report);
}

pub fn writeImportReport(
Expand Down Expand Up @@ -115,10 +114,10 @@ pub fn writeHintPrefixTo(out: *std.Io.Writer, use_color: bool) !void {
}

pub fn printAccountNotFoundError(query: []const u8) !void {
var buffer: [512]u8 = undefined;
var writer = std.Io.File.stderr().writer(app_runtime.io(), &buffer);
const out = &writer.interface;
const use_color = style.stderrColorEnabled();
var stderr: io_util.Stderr = undefined;
stderr.init();
const out = stderr.out();
const use_color = stderr.color_enabled;
try writeErrorPrefixTo(out, use_color);
try out.print(" no account matches '{s}'.\n", .{query});
try writeHintPrefixTo(out, use_color);
Expand All @@ -127,10 +126,10 @@ pub fn printAccountNotFoundError(query: []const u8) !void {
}

pub fn printSwitchAccountNotFoundError(query: []const u8) !void {
var buffer: [768]u8 = undefined;
var writer = std.Io.File.stderr().writer(app_runtime.io(), &buffer);
const out = &writer.interface;
const use_color = style.stderrColorEnabled();
var stderr: io_util.Stderr = undefined;
stderr.init();
const out = stderr.out();
const use_color = stderr.color_enabled;
try writeErrorPrefixTo(out, use_color);
try out.print(" no switch target matches '{s}'.\n", .{query});
try writeHintPrefixTo(out, use_color);
Expand All @@ -139,10 +138,10 @@ pub fn printSwitchAccountNotFoundError(query: []const u8) !void {
}

pub fn printAliasAccountNotFoundError(query: []const u8) !void {
var buffer: [768]u8 = undefined;
var writer = std.Io.File.stderr().writer(app_runtime.io(), &buffer);
const out = &writer.interface;
const use_color = style.stderrColorEnabled();
var stderr: io_util.Stderr = undefined;
stderr.init();
const out = stderr.out();
const use_color = stderr.color_enabled;
try writeErrorPrefixTo(out, use_color);
try out.print(" no alias target matches '{s}'.\n", .{query});
try writeHintPrefixTo(out, use_color);
Expand All @@ -156,10 +155,10 @@ pub fn printAccountNotFoundErrors(queries: []const []const u8) !void {
return printAccountNotFoundError(queries[0]);
}

var buffer: [1024]u8 = undefined;
var writer = std.Io.File.stderr().writer(app_runtime.io(), &buffer);
const out = &writer.interface;
const use_color = style.stderrColorEnabled();
var stderr: io_util.Stderr = undefined;
stderr.init();
const out = stderr.out();
const use_color = stderr.color_enabled;
try writeErrorPrefixTo(out, use_color);
try out.writeAll(" no account matches: ");
for (queries, 0..) |query, idx| {
Expand All @@ -173,10 +172,10 @@ pub fn printAccountNotFoundErrors(queries: []const []const u8) !void {
}

pub fn printSwitchRequiresTtyError() !void {
var buffer: [512]u8 = undefined;
var writer = std.Io.File.stderr().writer(app_runtime.io(), &buffer);
const out = &writer.interface;
const use_color = style.stderrColorEnabled();
var stderr: io_util.Stderr = undefined;
stderr.init();
const out = stderr.out();
const use_color = stderr.color_enabled;
try writeErrorPrefixTo(out, use_color);
try out.writeAll(" interactive switch requires a TTY.\n");
try writeHintPrefixTo(out, use_color);
Expand All @@ -185,10 +184,10 @@ pub fn printSwitchRequiresTtyError() !void {
}

pub fn printListRequiresTtyError() !void {
var buffer: [512]u8 = undefined;
var writer = std.Io.File.stderr().writer(app_runtime.io(), &buffer);
const out = &writer.interface;
const use_color = style.stderrColorEnabled();
var stderr: io_util.Stderr = undefined;
stderr.init();
const out = stderr.out();
const use_color = stderr.color_enabled;
try writeErrorPrefixTo(out, use_color);
try out.writeAll(" live list requires a TTY.\n");
try writeHintPrefixTo(out, use_color);
Expand All @@ -197,10 +196,10 @@ pub fn printListRequiresTtyError() !void {
}

pub fn printRemoveRequiresTtyError() !void {
var buffer: [512]u8 = undefined;
var writer = std.Io.File.stderr().writer(app_runtime.io(), &buffer);
const out = &writer.interface;
const use_color = style.stderrColorEnabled();
var stderr: io_util.Stderr = undefined;
stderr.init();
const out = stderr.out();
const use_color = stderr.color_enabled;
try writeErrorPrefixTo(out, use_color);
try out.writeAll(" interactive remove requires a TTY.\n");
try writeHintPrefixTo(out, use_color);
Expand All @@ -209,10 +208,10 @@ pub fn printRemoveRequiresTtyError() !void {
}

pub fn printAliasRequiresTtyError() !void {
var buffer: [512]u8 = undefined;
var writer = std.Io.File.stderr().writer(app_runtime.io(), &buffer);
const out = &writer.interface;
const use_color = style.stderrColorEnabled();
var stderr: io_util.Stderr = undefined;
stderr.init();
const out = stderr.out();
const use_color = stderr.color_enabled;
try writeErrorPrefixTo(out, use_color);
try out.writeAll(" multiple alias targets require a TTY.\n");
try writeHintPrefixTo(out, use_color);
Expand All @@ -221,20 +220,20 @@ pub fn printAliasRequiresTtyError() !void {
}

pub fn printInvalidAliasError(reason: []const u8) !void {
var buffer: [768]u8 = undefined;
var writer = std.Io.File.stderr().writer(app_runtime.io(), &buffer);
const out = &writer.interface;
const use_color = style.stderrColorEnabled();
var stderr: io_util.Stderr = undefined;
stderr.init();
const out = stderr.out();
const use_color = stderr.color_enabled;
try writeErrorPrefixTo(out, use_color);
try out.print(" invalid alias: {s}\n", .{reason});
try out.flush();
}

pub fn printDuplicateAliasError(alias_value: []const u8, email: []const u8) !void {
var buffer: [768]u8 = undefined;
var writer = std.Io.File.stderr().writer(app_runtime.io(), &buffer);
const out = &writer.interface;
const use_color = style.stderrColorEnabled();
var stderr: io_util.Stderr = undefined;
stderr.init();
const out = stderr.out();
const use_color = stderr.color_enabled;
try writeErrorPrefixTo(out, use_color);
try out.print(" alias '{s}' is already used by {s}.\n", .{ alias_value, email });
try out.flush();
Expand Down Expand Up @@ -267,10 +266,10 @@ pub fn printAliasCleared(rec: *const registry.AccountRecord, old_alias: []const
}

pub fn printInvalidRemoveSelectionError() !void {
var buffer: [512]u8 = undefined;
var writer = std.Io.File.stderr().writer(app_runtime.io(), &buffer);
const out = &writer.interface;
const use_color = style.stderrColorEnabled();
var stderr: io_util.Stderr = undefined;
stderr.init();
const out = stderr.out();
const use_color = stderr.color_enabled;
try writeErrorPrefixTo(out, use_color);
try out.writeAll(" invalid remove selection input.\n");
try writeHintPrefixTo(out, use_color);
Expand Down Expand Up @@ -321,10 +320,10 @@ pub fn writeRemoveConfirmationTo(out: *std.Io.Writer, labels: []const []const u8
}

pub fn printRemoveConfirmationUnavailableError(labels: []const []const u8) !void {
var buffer: [1024]u8 = undefined;
var writer = std.Io.File.stderr().writer(app_runtime.io(), &buffer);
const out = &writer.interface;
const use_color = style.stderrColorEnabled();
var stderr: io_util.Stderr = undefined;
stderr.init();
const out = stderr.out();
const use_color = stderr.color_enabled;
try writeMatchedAccountsListTo(out, labels);
try writeErrorPrefixTo(out, use_color);
try out.writeAll(" multiple accounts match the query in non-interactive mode.\n");
Expand Down Expand Up @@ -377,21 +376,13 @@ pub fn printSwitchedAccount(
var stdout: io_util.Stdout = undefined;
stdout.init();
const out = stdout.out();
const use_color = style.stdoutColorEnabled();
const use_color = stdout.color_enabled;
if (use_color) try out.writeAll(style.ansi.green);
try out.print("Switched to {s}\n", .{label});
if (use_color) try out.writeAll(style.ansi.reset);
try out.flush();
}

fn writeCodexLoginLaunchFailureHint(err_name: []const u8, use_color: bool) !void {
var buffer: [512]u8 = undefined;
var writer = std.Io.File.stderr().writer(app_runtime.io(), &buffer);
const out = &writer.interface;
try writeCodexLoginLaunchFailureHintTo(out, err_name, use_color);
try out.flush();
}

pub fn writeCodexLoginLaunchFailureHintTo(out: *std.Io.Writer, err_name: []const u8, use_color: bool) !void {
try writeErrorPrefixTo(out, use_color);
if (std.mem.eql(u8, err_name, "FileNotFound")) {
Expand Down
Loading
Loading