diff --git a/README.md b/README.md index 43866225..33bd3a7a 100644 --- a/README.md +++ b/README.md @@ -133,7 +133,7 @@ require('copilot').setup({ enabled = true, auto_trigger = false, hide_during_completion = true, - debounce = 75, + debounce = 15, trigger_on_accept = true, keymap = { accept = "", @@ -142,6 +142,7 @@ require('copilot').setup({ next = "", prev = "", dismiss = "", + toggle_auto_trigger = false, }, }, nes = { diff --git a/lua/copilot/config/suggestion.lua b/lua/copilot/config/suggestion.lua index 206cc9c1..7427cb5c 100644 --- a/lua/copilot/config/suggestion.lua +++ b/lua/copilot/config/suggestion.lua @@ -33,6 +33,7 @@ local suggestion = { next = "", prev = "", dismiss = "", + toggle_auto_trigger = false, }, }, } @@ -51,6 +52,7 @@ function suggestion.validate(config) vim.validate("keymap.next", config.keymap.next, { "string", "boolean" }) vim.validate("keymap.prev", config.keymap.prev, { "string", "boolean" }) vim.validate("keymap.dismiss", config.keymap.dismiss, { "string", "boolean" }) + vim.validate("keymap.toggle_auto_trigger", config.keymap.toggle_auto_trigger, { "string", "boolean" }) end return suggestion diff --git a/lua/copilot/suggestion/init.lua b/lua/copilot/suggestion/init.lua index b99006f3..ea556f5b 100644 --- a/lua/copilot/suggestion/init.lua +++ b/lua/copilot/suggestion/init.lua @@ -169,6 +169,14 @@ function M.set_keymap(bufnr) return false end, "[copilot] dismiss suggestion", bufnr) + + keymaps.register_keymap( + "i", + keymap.toggle_auto_trigger, + M.toggle_auto_trigger, + "[copilot] toggle auto trigger", + bufnr + ) end ---@param bufnr integer @@ -184,6 +192,7 @@ function M.unset_keymap(bufnr) keymaps.unset_keymap_if_exists("i", keymap.next, bufnr) keymaps.unset_keymap_if_exists("i", keymap.prev, bufnr) keymaps.unset_keymap_if_exists("i", keymap.dismiss, bufnr) + keymaps.unset_keymap_if_exists("i", keymap.toggle_auto_trigger, bufnr) end local function stop_timer() @@ -733,7 +742,21 @@ end -- toggles auto trigger for the current buffer function M.toggle_auto_trigger() - vim.b.copilot_suggestion_auto_trigger = not should_auto_trigger() + local bufnr = vim.api.nvim_get_current_buf() + local new_state = not should_auto_trigger() + vim.b.copilot_suggestion_auto_trigger = new_state + + -- Long debounce will still show suggestions after toggling in + -- insert mode, so we clear them manually. + if not new_state then + local ctx = get_ctx() + clear(ctx) + M.clear_preview() + else + request_suggestion_when_auto_trigger(bufnr) + end + + logger.trace("auto trigger toggled to " .. tostring(new_state)) end local function on_insert_leave()