feat: new mappings format for which-key v3. Forgot to push :)

This commit is contained in:
Folke Lemaitre 2024-07-12 22:54:35 +02:00
parent 4a6c0c2850
commit 702471e454
No known key found for this signature in database
GPG key ID: 41F8B1FBACAE2040
5 changed files with 94 additions and 80 deletions

View file

@ -162,32 +162,47 @@ return {
{ {
"folke/which-key.nvim", "folke/which-key.nvim",
event = "VeryLazy", event = "VeryLazy",
opts_extend = { "spec" },
opts = { opts = {
plugins = { spelling = true }, defaults = {},
defaults = { spec = {
{
mode = { "n", "v" }, mode = { "n", "v" },
["g"] = { name = "+goto" }, { "<leader><tab>", group = "tabs" },
["gs"] = { name = "+surround" }, { "<leader>b", group = "buffer" },
["z"] = { name = "+fold" }, { "<leader>c", group = "code" },
["]"] = { name = "+next" }, { "<leader>f", group = "file/find" },
["["] = { name = "+prev" }, { "<leader>g", group = "git" },
["<leader><tab>"] = { name = "+tabs" }, { "<leader>gh", group = "hunks" },
["<leader>b"] = { name = "+buffer" }, { "<leader>q", group = "quit/session" },
["<leader>c"] = { name = "+code" }, { "<leader>s", group = "search" },
["<leader>f"] = { name = "+file/find" }, { "<leader>u", group = "ui" },
["<leader>g"] = { name = "+git" }, { "<leader>w", group = "windows" },
["<leader>gh"] = { name = "+hunks", ["_"] = "which_key_ignore" }, { "<leader>x", group = "diagnostics/quickfix" },
["<leader>q"] = { name = "+quit/session" }, { "[", group = "prev" },
["<leader>s"] = { name = "+search" }, { "]", group = "next" },
["<leader>u"] = { name = "+ui" }, { "g", group = "goto" },
["<leader>w"] = { name = "+windows" }, { "gs", group = "surround" },
["<leader>x"] = { name = "+diagnostics/quickfix" }, { "z", group = "fold" },
},
},
},
keys = {
{
"<leader>?",
function()
require("which-key").show({ global = false })
end,
desc = "Buffer Local Keymaps (which-key)",
}, },
}, },
config = function(_, opts) config = function(_, opts)
local wk = require("which-key") local wk = require("which-key")
wk.setup(opts) wk.setup(opts)
if not vim.tbl_isempty(opts.defaults) then
LazyVim.warn("which-key: opts.defaults is deprecated. Please use opts.spec instead.")
wk.register(opts.defaults) wk.register(opts.defaults)
end
end, end,
}, },

View file

@ -64,7 +64,9 @@ return {
"folke/which-key.nvim", "folke/which-key.nvim",
optional = true, optional = true,
opts = { opts = {
defaults = { ["<leader>o"] = { name = "+overseer" } }, spec = {
{ "<leader>o", group = "overseer" },
},
}, },
}, },
{ {

View file

@ -100,6 +100,7 @@ return {
headline_highlights = {}, headline_highlights = {},
-- disable bullets for now. See https://github.com/lukas-reineke/headlines.nvim/issues/66 -- disable bullets for now. See https://github.com/lukas-reineke/headlines.nvim/issues/66
bullets = {}, bullets = {},
quote_string = false,
} }
for i = 1, 6 do for i = 1, 6 do
local hl = "Headline" .. i local hl = "Headline" .. i

View file

@ -21,22 +21,19 @@ return {
-- Increase the width of which-key to handle the longer r-nvim descriptions -- Increase the width of which-key to handle the longer r-nvim descriptions
local wk = require("which-key") local wk = require("which-key")
-- Workaround from https://github.com/folke/which-key.nvim/issues/514#issuecomment-1987286901 wk.add({
wk.register({ { "<localleader>a", group = "all" },
["<localleader>"] = { { "<localleader>b", group = "between marks" },
a = { name = "+(a)ll", ["🚫"] = "which_key_ignore" }, { "<localleader>c", group = "chunks" },
b = { name = "+(b)etween marks", ["🚫"] = "which_key_ignore" }, { "<localleader>f", group = "functions" },
c = { name = "+(c)hunks", ["🚫"] = "which_key_ignore" }, { "<localleader>g", group = "goto" },
f = { name = "+(f)unctions", ["🚫"] = "which_key_ignore" }, { "<localleader>k", group = "knit" },
g = { name = "+(g)oto", ["🚫"] = "which_key_ignore" }, { "<localleader>p", group = "paragraph" },
k = { name = "+(k)nit", ["🚫"] = "which_key_ignore" }, { "<localleader>q", group = "quarto" },
p = { name = "+(p)aragraph", ["🚫"] = "which_key_ignore" }, { "<localleader>r", group = "r general" },
q = { name = "+(q)uarto", ["🚫"] = "which_key_ignore" }, { "<localleader>s", group = "split or send" },
r = { name = "+(r) general", ["🚫"] = "which_key_ignore" }, { "<localleader>t", group = "terminal" },
s = { name = "+(s)plit or (s)end", ["🚫"] = "which_key_ignore" }, { "<localleader>v", group = "view" },
t = { name = "+(t)erminal", ["🚫"] = "which_key_ignore" },
v = { name = "+(v)iew", ["🚫"] = "which_key_ignore" },
},
}) })
end, end,
}, },

View file

@ -61,52 +61,51 @@ end
-- register all text objects with which-key -- register all text objects with which-key
function M.ai_whichkey() function M.ai_whichkey()
---@type table<string, string|table> local objects = {
local i = { { " ", desc = "whitespace" },
[" "] = "Whitespace", { '"', desc = 'balanced "' },
['"'] = 'Balanced "', { "'", desc = "balanced '" },
["'"] = "Balanced '", { "(", desc = "balanced (" },
["`"] = "Balanced `", { ")", desc = "balanced ) including white-space" },
["("] = "Balanced (", { "<", desc = "balanced <" },
[")"] = "Balanced ) including white-space", { ">", desc = "balanced > including white-space" },
[">"] = "Balanced > including white-space", { "?", desc = "user prompt" },
["<lt>"] = "Balanced <", { "U", desc = "use/call without dot in name" },
["]"] = "Balanced ] including white-space", { "[", desc = "balanced [" },
["["] = "Balanced [", { "]", desc = "balanced ] including white-space" },
["}"] = "Balanced } including white-space", { "_", desc = "underscore" },
["{"] = "Balanced {", { "`", desc = "balanced `" },
["?"] = "User Prompt", { "a", desc = "argument" },
_ = "Underscore", { "b", desc = "balanced )]}" },
a = "Argument", { "c", desc = "class" },
b = "Balanced ), ], }", { "d", desc = "digit(s)" },
c = "Class", { "e", desc = "word in CamelCase & snake_case" },
d = "Digit(s)", { "f", desc = "function" },
e = "Word in CamelCase & snake_case", { "g", desc = "entire file" },
f = "Function", { "i", desc = "indent" },
g = "Entire file", { "o", desc = "block, conditional, loop" },
i = "Indent", { "q", desc = "quote `\"'" },
o = "Block, conditional, loop", { "t", desc = "tag" },
q = "Quote `, \", '", { "u", desc = "use/call function & method" },
t = "Tag", { "{", desc = "balanced {" },
u = "Use/call function & method", { "}", desc = "balanced } including white-space" },
U = "Use/call without dot in name",
} }
local a = vim.deepcopy(i)
for k, v in pairs(a) do
a[k] = v:gsub(" including.*", "")
end
local ic = vim.deepcopy(i) local ret = { mode = { "o", "x" } }
local ac = vim.deepcopy(a) for prefix, name in pairs({
for key, name in pairs({ n = "Next", l = "Last" }) do i = "inside",
i[key] = vim.tbl_extend("force", { name = "Inside " .. name .. " textobject" }, ic) a = "around",
a[key] = vim.tbl_extend("force", { name = "Around " .. name .. " textobject" }, ac) il = "last",
["in"] = "next",
al = "last",
an = "next",
}) do
ret[#ret + 1] = { prefix, group = name }
for _, obj in ipairs(objects) do
ret[#ret + 1] = { prefix .. obj[1], desc = obj.desc }
end end
require("which-key").register({ end
mode = { "o", "x" }, require("which-key").add(ret, { notify = false })
i = i,
a = a,
})
end end
---@param opts {skip_next: string, skip_ts: string[], skip_unbalanced: boolean, markdown: boolean} ---@param opts {skip_next: string, skip_ts: string[], skip_unbalanced: boolean, markdown: boolean}