From 169b511c119602aec3f90162806e2767fe1f68f1 Mon Sep 17 00:00:00 2001 From: Max Date: Sun, 23 Jun 2024 15:55:06 +0200 Subject: [PATCH 1/3] feat: add mappings api --- build.lua | 22 --------------- lua/neocomplete/init.lua | 22 +++++++++++++++ lua/neocomplete/mappings.lua | 50 +++++++++++++++++++++++++++++++++++ lua/neocomplete/menu/draw.lua | 1 + 4 files changed, 73 insertions(+), 22 deletions(-) delete mode 100644 build.lua create mode 100644 lua/neocomplete/mappings.lua diff --git a/build.lua b/build.lua deleted file mode 100644 index c4200f7..0000000 --- a/build.lua +++ /dev/null @@ -1,22 +0,0 @@ --- From https://github.com/nvim-neorg/neorg - --- This build.lua exists to bridge luarocks installation for lazy.nvim users. --- It's main purposes are: --- - Shelling out to luarocks.nvim for installation --- - Installing neocomplete's dependencies as rocks - --- Important note: we execute the build code in a vim.schedule --- to defer the execution and ensure that the runtimepath is appropriately set. - -vim.schedule(function() - local ok, luarocks = pcall(require, "luarocks-nvim.rocks") - - assert(ok, "Unable to install neocomplete: required dependency `vhyrro/luarocks.nvim` not found!") - - luarocks.ensure({ - "fzy == 1.0.3", - }) - - package.loaded["neocomplete"] = nil - require("neocomplete").setup() -end) diff --git a/lua/neocomplete/init.lua b/lua/neocomplete/init.lua index 823f733..5864af8 100644 --- a/lua/neocomplete/init.lua +++ b/lua/neocomplete/init.lua @@ -8,8 +8,30 @@ local function on_insert_enter() neocomplete.core:setup() end +neocomplete.mappings = { + get_fallback = function(key) + return require("neocomplete.mappings").get_fallback(key) + end, + is_open = function() + return neocomplete.core and neocomplete.core.menu:is_open() + end, + confirm = function() + neocomplete.core.menu:confirm() + end, + close = function() + neocomplete.core.menu:close() + end, + select_prev = function(count) + neocomplete.core.menu:select_next(count) + end, + select_next = function(count) + neocomplete.core.menu:select_prev(count) + end, +} + --- Sets up neocomplete function neocomplete.setup() + require("neocomplete.mappings").setup() require("neocomplete.config").setup() require("neocomplete.highlights") diff --git a/lua/neocomplete/mappings.lua b/lua/neocomplete/mappings.lua new file mode 100644 index 0000000..3bc2d08 --- /dev/null +++ b/lua/neocomplete/mappings.lua @@ -0,0 +1,50 @@ +local mappings = {} + +function mappings.get_fallback(key) + local lhs = ("(NeocompleteFallback.%s)"):format(key) + vim.keymap.set("i", lhs, key, { noremap = false }) + return function() + vim.api.nvim_feedkeys(vim.keycode(lhs), "im", false) + end +end + +local function get_mapping(rhs) + for _, map in pairs(vim.api.nvim_get_keymap("i")) do + ---@diagnostic disable-next-line: undefined-field + if type(map.rhs) == "string" and map.rhs == rhs then + ---@diagnostic disable-next-line: undefined-field + return map.lhs + end + end +end + +local function map(plug, callback) + local key = get_mapping(plug) + vim.keymap.set("i", plug, function() + if require("neocomplete").core.menu:is_open() then + callback() + else + mappings.get_fallback(key)() + end + end) +end + +function mappings.setup() + map("(NeocompleteConfirm)", function() + require("neocomplete").core.menu:confirm() + end) + + map("(NeocompleteSelectNext)", function() + require("neocomplete").core.menu:select_next(1) + end) + + map("(NeocompleteSelectPrev)", function() + require("neocomplete").core.menu:select_prev(1) + end) + + map("(NeocompleteClose)", function() + require("neocomplete").core.menu:close() + end) +end + +return mappings diff --git a/lua/neocomplete/menu/draw.lua b/lua/neocomplete/menu/draw.lua index 0e06d10..92b3591 100644 --- a/lua/neocomplete/menu/draw.lua +++ b/lua/neocomplete/menu/draw.lua @@ -115,6 +115,7 @@ return function(self) virt_text_pos = "overlay", }) end + local line = vim.api.nvim_get_current_line() local cursor = vim.api.nvim_win_get_cursor(0) local cursor_col = cursor[2] From a24e0f8f597c2db05dc6aa8f119bbb4fcf2d60cf Mon Sep 17 00:00:00 2001 From: Max Date: Tue, 25 Jun 2024 18:57:10 +0200 Subject: [PATCH 2/3] fix(mappings): create lazily --- lua/neocomplete/init.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/neocomplete/init.lua b/lua/neocomplete/init.lua index 5864af8..0f8e1d1 100644 --- a/lua/neocomplete/init.lua +++ b/lua/neocomplete/init.lua @@ -6,6 +6,7 @@ neocomplete.core = nil local function on_insert_enter() neocomplete.core = require("neocomplete.core").new() neocomplete.core:setup() + require("neocomplete.mappings").setup() end neocomplete.mappings = { @@ -31,7 +32,6 @@ neocomplete.mappings = { --- Sets up neocomplete function neocomplete.setup() - require("neocomplete.mappings").setup() require("neocomplete.config").setup() require("neocomplete.highlights") From e275c65b009d9dd2f66b39d38b059a6dc00121f5 Mon Sep 17 00:00:00 2001 From: Max Date: Tue, 25 Jun 2024 19:03:57 +0200 Subject: [PATCH 3/3] feat(mappings): some fixes and don't create lazily --- lua/neocomplete/init.lua | 6 +++--- lua/neocomplete/mappings.lua | 13 ++++++------- lua/neocomplete/menu/init.lua | 2 ++ 3 files changed, 11 insertions(+), 10 deletions(-) diff --git a/lua/neocomplete/init.lua b/lua/neocomplete/init.lua index 0f8e1d1..91347b1 100644 --- a/lua/neocomplete/init.lua +++ b/lua/neocomplete/init.lua @@ -6,7 +6,6 @@ neocomplete.core = nil local function on_insert_enter() neocomplete.core = require("neocomplete.core").new() neocomplete.core:setup() - require("neocomplete.mappings").setup() end neocomplete.mappings = { @@ -23,15 +22,16 @@ neocomplete.mappings = { neocomplete.core.menu:close() end, select_prev = function(count) - neocomplete.core.menu:select_next(count) + neocomplete.core.menu:select_prev(count) end, select_next = function(count) - neocomplete.core.menu:select_prev(count) + neocomplete.core.menu:select_next(count) end, } --- Sets up neocomplete function neocomplete.setup() + require("neocomplete.mappings").setup() require("neocomplete.config").setup() require("neocomplete.highlights") diff --git a/lua/neocomplete/mappings.lua b/lua/neocomplete/mappings.lua index 3bc2d08..4f3e76c 100644 --- a/lua/neocomplete/mappings.lua +++ b/lua/neocomplete/mappings.lua @@ -19,31 +19,30 @@ local function get_mapping(rhs) end local function map(plug, callback) - local key = get_mapping(plug) vim.keymap.set("i", plug, function() - if require("neocomplete").core.menu:is_open() then + if require("neocomplete").mappings.is_open() then callback() else - mappings.get_fallback(key)() + mappings.get_fallback(get_mapping(plug))() end end) end function mappings.setup() map("(NeocompleteConfirm)", function() - require("neocomplete").core.menu:confirm() + require("neocomplete").mappings.confirm() end) map("(NeocompleteSelectNext)", function() - require("neocomplete").core.menu:select_next(1) + require("neocomplete").mappings.select_next(1) end) map("(NeocompleteSelectPrev)", function() - require("neocomplete").core.menu:select_prev(1) + require("neocomplete").mappings.select_prev(1) end) map("(NeocompleteClose)", function() - require("neocomplete").core.menu:close() + require("neocomplete").mappings.close() end) end diff --git a/lua/neocomplete/menu/init.lua b/lua/neocomplete/menu/init.lua index 114628d..d4bc946 100644 --- a/lua/neocomplete/menu/init.lua +++ b/lua/neocomplete/menu/init.lua @@ -113,6 +113,7 @@ function Menu:set_scroll(direction) end function Menu:select_next(count) + count = count or 1 self.index = self.index + count if self.index > #self.entries then self.index = self.index - #self.entries - 1 @@ -122,6 +123,7 @@ function Menu:select_next(count) end function Menu:select_prev(count) + count = count or 1 self.index = self.index - count if self.index < 0 then self.index = #self.entries + self.index + 1