feat: add experimental every_keystroke completion trigger mode

This commit is contained in:
CJ van den Berg 2026-01-23 16:00:53 +01:00
parent 775d08b88d
commit 16e26e7e7e
Signed by: neurocyte
GPG key ID: 8EB1E1BB660E3FB9
3 changed files with 20 additions and 1 deletions

View file

@ -178,6 +178,7 @@ pub const InitialFindQuery = enum {
pub const CompletionTrigger = enum {
manual,
automatic,
every_keystroke,
};
pub const CompletionStyle = enum {

View file

@ -6378,7 +6378,11 @@ pub const Editor = struct {
}
pub fn run_triggers(self: *Self, cursel: *const CurSel, char: u8, event: TriggerEvent) void {
if (tui.config().completion_trigger == .manual) return;
switch (tui.config().completion_trigger) {
.manual => return,
.every_keystroke => return self.run_triggers_every_keystroke(cursel, char, event),
.automatic => {},
}
switch (char) {
'\n', '\t', ' ' => return,
else => {},
@ -6391,6 +6395,19 @@ pub const Editor = struct {
};
}
pub fn run_triggers_every_keystroke(self: *Self, cursel: *const CurSel, char: u8, event: TriggerEvent) void {
switch (char) {
'\n', '\t', ' ' => return,
else => {},
}
if (!cursel.cursor.eql(self.get_primary().cursor)) return;
for (self.get_event_triggers(event).items) |item| {
if (command.log_execute)
self.logger.print("trigger: {t} '{c}' {?s}({d})", .{ event, char, command.get_name(item.command), item.command });
return tp.self_pid().send(.{ "cmd", "run_trigger", .{ item.command, [_]u8{char} } }) catch {};
}
}
pub fn run_trigger(_: *Self, ctx: Context) Result {
var cmd: command.ID = undefined;
var trigger_char: []const u8 = undefined;

View file

@ -1144,6 +1144,7 @@ const cmds = struct {
self.config_.completion_trigger = switch (self.config_.completion_trigger) {
.manual => .automatic,
.automatic => .manual,
.every_keystroke => .manual,
};
defer self.logger.print("{t} completion", .{self.config_.completion_trigger});
try save_config();