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 = {
|
files = {
|
||||||
enabled = true, -- show file icons
|
enabled = true, -- show file icons
|
||||||
},
|
},
|
||||||
|
keymaps = {
|
||||||
|
nowait = " "
|
||||||
|
},
|
||||||
indent = {
|
indent = {
|
||||||
vertical = "│ ",
|
vertical = "│ ",
|
||||||
middle = "├╴",
|
middle = "├╴",
|
||||||
|
|
|
@ -39,6 +39,7 @@ Snacks.util.set_hl({
|
||||||
Register = "Number",
|
Register = "Number",
|
||||||
KeymapMode = "Number",
|
KeymapMode = "Number",
|
||||||
KeymapLhs = "Special",
|
KeymapLhs = "Special",
|
||||||
|
KeymapNowait = "@variable.builtin",
|
||||||
BufNr = "Number",
|
BufNr = "Number",
|
||||||
BufFlags = "NonText",
|
BufFlags = "NonText",
|
||||||
KeymapRhs = "NonText",
|
KeymapRhs = "NonText",
|
||||||
|
|
|
@ -280,12 +280,14 @@ M.jumps = {
|
||||||
---@class snacks.picker.keymaps.Config: snacks.picker.Config
|
---@class snacks.picker.keymaps.Config: snacks.picker.Config
|
||||||
---@field global? boolean show global keymaps
|
---@field global? boolean show global keymaps
|
||||||
---@field local? boolean show buffer keymaps
|
---@field local? boolean show buffer keymaps
|
||||||
|
---@field plugs? boolean show plugin keymaps
|
||||||
---@field modes? string[]
|
---@field modes? string[]
|
||||||
M.keymaps = {
|
M.keymaps = {
|
||||||
finder = "vim_keymaps",
|
finder = "vim_keymaps",
|
||||||
format = "keymap",
|
format = "keymap",
|
||||||
preview = "preview",
|
preview = "preview",
|
||||||
global = true,
|
global = true,
|
||||||
|
plugs = false,
|
||||||
["local"] = true,
|
["local"] = true,
|
||||||
modes = { "n", "v", "x", "s", "o", "i", "c", "t" },
|
modes = { "n", "v", "x", "s", "o", "i", "c", "t" },
|
||||||
confirm = function(picker, item)
|
confirm = function(picker, item)
|
||||||
|
|
|
@ -373,11 +373,27 @@ function M.keymap(item, picker)
|
||||||
ret[#ret + 1] = { " " }
|
ret[#ret + 1] = { " " }
|
||||||
end
|
end
|
||||||
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] = { k.mode, "SnacksPickerKeymapMode" }
|
||||||
ret[#ret + 1] = { " " }
|
ret[#ret + 1] = { " " }
|
||||||
ret[#ret + 1] = { a(lhs, 15), "SnacksPickerKeymapLhs" }
|
ret[#ret + 1] = { a(lhs, 15), "SnacksPickerKeymapLhs" }
|
||||||
ret[#ret + 1] = { " " }
|
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
|
local rhs_len = 0
|
||||||
if k.rhs and k.rhs ~= "" then
|
if k.rhs and k.rhs ~= "" then
|
||||||
local rhs = k.rhs or ""
|
local rhs = k.rhs or ""
|
||||||
|
|
|
@ -237,11 +237,16 @@ function M.keymaps(opts)
|
||||||
local done = {} ---@type table<string, boolean>
|
local done = {} ---@type table<string, boolean>
|
||||||
for _, km in ipairs(maps) do
|
for _, km in ipairs(maps) do
|
||||||
local key = Snacks.picker.util.text(km, { "mode", "lhs", "buffer" })
|
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
|
done[key] = true
|
||||||
local item = {
|
local item = {
|
||||||
mode = km.mode,
|
mode = km.mode,
|
||||||
item = km,
|
item = km,
|
||||||
|
key = km.lhs,
|
||||||
preview = {
|
preview = {
|
||||||
text = vim.inspect(km),
|
text = vim.inspect(km),
|
||||||
ft = "lua",
|
ft = "lua",
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue