Skip to content

Commit

Permalink
Use a function to detect color availability
Browse files Browse the repository at this point in the history
  • Loading branch information
Reokodoku committed Apr 29, 2024
1 parent a91a793 commit 8a3b0e9
Showing 1 changed file with 14 additions and 12 deletions.
26 changes: 14 additions & 12 deletions src/main.zig
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,19 @@ inline fn isPrintable(c: u8) bool {
};
}

inline fn useColor(stdout: std.fs.File, color_arg: ?bool) !bool {
var envs = try std.process.getEnvMap(allocator);
defer envs.deinit();

if (color_arg) |val| {
return val;
} else if (envs.get("NO_COLOR")) |val| {
if (!std.mem.eql(u8, val, ""))
return false;
}
return stdout.supportsAnsiEscapeCodes();
}

const DisplayLineOptions = struct {
color: bool,
uppercase: bool,
Expand Down Expand Up @@ -116,26 +129,15 @@ pub fn main() !void {
const args = try std.process.argsAlloc(allocator);
defer std.process.argsFree(allocator, args);

var envs = try std.process.getEnvMap(allocator);
defer envs.deinit();

const parsed_args = argparse.parse(args[1..]);

const file = try std.fs.cwd().openFile(parsed_args.filename, .{});
defer file.close();

const stdout = std.io.getStdOut();

var color = stdout.supportsAnsiEscapeCodes();
if (parsed_args.color) |val| {
color = val;
} else if (envs.get("NO_COLOR")) |val| {
if (!std.mem.eql(u8, val, ""))
color = false;
}

try display(file.reader(), stdout.writer(), .{
.color = color,
.color = try useColor(stdout, parsed_args.color),
.uppercase = parsed_args.uppercase orelse false,
.show_size = parsed_args.show_size orelse true,
.show_offset = parsed_args.show_offset orelse true,
Expand Down

0 comments on commit 8a3b0e9

Please sign in to comment.