地圖 (Jido) is a lightweight Unix TUI file explorer designed for speed and simplicity.
1const std = @import("std");
2
3const Self = @This();
4
5const Style = enum {
6 err,
7 info,
8};
9
10const Error = enum {
11 PermissionDenied,
12 UnknownError,
13 UnableToUndo,
14 UnableToOpenFile,
15 UnableToDeleteItem,
16 EditorNotSet,
17 ItemAlreadyExists,
18 UnableToRename,
19 IncorrectPath,
20};
21
22len: usize = 0,
23buf: [1024]u8 = undefined,
24style: Style = Style.info,
25fbs: std.io.FixedBufferStream([]u8) = undefined,
26
27pub fn init(self: *Self) void {
28 self.fbs = std.io.fixedBufferStream(&self.buf);
29}
30
31pub fn write(self: *Self, text: []const u8, style: Style) !void {
32 self.fbs.reset();
33 self.len = try self.fbs.write(text);
34
35 self.style = style;
36}
37
38pub fn write_err(self: *Self, err: Error) !void {
39 try switch (err) {
40 .PermissionDenied => self.write("Permission denied.", .err),
41 .UnknownError => self.write("An unknown error occurred.", .err),
42 .UnableToOpenFile => self.write("Unable to open file.", .err),
43 .UnableToDeleteItem => self.write("Unable to delete item.", .err),
44 .UnableToUndo => self.write("Unable to undo previous action.", .err),
45 .ItemAlreadyExists => self.write("Item already exists.", .err),
46 .UnableToRename => self.write("Unable to rename item.", .err),
47 .IncorrectPath => self.write("Unable to find path.", .err),
48 .EditorNotSet => self.write("$EDITOR is not set.", .err),
49 };
50}
51
52pub fn reset(self: *Self) void {
53 self.fbs.reset();
54 self.len = 0;
55 self.style = Style.info;
56}
57
58pub fn slice(self: *Self) []const u8 {
59 return self.buf[0..self.len];
60}