diff --git a/lua/cmp/core.lua b/lua/cmp/core.lua index 047449c..3cc0400 100644 --- a/lua/cmp/core.lua +++ b/lua/cmp/core.lua @@ -15,7 +15,13 @@ local core = {} core.SOURCE_TIMEOUT = 500 ---@type cmp.Menu -core.menu = menu.new() +core.menu = menu.new({ + on_select = function(e) + for _, c in ipairs(e:get_commit_characters()) do + keymap.listen(c, core.on_keymap) + end + end, +}) ---@type table core.sources = {} @@ -114,7 +120,7 @@ core.prepare = function() end ---Check auto-completion -core.autocomplete = function(event) +core.on_change = function(event) local ctx = core.get_context({ reason = types.cmp.ContextReason.Auto }) -- Skip autocompletion when the item is selected manually. diff --git a/lua/cmp/init.lua b/lua/cmp/init.lua index 27ccfd4..b15935c 100644 --- a/lua/cmp/init.lua +++ b/lua/cmp/init.lua @@ -65,11 +65,11 @@ end ---Handle events autocmd.subscribe('InsertEnter', function() core.prepare() - core.autocomplete('InsertEnter') + core.on_change('InsertEnter') end) autocmd.subscribe('TextChanged', function() - core.autocomplete('TextChanged') + core.on_change('TextChanged') end) autocmd.subscribe('InsertLeave', function() diff --git a/lua/cmp/menu.lua b/lua/cmp/menu.lua index da1929d..bd1b85d 100644 --- a/lua/cmp/menu.lua +++ b/lua/cmp/menu.lua @@ -5,6 +5,9 @@ local types = require('cmp.types') local config = require('cmp.config') local autocmd = require('cmp.autocmd') +---@class cmp.MenuOption +---@field on_select fun(e: cmp.Entry) + ---@class cmp.Menu ---@field public float cmp.Float ---@field public cache cmp.Cache @@ -19,12 +22,13 @@ local autocmd = require('cmp.autocmd') local menu = {} ---Create menu +---@param opts cmp.MenuOption ---@return cmp.Menu -menu.new = function() +menu.new = function(opts) local self = setmetatable({}, { __index = menu }) self.float = float.new() self.resolve_dedup = async.dedup() - self.on_select = function() end + self.on_select = opts.on_select or function() end self:reset() autocmd.subscribe('CompleteChanged', function() local e = self:get_selected_entry()