From 84655c4ff8b38b01deb0b194ff2a19e945b6e702 Mon Sep 17 00:00:00 2001 From: CJ van den Berg Date: Tue, 21 Jan 2025 22:53:09 +0100 Subject: [PATCH] feat(buffers): add dirty state indicator to buffer switcher --- src/tui/mode/overlay/buffer_palette.zig | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/tui/mode/overlay/buffer_palette.zig b/src/tui/mode/overlay/buffer_palette.zig index a8cff8e..96751a9 100644 --- a/src/tui/mode/overlay/buffer_palette.zig +++ b/src/tui/mode/overlay/buffer_palette.zig @@ -10,18 +10,22 @@ pub const Type = @import("palette.zig").Create(@This()); pub const label = "Switch buffers"; pub const name = " buffer"; pub const description = "buffer"; +const dirty_indicator = ""; pub const Entry = struct { label: []const u8, + hint: []const u8, }; pub fn load_entries(palette: *Type) !usize { const buffer_manager = tui.get_buffer_manager() orelse return 0; const buffers = try buffer_manager.list_most_recently_used(palette.allocator); defer palette.allocator.free(buffers); - for (buffers) |buffer| - (try palette.entries.addOne()).* = .{ .label = buffer.file_path }; - return if (palette.entries.items.len == 0) label.len else 0; + for (buffers) |buffer| { + const hint = if (buffer.is_dirty()) dirty_indicator else ""; + (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 { @@ -29,6 +33,7 @@ pub fn add_menu_entry(palette: *Type, entry: *Entry, matches: ?[]const usize) !v defer value.deinit(); const writer = value.writer(); try cbor.writeValue(writer, entry.label); + try cbor.writeValue(writer, entry.hint); try cbor.writeValue(writer, matches orelse &[_]usize{}); try palette.menu.add_item_with_handler(value.items, select); palette.items += 1;