diff --git a/src/config.zig b/src/config.zig index 1ab3c0d..b58dfab 100644 --- a/src/config.zig +++ b/src/config.zig @@ -178,6 +178,7 @@ pub const InitialFindQuery = enum { pub const CompletionTrigger = enum { manual, automatic, + every_keystroke, }; pub const CompletionStyle = enum { diff --git a/src/tui/editor.zig b/src/tui/editor.zig index 3501611..068dfc8 100644 --- a/src/tui/editor.zig +++ b/src/tui/editor.zig @@ -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; diff --git a/src/tui/tui.zig b/src/tui/tui.zig index d12cc67..dc0344e 100644 --- a/src/tui/tui.zig +++ b/src/tui/tui.zig @@ -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();