fix: cancel completion on update in automatic completion mode
If completion is automatically triggered (the default), then it also makes sense to automatically cancel completions in situations where a completion update would be required and we are *not* expected to automatically re-trigger.
This commit is contained in:
parent
4a97bd8774
commit
e26d86eca3
2 changed files with 17 additions and 0 deletions
|
|
@ -4995,6 +4995,15 @@ pub const Editor = struct {
|
||||||
_ = self.pop_tabstop();
|
_ = self.pop_tabstop();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn get_last_trigger_char(self: *Self) ?u8 {
|
||||||
|
const root = self.buf_root() catch return null;
|
||||||
|
var cursor = self.get_primary().cursor;
|
||||||
|
cursor.move_left(root, self.metrics) catch return null;
|
||||||
|
const egc, _, _ = cursor.egc_at(root, self.metrics) catch return null;
|
||||||
|
const char = if (egc.len == 1) egc[0] else return null;
|
||||||
|
return if (self.is_event_trigger(char, .insert)) char else null;
|
||||||
|
}
|
||||||
|
|
||||||
fn is_completion_boundary_left(root: Buffer.Root, cursor: *const Cursor, metrics: Buffer.Metrics, triggers: []const TriggerSymbol) bool {
|
fn is_completion_boundary_left(root: Buffer.Root, cursor: *const Cursor, metrics: Buffer.Metrics, triggers: []const TriggerSymbol) bool {
|
||||||
if (cursor.col == 0) return true;
|
if (cursor.col == 0) return true;
|
||||||
var next = cursor.*;
|
var next = cursor.*;
|
||||||
|
|
@ -6576,6 +6585,11 @@ pub const Editor = struct {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn is_event_trigger(self: *Self, char: u8, event: TriggerEvent) bool {
|
||||||
|
for (self.get_event_triggers(event).items) |item| if (item.char == char) return true;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
fn clear_event_triggers(self: *Self) void {
|
fn clear_event_triggers(self: *Self) void {
|
||||||
self.insert_triggers.deinit(self.allocator);
|
self.insert_triggers.deinit(self.allocator);
|
||||||
self.delete_triggers.deinit(self.allocator);
|
self.delete_triggers.deinit(self.allocator);
|
||||||
|
|
|
||||||
|
|
@ -381,6 +381,9 @@ const cmds = struct {
|
||||||
const Result = command.Result;
|
const Result = command.Result;
|
||||||
|
|
||||||
pub fn update_completion(self: *Type, _: Ctx) Result {
|
pub fn update_completion(self: *Type, _: Ctx) Result {
|
||||||
|
if (tui.config().completion_trigger == .automatic and self.value.editor.get_last_trigger_char() == null)
|
||||||
|
return tp.self_pid().send(.{ "cmd", "palette_menu_cancel" }) catch |e| self.logger.err(module_name, e);
|
||||||
|
|
||||||
clear_entries(self);
|
clear_entries(self);
|
||||||
self.longest_hint = try load_entries(self);
|
self.longest_hint = try load_entries(self);
|
||||||
try update_query_text(self, self.value.editor.get_primary().cursor);
|
try update_query_text(self, self.value.editor.get_primary().cursor);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue