地圖 (Jido) is a lightweight Unix TUI file explorer designed for speed and simplicity.
at v0.4.0 60 lines 1.6 kB view raw
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}