+60
-9
src/main.zig
+60
-9
src/main.zig
···
23
23
\\ --hyperlinks=WHEN When to use OSC 8 hyperlinks (always, auto, never)
24
24
\\ --icons=WHEN When to display icons (always, auto, never)
25
25
\\ -l, --long Display extended file metadata
26
+
\\ --mode=WHEN When to display mode (always, auto, never)
27
+
\\ --user=WHEN When to display user (always, auto, never)
28
+
\\ --group=WHEN When to display group (always, auto, never)
26
29
\\ -r, --reverse Reverse the sort order
27
30
\\ -t, --time Sort the entries by modification time, most recent first
28
31
\\
···
38
41
@"group-directories-first": bool = true,
39
42
hyperlinks: When = .auto,
40
43
icons: When = .auto,
44
+
mode: When = .auto,
45
+
user: When = .auto,
46
+
group: When = .auto,
41
47
long: bool = false,
42
48
sort_by_mod_time: bool = false,
43
49
reverse_sort: bool = false,
···
108
114
}
109
115
}
110
116
117
+
fn showMode(self: Options) bool {
118
+
switch (self.mode) {
119
+
.never => return false,
120
+
.always => return true,
121
+
.auto => return self.isatty(),
122
+
}
123
+
}
124
+
125
+
fn showUser(self: Options) bool {
126
+
switch (self.user) {
127
+
.never => return false,
128
+
.always => return true,
129
+
.auto => return self.isatty(),
130
+
}
131
+
}
132
+
133
+
fn showGroup(self: Options) bool {
134
+
switch (self.group) {
135
+
.never => return false,
136
+
.always => return true,
137
+
.auto => return self.isatty(),
138
+
}
139
+
}
140
+
111
141
fn useHyperlinks(self: Options) bool {
112
142
switch (self.hyperlinks) {
113
143
.never => return false,
···
212
242
};
213
243
} else if (eql(opt, "icons")) {
214
244
cmd.opts.icons = std.meta.stringToEnum(Options.When, val) orelse {
215
-
try stderr.print("Invalid color option: '{s}'", .{val});
245
+
try stderr.print("Invalid icons option: '{s}'", .{val});
246
+
std.process.exit(1);
247
+
};
248
+
} else if (eql(opt, "mode")) {
249
+
cmd.opts.mode = std.meta.stringToEnum(Options.When, val) orelse {
250
+
try stderr.print("Invalid mode option: '{s}'", .{val});
251
+
std.process.exit(1);
252
+
};
253
+
} else if (eql(opt, "user")) {
254
+
cmd.opts.user = std.meta.stringToEnum(Options.When, val) orelse {
255
+
try stderr.print("Invalid user option: '{s}'", .{val});
256
+
std.process.exit(1);
257
+
};
258
+
} else if (eql(opt, "group")) {
259
+
cmd.opts.group = std.meta.stringToEnum(Options.When, val) orelse {
260
+
try stderr.print("Invalid group option: '{s}'", .{val});
216
261
std.process.exit(1);
217
262
};
218
263
} else if (eql(opt, "columns")) {
···
504
549
505
550
const mode = entry.modeStr();
506
551
507
-
try writer.writeAll(&mode);
508
-
try writer.writeByte(' ');
509
-
try writer.writeAll(user.name);
510
-
try writer.writeByteNTimes(' ', longest_user - user.name.len);
511
-
try writer.writeByte(' ');
512
-
try writer.writeAll(group.name);
513
-
try writer.writeByteNTimes(' ', longest_group - group.name.len);
514
-
try writer.writeByte(' ');
552
+
if (cmd.opts.showMode()) {
553
+
try writer.writeAll(&mode);
554
+
try writer.writeByte(' ');
555
+
}
556
+
if (cmd.opts.showUser()) {
557
+
try writer.writeAll(user.name);
558
+
try writer.writeByteNTimes(' ', longest_user - user.name.len);
559
+
try writer.writeByte(' ');
560
+
}
561
+
if (cmd.opts.showGroup()) {
562
+
try writer.writeAll(group.name);
563
+
try writer.writeByteNTimes(' ', longest_group - group.name.len);
564
+
try writer.writeByte(' ');
565
+
}
515
566
516
567
var size_buf: [16]u8 = undefined;
517
568
const size = try entry.humanReadableSize(&size_buf);
History
3 rounds
1 comment
abeestrada.com
submitted
#2
2 commits
expand
collapse
feat: add options to hide file mode, owner and/or group
fmt: order options in alphabetical order
merge conflicts detected
expand
collapse
expand
collapse
- src/main.zig:24
- src/main.zig:20
expand 1 comment
abeestrada.com
submitted
#1
expand 0 comments
abeestrada.com
submitted
#0
1 commit
expand
collapse
feat: add options to hide file mode, owner and/or group
-oto disable showing owner,-gto disable showing group)parseArgBoolrather than WHEN