From 911fc3160a8f35db405b155b8cf207c45338cd4d Mon Sep 17 00:00:00 2001 From: CJ van den Berg Date: Tue, 23 Dec 2025 23:53:14 +0100 Subject: [PATCH] refactor: add support for backspace during completion --- src/keybind/builtin/flow.json | 6 ++++-- src/tui/mode/overlay/completion_dropdown.zig | 5 ++++- src/tui/mode/overlay/dropdown.zig | 14 ++++++++++++++ 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/src/keybind/builtin/flow.json b/src/keybind/builtin/flow.json index 081c8df..41af849 100644 --- a/src/keybind/builtin/flow.json +++ b/src/keybind/builtin/flow.json @@ -385,7 +385,8 @@ ["ctrl+up", "palette_menu_up"], ["ctrl+down", "palette_menu_down"], ["ctrl+enter", "palette_menu_activate"], - ["tab", "palette_menu_complete"] + ["tab", "palette_menu_complete"], + ["backspace", "overlay_delete_backwards"] ] }, "overlay/dropdown": { @@ -398,7 +399,8 @@ ["up", "palette_menu_up"], ["down", "palette_menu_down"], ["enter", "palette_menu_activate"], - ["tab", "palette_menu_complete"] + ["tab", "palette_menu_complete"], + ["backspace", "overlay_delete_backwards"] ] }, "mini/numeric": { diff --git a/src/tui/mode/overlay/completion_dropdown.zig b/src/tui/mode/overlay/completion_dropdown.zig index c09f92d..779559b 100644 --- a/src/tui/mode/overlay/completion_dropdown.zig +++ b/src/tui/mode/overlay/completion_dropdown.zig @@ -110,7 +110,10 @@ pub fn update_query(self: *Type, query: []const u8) void { const primary = editor.get_primary(); primary.selection = get_insert_selection(self, editor.get_primary().cursor); const b = editor.buf_for_update() catch return; - const root_ = editor.insert(b.root, primary, query, b.allocator) catch return; + const root_ = if (query.len > 0) + editor.insert(b.root, primary, query, b.allocator) catch return + else + editor.delete_selection(b.root, primary, b.allocator) catch return; self.value.cursor = editor.get_primary().cursor; if (self.value.replace) |*sel| sel.* = .{ .begin = sel.begin, .end = self.value.cursor }; primary.selection = null; diff --git a/src/tui/mode/overlay/dropdown.zig b/src/tui/mode/overlay/dropdown.zig index a825e08..a629c84 100644 --- a/src/tui/mode/overlay/dropdown.zig +++ b/src/tui/mode/overlay/dropdown.zig @@ -353,6 +353,15 @@ pub fn Create(options: type) type { return matches.items.len; } + fn delete_code_point(self: *Self) !void { + if (self.query.items.len > 0) { + self.query.shrinkRetainingCapacity(self.query.items.len - tui.egc_last(self.query.items).len); + if (@hasDecl(options, "update_query")) + options.update_query(self, self.query.items); + } + try self.start_query(0); + } + fn insert_code_point(self: *Self, c: u32) !void { var buf: [6]u8 = undefined; const bytes = try input.ucs32_to_utf8(&[_]u32{c}, &buf); @@ -523,6 +532,11 @@ pub fn Create(options: type) type { } pub const palette_menu_cancel_meta: Meta = .{}; + pub fn overlay_delete_backwards(self: *Self, _: Ctx) Result { + self.delete_code_point() catch |e| return tp.exit_error(e, @errorReturnTrace()); + } + pub const overlay_delete_backwards_meta: Meta = .{ .description = "Delete backwards" }; + pub fn overlay_insert_code_point(self: *Self, ctx: Ctx) Result { var egc: u32 = 0; if (!try ctx.args.match(.{tp.extract(&egc)}))