diff --git a/src/tui/mode/overlay/completion_dropdown.zig b/src/tui/mode/overlay/completion_dropdown.zig index ce1609c..a85d745 100644 --- a/src/tui/mode/overlay/completion_dropdown.zig +++ b/src/tui/mode/overlay/completion_dropdown.zig @@ -130,6 +130,16 @@ pub fn update_query(self: *Type, query: []const u8) void { return; } +pub fn delete_word_empty(self: *Type) void { + cancel(self) catch return; + tp.self_pid().send(.{ "cmd", "delete_word_left" }) catch |e| self.logger.err(module_name, e); +} + +pub fn delete_empty(self: *Type) void { + cancel(self) catch return; + tp.self_pid().send(.{ "cmd", "smart_delete_backward" }) catch |e| self.logger.err(module_name, e); +} + fn get_insert_selection(self: *Type, cursor: ed.Cursor) ed.Selection { return if (self.value.replace) |sel| sel diff --git a/src/tui/mode/overlay/dropdown.zig b/src/tui/mode/overlay/dropdown.zig index 1a54f85..41448a9 100644 --- a/src/tui/mode/overlay/dropdown.zig +++ b/src/tui/mode/overlay/dropdown.zig @@ -354,6 +354,10 @@ pub fn Create(options: type) type { } fn delete_word(self: *Self) !void { + if (self.query.items.len == 0 and @hasDecl(options, "delete_word_empty")) { + options.delete_word_empty(self); + return; + } if (std.mem.lastIndexOfAny(u8, self.query.items, "/\\. -_")) |pos| { self.query.shrinkRetainingCapacity(pos); } else { @@ -369,6 +373,9 @@ pub fn Create(options: type) type { 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); + } else { + if (@hasDecl(options, "delete_empty")) + options.delete_empty(self); } try self.start_query(0); }