mirror of
https://github.com/folke/snacks.nvim
synced 2025-08-05 19:28:24 +00:00
feat(picker.keymaps): improvements to keymaps picker
This commit is contained in:
parent
bc47e0b1dd
commit
2762c37eb0
5 changed files with 29 additions and 2 deletions
|
@ -270,6 +270,9 @@ local defaults = {
|
|||
files = {
|
||||
enabled = true, -- show file icons
|
||||
},
|
||||
keymaps = {
|
||||
nowait = " "
|
||||
},
|
||||
indent = {
|
||||
vertical = "│ ",
|
||||
middle = "├╴",
|
||||
|
|
|
@ -39,6 +39,7 @@ Snacks.util.set_hl({
|
|||
Register = "Number",
|
||||
KeymapMode = "Number",
|
||||
KeymapLhs = "Special",
|
||||
KeymapNowait = "@variable.builtin",
|
||||
BufNr = "Number",
|
||||
BufFlags = "NonText",
|
||||
KeymapRhs = "NonText",
|
||||
|
|
|
@ -280,12 +280,14 @@ M.jumps = {
|
|||
---@class snacks.picker.keymaps.Config: snacks.picker.Config
|
||||
---@field global? boolean show global keymaps
|
||||
---@field local? boolean show buffer keymaps
|
||||
---@field plugs? boolean show plugin keymaps
|
||||
---@field modes? string[]
|
||||
M.keymaps = {
|
||||
finder = "vim_keymaps",
|
||||
format = "keymap",
|
||||
preview = "preview",
|
||||
global = true,
|
||||
plugs = false,
|
||||
["local"] = true,
|
||||
modes = { "n", "v", "x", "s", "o", "i", "c", "t" },
|
||||
confirm = function(picker, item)
|
||||
|
|
|
@ -373,11 +373,27 @@ function M.keymap(item, picker)
|
|||
ret[#ret + 1] = { " " }
|
||||
end
|
||||
end
|
||||
local lhs = vim.fn.keytrans(Snacks.util.keycode(k.lhs))
|
||||
local lhs = Snacks.util.normkey(k.lhs)
|
||||
ret[#ret + 1] = { k.mode, "SnacksPickerKeymapMode" }
|
||||
ret[#ret + 1] = { " " }
|
||||
ret[#ret + 1] = { a(lhs, 15), "SnacksPickerKeymapLhs" }
|
||||
ret[#ret + 1] = { " " }
|
||||
local icon_nowait = picker.opts.icons.keymaps.nowait
|
||||
|
||||
if k.nowait == 1 then
|
||||
ret[#ret + 1] = { icon_nowait, "SnacksPickerKeymapNowait" }
|
||||
else
|
||||
ret[#ret + 1] = { (" "):rep(vim.api.nvim_strwidth(icon_nowait)) }
|
||||
end
|
||||
ret[#ret + 1] = { " " }
|
||||
|
||||
if k.buffer and k.buffer > 0 then
|
||||
ret[#ret + 1] = { a("buf:" .. k.buffer, 6), "SnacksPickerBufNr" }
|
||||
else
|
||||
ret[#ret + 1] = { a("", 6) }
|
||||
end
|
||||
ret[#ret + 1] = { " " }
|
||||
|
||||
local rhs_len = 0
|
||||
if k.rhs and k.rhs ~= "" then
|
||||
local rhs = k.rhs or ""
|
||||
|
|
|
@ -237,11 +237,16 @@ function M.keymaps(opts)
|
|||
local done = {} ---@type table<string, boolean>
|
||||
for _, km in ipairs(maps) do
|
||||
local key = Snacks.picker.util.text(km, { "mode", "lhs", "buffer" })
|
||||
if not done[key] then
|
||||
local keep = true
|
||||
if opts.plugs == false and km.lhs:match("^<Plug>") then
|
||||
keep = false
|
||||
end
|
||||
if keep and not done[key] then
|
||||
done[key] = true
|
||||
local item = {
|
||||
mode = km.mode,
|
||||
item = km,
|
||||
key = km.lhs,
|
||||
preview = {
|
||||
text = vim.inspect(km),
|
||||
ft = "lua",
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue