-- These are my utility functions -- I use to make my life bit easier -- ╭─────────────────────────────────────────────────────────╮ -- │ Function shortcuts for keymap set │ -- ╰─────────────────────────────────────────────────────────╯ -- Keymap set shortcut --@type vim.keymap.set local s = vim.keymap.set -- Keymap shortcut functions K = {} -- Handle description ---@param desc string|table? Optional description. Can be a string or a table. ---@return table -- The description as a table. local function handleDesc(desc) if type(desc) == 'string' then -- Convert string to table with `desc` as a key -- If the string is empty, just return as an empty description return { desc = desc } elseif type(desc) == 'table' then -- If desc doesn't have 'desc' key, combine it with -- others with empty description if not desc.desc then desc.desc = '?' return desc end -- Use the table as is return desc else -- Default to an empty table if `desc` is nil or an unsupported type return { desc = '?' } end end -- Normal mode keymaps ---@param key string rhs, required ---@param cmd string|function lhs, required ---@param opts table? Options, optional K.n = function(key, cmd, opts) opts = handleDesc(opts or {}) s('n', key, cmd, opts) end -- Leader keymap shortcut function -- It prepends '' to the key ---@param key string rhs, required, but will be prepended with '' ---@param cmd string|function lhs, required ---@param opts table|string? Options (or just description), optional K.nl = function(key, cmd, opts) opts = handleDesc(opts) K.n('' .. key, cmd, opts) end -- Keymap shortcut function with mode defined, good for sorting by rhs ---@param key string rhs, required ---@param mode string|string[] one of n, v, x, or table of modes { 'n', 'v' } ---@param cmd string|function lhs, required ---@param opts string|table description, required K.d = function(key, mode, cmd, opts) opts = handleDesc(opts or {}) s(mode, key, cmd, opts) end -- Leader based keymap shortcut function with mode defined ---@param key string rhs, required, but will be prepended with '' ---@param mode string|string[] one of n, v, x, or table of modes { 'n', 'v' } ---@param cmd string|function lhs, required ---@param opts string|table description (or opts), required K.ld = function(key, mode, cmd, opts) opts = handleDesc(opts or {}) s(mode, '' .. key, cmd, opts) end -- ╭─────────────────────────────────────────────────────────╮ -- │ Options related helper functions │ -- ╰─────────────────────────────────────────────────────────╯ -- Toggle background between light and dark function ToggleBackground() vim.o.bg = vim.o.bg == 'light' and 'dark' or 'light' end