this repo has no description

Compare changes

Choose any two refs to compare.

Changed files
+60 -9
src
+60 -9
src/main.zig
··· 20 20 \\ -A, --almost-all Like --all, but skips implicit "." and ".." directories 21 21 \\ -C, --columns Print the output in columns 22 22 \\ --color=WHEN When to use colors (always, auto, never) 23 + \\ --group=WHEN When to display group (always, auto, never) 23 24 \\ --group-directories-first Print all directories before printing regular files 24 25 \\ --hyperlinks=WHEN When to use OSC 8 hyperlinks (always, auto, never) 25 26 \\ --icons=WHEN When to display icons (always, auto, never) 26 27 \\ -l, --long Display extended file metadata 28 + \\ --mode=WHEN When to display mode (always, auto, never) 27 29 \\ -r, --reverse Reverse the sort order 28 30 \\ -t, --time Sort the entries by modification time, most recent first 31 + \\ --user=WHEN When to display user (always, auto, never) 29 32 \\ 30 33 ; 31 34 ··· 39 42 @"group-directories-first": bool = true, 40 43 hyperlinks: When = .auto, 41 44 icons: When = .auto, 45 + mode: When = .auto, 46 + user: When = .auto, 47 + group: When = .auto, 42 48 long: bool = false, 43 49 sort_by_mod_time: bool = false, 44 50 reverse_sort: bool = false, ··· 109 115 } 110 116 } 111 117 118 + fn showMode(self: Options) bool { 119 + switch (self.mode) { 120 + .never => return false, 121 + .always => return true, 122 + .auto => return self.isatty(), 123 + } 124 + } 125 + 126 + fn showUser(self: Options) bool { 127 + switch (self.user) { 128 + .never => return false, 129 + .always => return true, 130 + .auto => return self.isatty(), 131 + } 132 + } 133 + 134 + fn showGroup(self: Options) bool { 135 + switch (self.group) { 136 + .never => return false, 137 + .always => return true, 138 + .auto => return self.isatty(), 139 + } 140 + } 141 + 112 142 fn useHyperlinks(self: Options) bool { 113 143 switch (self.hyperlinks) { 114 144 .never => return false, ··· 213 243 }; 214 244 } else if (eql(opt, "icons")) { 215 245 cmd.opts.icons = std.meta.stringToEnum(Options.When, val) orelse { 216 - try stderr.print("Invalid color option: '{s}'", .{val}); 246 + try stderr.print("Invalid icons option: '{s}'", .{val}); 247 + std.process.exit(1); 248 + }; 249 + } else if (eql(opt, "mode")) { 250 + cmd.opts.mode = std.meta.stringToEnum(Options.When, val) orelse { 251 + try stderr.print("Invalid mode option: '{s}'", .{val}); 252 + std.process.exit(1); 253 + }; 254 + } else if (eql(opt, "user")) { 255 + cmd.opts.user = std.meta.stringToEnum(Options.When, val) orelse { 256 + try stderr.print("Invalid user option: '{s}'", .{val}); 257 + std.process.exit(1); 258 + }; 259 + } else if (eql(opt, "group")) { 260 + cmd.opts.group = std.meta.stringToEnum(Options.When, val) orelse { 261 + try stderr.print("Invalid group option: '{s}'", .{val}); 217 262 std.process.exit(1); 218 263 }; 219 264 } else if (eql(opt, "columns")) { ··· 503 548 504 549 const mode = entry.modeStr(); 505 550 506 - try writer.writeAll(&mode); 507 - try writer.writeByte(' '); 508 - try writer.writeAll(user.name); 509 - try writer.writeByteNTimes(' ', longest_user - user.name.len); 510 - try writer.writeByte(' '); 511 - try writer.writeAll(group.name); 512 - try writer.writeByteNTimes(' ', longest_group - group.name.len); 513 - try writer.writeByte(' '); 551 + if (cmd.opts.showMode()) { 552 + try writer.writeAll(&mode); 553 + try writer.writeByte(' '); 554 + } 555 + if (cmd.opts.showUser()) { 556 + try writer.writeAll(user.name); 557 + try writer.writeByteNTimes(' ', longest_user - user.name.len); 558 + try writer.writeByte(' '); 559 + } 560 + if (cmd.opts.showGroup()) { 561 + try writer.writeAll(group.name); 562 + try writer.writeByteNTimes(' ', longest_group - group.name.len); 563 + try writer.writeByte(' '); 564 + } 514 565 515 566 var size_buf: [16]u8 = undefined; 516 567 const size = try entry.humanReadableSize(&size_buf);