From cc69bfed36863a2ffdf1b9c4fd2ed59445a51629 Mon Sep 17 00:00:00 2001 From: DragonBillow <42114817+cathaysia@users.noreply.github.com> Date: Mon, 17 Jul 2023 23:54:38 +0800 Subject: [PATCH] feat: built-in select implementation binds number keymaps (#104) * feat(select/builtin): binding keymap for select Signed-off-by: Longtao Zhang * feat(select/builtin): add number prefix Signed-off-by: Longtao Zhang * style(builtin): remove debug statement Signed-off-by: Longtao Zhang * style(builtin): rename variable, solve luacheck problem Signed-off-by: Longtao Zhang --------- Signed-off-by: Longtao Zhang --- lua/dressing/select/builtin.lua | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/lua/dressing/select/builtin.lua b/lua/dressing/select/builtin.lua index add190e..3387101 100644 --- a/lua/dressing/select/builtin.lua +++ b/lua/dressing/select/builtin.lua @@ -30,6 +30,14 @@ local function clear_callback() _items = {} end +local function close_window() + local callback = _callback + local items = _items + clear_callback() + vim.api.nvim_win_close(0, true) + return callback, items +end + M.select = function(config, items, opts, on_choice) if vim.fn.hlID("DressingSelectText") ~= 0 then vim.notify( @@ -47,10 +55,18 @@ M.select = function(config, items, opts, on_choice) end local lines = {} local max_width = 1 - for _, item in ipairs(items) do - local line = opts.format_item(item) + for idx, item in ipairs(items) do + local line = "[" .. idx .. "] " .. opts.format_item(item) max_width = math.max(max_width, vim.api.nvim_strwidth(line)) table.insert(lines, line) + + vim.api.nvim_buf_set_keymap(bufnr, "n", tostring(idx), "", { + callback = function() + local callback, local_items = close_window() + local target_item = local_items[idx] + callback(target_item, idx) + end, + }) end vim.api.nvim_buf_set_lines(bufnr, 0, -1, true, lines) vim.bo[bufnr].modifiable = false @@ -94,14 +110,6 @@ M.select = function(config, items, opts, on_choice) }) end -local function close_window() - local callback = _callback - local items = _items - clear_callback() - vim.api.nvim_win_close(0, true) - return callback, items -end - M.choose = function() local cursor = vim.api.nvim_win_get_cursor(0) local idx = cursor[1]