mirror of
https://github.com/LazyVim/LazyVim.git
synced 2025-06-22 00:49:03 +02:00
feat(toggle): make toggles callable. Fixes #4081
This commit is contained in:
parent
1ceac32652
commit
150523b77b
1 changed files with 27 additions and 29 deletions
|
@ -5,17 +5,24 @@ local M = {}
|
||||||
---@field name string
|
---@field name string
|
||||||
---@field get fun():boolean
|
---@field get fun():boolean
|
||||||
---@field set fun(state:boolean)
|
---@field set fun(state:boolean)
|
||||||
---@overload fun()
|
|
||||||
local T = {}
|
---@param toggle lazyvim.Toggle
|
||||||
T.__index = T
|
---@return lazyvim.Toggle|fun():boolean
|
||||||
|
function M.wrap(toggle)
|
||||||
|
return setmetatable(toggle, {
|
||||||
|
__call = function(t)
|
||||||
|
t.set(not t.get())
|
||||||
|
return t.get()
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
||||||
---@param lhs string
|
---@param lhs string
|
||||||
---@param toggle lazyvim.Toggle
|
---@param toggle lazyvim.Toggle
|
||||||
function M.map(lhs, toggle)
|
function M.map(lhs, toggle)
|
||||||
|
local t = M.wrap(toggle)
|
||||||
LazyVim.safe_keymap_set("n", lhs, function()
|
LazyVim.safe_keymap_set("n", lhs, function()
|
||||||
local state = not toggle.get()
|
if t() then
|
||||||
toggle.set(state)
|
|
||||||
if state then
|
|
||||||
LazyVim.info("Enabled " .. toggle.name, { title = toggle.name })
|
LazyVim.info("Enabled " .. toggle.name, { title = toggle.name })
|
||||||
else
|
else
|
||||||
LazyVim.warn("Disabled " .. toggle.name, { title = toggle.name })
|
LazyVim.warn("Disabled " .. toggle.name, { title = toggle.name })
|
||||||
|
@ -41,8 +48,7 @@ function M.wk(lhs, toggle)
|
||||||
})
|
})
|
||||||
end
|
end
|
||||||
|
|
||||||
---@type lazyvim.Toggle
|
M.treesitter = M.wrap({
|
||||||
M.treesitter = {
|
|
||||||
name = "Treesitter Highlight",
|
name = "Treesitter Highlight",
|
||||||
get = function()
|
get = function()
|
||||||
return vim.b.ts_highlight
|
return vim.b.ts_highlight
|
||||||
|
@ -54,12 +60,11 @@ M.treesitter = {
|
||||||
vim.treesitter.stop()
|
vim.treesitter.stop()
|
||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
}
|
})
|
||||||
|
|
||||||
---@param buf? boolean
|
---@param buf? boolean
|
||||||
function M.format(buf)
|
function M.format(buf)
|
||||||
---@type lazyvim.Toggle
|
return M.wrap({
|
||||||
local ret = {
|
|
||||||
name = "Auto Format (" .. (buf and "Buffer" or "Global") .. ")",
|
name = "Auto Format (" .. (buf and "Buffer" or "Global") .. ")",
|
||||||
get = function()
|
get = function()
|
||||||
if not buf then
|
if not buf then
|
||||||
|
@ -70,8 +75,7 @@ function M.format(buf)
|
||||||
set = function(state)
|
set = function(state)
|
||||||
LazyVim.format.enable(state, buf)
|
LazyVim.format.enable(state, buf)
|
||||||
end,
|
end,
|
||||||
}
|
})
|
||||||
return ret
|
|
||||||
end
|
end
|
||||||
|
|
||||||
---@param opts? {values?: {[1]:any, [2]:any}, name?: string}
|
---@param opts? {values?: {[1]:any, [2]:any}, name?: string}
|
||||||
|
@ -80,8 +84,7 @@ function M.option(option, opts)
|
||||||
local name = opts.name or option
|
local name = opts.name or option
|
||||||
local on = opts.values and opts.values[2] or true
|
local on = opts.values and opts.values[2] or true
|
||||||
local off = opts.values and opts.values[1] or false
|
local off = opts.values and opts.values[1] or false
|
||||||
---@type lazyvim.Toggle
|
return M.wrap({
|
||||||
local ret = {
|
|
||||||
name = name,
|
name = name,
|
||||||
get = function()
|
get = function()
|
||||||
return vim.opt_local[option]:get() == on
|
return vim.opt_local[option]:get() == on
|
||||||
|
@ -89,13 +92,11 @@ function M.option(option, opts)
|
||||||
set = function(state)
|
set = function(state)
|
||||||
vim.opt_local[option] = state and on or off
|
vim.opt_local[option] = state and on or off
|
||||||
end,
|
end,
|
||||||
}
|
})
|
||||||
return ret
|
|
||||||
end
|
end
|
||||||
|
|
||||||
local nu = { number = true, relativenumber = true }
|
local nu = { number = true, relativenumber = true }
|
||||||
---@type lazyvim.Toggle
|
M.number = M.wrap({
|
||||||
M.number = {
|
|
||||||
name = "Line Numbers",
|
name = "Line Numbers",
|
||||||
get = function()
|
get = function()
|
||||||
return vim.opt_local.number:get() or vim.opt_local.relativenumber:get()
|
return vim.opt_local.number:get() or vim.opt_local.relativenumber:get()
|
||||||
|
@ -110,19 +111,17 @@ M.number = {
|
||||||
vim.opt_local.relativenumber = false
|
vim.opt_local.relativenumber = false
|
||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
}
|
})
|
||||||
|
|
||||||
---@type lazyvim.Toggle
|
M.diagnostics = M.wrap({
|
||||||
M.diagnostics = {
|
|
||||||
name = "Diagnostics",
|
name = "Diagnostics",
|
||||||
get = function()
|
get = function()
|
||||||
return vim.diagnostic.is_enabled and vim.diagnostic.is_enabled()
|
return vim.diagnostic.is_enabled and vim.diagnostic.is_enabled()
|
||||||
end,
|
end,
|
||||||
set = vim.diagnostic.enable,
|
set = vim.diagnostic.enable,
|
||||||
}
|
})
|
||||||
|
|
||||||
---@type lazyvim.Toggle
|
M.inlay_hints = M.wrap({
|
||||||
M.inlay_hints = {
|
|
||||||
name = "Inlay Hints",
|
name = "Inlay Hints",
|
||||||
get = function()
|
get = function()
|
||||||
return vim.lsp.inlay_hint.is_enabled({ bufnr = 0 })
|
return vim.lsp.inlay_hint.is_enabled({ bufnr = 0 })
|
||||||
|
@ -130,12 +129,11 @@ M.inlay_hints = {
|
||||||
set = function(state)
|
set = function(state)
|
||||||
vim.lsp.inlay_hint.enable(state, { bufnr = 0 })
|
vim.lsp.inlay_hint.enable(state, { bufnr = 0 })
|
||||||
end,
|
end,
|
||||||
}
|
})
|
||||||
|
|
||||||
---@type {k:string, v:any}[]
|
---@type {k:string, v:any}[]
|
||||||
M._maximized = nil
|
M._maximized = nil
|
||||||
---@type lazyvim.Toggle
|
M.maximize = M.wrap({
|
||||||
M.maximize = {
|
|
||||||
name = "Maximize",
|
name = "Maximize",
|
||||||
get = function()
|
get = function()
|
||||||
return M._maximized ~= nil
|
return M._maximized ~= nil
|
||||||
|
@ -170,7 +168,7 @@ M.maximize = {
|
||||||
vim.cmd("wincmd =")
|
vim.cmd("wincmd =")
|
||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
}
|
})
|
||||||
|
|
||||||
setmetatable(M, {
|
setmetatable(M, {
|
||||||
__call = function(m, ...)
|
__call = function(m, ...)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue