feat(buffers): add dirty state indicator to buffer switcher

This commit is contained in:
CJ van den Berg 2025-01-21 22:53:09 +01:00
parent 3f06f6b19c
commit 84655c4ff8
Signed by: neurocyte
GPG key ID: 8EB1E1BB660E3FB9

View file

@ -10,18 +10,22 @@ pub const Type = @import("palette.zig").Create(@This());
pub const label = "Switch buffers"; pub const label = "Switch buffers";
pub const name = " buffer"; pub const name = " buffer";
pub const description = "buffer"; pub const description = "buffer";
const dirty_indicator = "";
pub const Entry = struct { pub const Entry = struct {
label: []const u8, label: []const u8,
hint: []const u8,
}; };
pub fn load_entries(palette: *Type) !usize { pub fn load_entries(palette: *Type) !usize {
const buffer_manager = tui.get_buffer_manager() orelse return 0; const buffer_manager = tui.get_buffer_manager() orelse return 0;
const buffers = try buffer_manager.list_most_recently_used(palette.allocator); const buffers = try buffer_manager.list_most_recently_used(palette.allocator);
defer palette.allocator.free(buffers); defer palette.allocator.free(buffers);
for (buffers) |buffer| for (buffers) |buffer| {
(try palette.entries.addOne()).* = .{ .label = buffer.file_path }; const hint = if (buffer.is_dirty()) dirty_indicator else "";
return if (palette.entries.items.len == 0) label.len else 0; (try palette.entries.addOne()).* = .{ .label = buffer.file_path, .hint = hint };
}
return if (palette.entries.items.len == 0) label.len else 2;
} }
pub fn add_menu_entry(palette: *Type, entry: *Entry, matches: ?[]const usize) !void { pub fn add_menu_entry(palette: *Type, entry: *Entry, matches: ?[]const usize) !void {
@ -29,6 +33,7 @@ pub fn add_menu_entry(palette: *Type, entry: *Entry, matches: ?[]const usize) !v
defer value.deinit(); defer value.deinit();
const writer = value.writer(); const writer = value.writer();
try cbor.writeValue(writer, entry.label); try cbor.writeValue(writer, entry.label);
try cbor.writeValue(writer, entry.hint);
try cbor.writeValue(writer, matches orelse &[_]usize{}); try cbor.writeValue(writer, matches orelse &[_]usize{});
try palette.menu.add_item_with_handler(value.items, select); try palette.menu.add_item_with_handler(value.items, select);
palette.items += 1; palette.items += 1;