From 195bad87ab988b40aaf5cf663fe859ea1b24b3f5 Mon Sep 17 00:00:00 2001 From: CJ van den Berg Date: Fri, 24 Jan 2025 11:04:20 +0100 Subject: [PATCH] feat(buffers): allow deleting more than one buffer while the palette is open --- src/tui/mode/overlay/buffer_palette.zig | 8 ++++---- src/tui/mode/overlay/palette.zig | 9 ++++++++- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/tui/mode/overlay/buffer_palette.zig b/src/tui/mode/overlay/buffer_palette.zig index 19a4aa1..c76df18 100644 --- a/src/tui/mode/overlay/buffer_palette.zig +++ b/src/tui/mode/overlay/buffer_palette.zig @@ -49,10 +49,10 @@ fn select(menu: **Type.MenuState, button: *Type.ButtonState) void { tp.self_pid().send(.{ "cmd", "navigate", .{ .file = file_path } }) catch |e| menu.*.opts.ctx.logger.err(module_name, e); } -pub fn delete_item(menu: *Type.MenuState, button: *Type.ButtonState) void { +pub fn delete_item(menu: *Type.MenuState, button: *Type.ButtonState) bool { var file_path: []const u8 = undefined; var iter = button.opts.label; - if (!(cbor.matchString(&iter, &file_path) catch false)) return; - tp.self_pid().send(.{ "cmd", "exit_overlay_mode" }) catch |e| menu.*.opts.ctx.logger.err(module_name, e); - tp.self_pid().send(.{ "cmd", "delete_buffer", .{file_path} }) catch |e| menu.*.opts.ctx.logger.err(module_name, e); + if (!(cbor.matchString(&iter, &file_path) catch false)) return false; + command.executeName("delete_buffer", command.fmt(.{file_path})) catch |e| menu.*.opts.ctx.logger.err(module_name, e); + return true; //refresh list } diff --git a/src/tui/mode/overlay/palette.zig b/src/tui/mode/overlay/palette.zig index 83553f2..f2cc3d2 100644 --- a/src/tui/mode/overlay/palette.zig +++ b/src/tui/mode/overlay/palette.zig @@ -430,7 +430,14 @@ pub fn Create(options: type) type { pub fn palette_menu_delete_item(self: *Self, _: Ctx) Result { if (@hasDecl(options, "delete_item")) { const button = self.menu.get_selected() orelse return; - options.delete_item(self.menu, button); + const refresh = options.delete_item(self.menu, button); + if (refresh) { + self.entries.clearRetainingCapacity(); + self.longest_hint = try options.load_entries(self); + if (self.entries.items.len > 0) + self.initial_selected = self.menu.selected; + try self.start_query(0); + } } } pub const palette_menu_delete_item_meta = .{};