nvim/lua/utils.lua
2025-03-08 18:21:05 -05:00

84 lines
1.5 KiB
Lua

local M = {}
function M.set_keymap(mode, lhs, rhs, opts)
local defaults = {
silent = true,
noremap = true,
}
vim.keymap.set(mode, lhs, rhs, M.merge(defaults, opts or {}))
end
function M.create_buf_map(bufnr, opts)
return function(mode, lhs, rhs, map_opts)
M.set_keymap(
mode,
lhs,
rhs,
M.merge({
buffer = bufnr,
}, opts or {}, map_opts or {})
)
end
end
function M.merge_list(tbl1, tbl2)
for _, v in ipairs(tbl2) do
table.insert(tbl1, v)
end
return tbl1
end
function M.merge(...)
return vim.tbl_deep_extend('force', ...)
end
function M.split(str, sep)
local res = {}
for w in str:gmatch('([^' .. sep .. ']*)') do
if w ~= '' then
table.insert(res, w)
end
end
return res
end
function M.get_short_file_path(path)
local dirs = {}
for dir in string.gmatch(path, '([^/]+)') do
table.insert(dirs, dir)
end
local n = #dirs
if n > 3 then
return '../' .. dirs[n - 2] .. '/' .. dirs[n - 1] .. '/' .. dirs[n]
end
return path
end
function M.get_short_cwd()
local parts = vim.split(vim.fn.getcwd(), '/')
return parts[#parts]
end
function M.diff_source()
local gitsigns = vim.b.gitsigns_status_dict
if gitsigns then
return {
added = gitsigns.added,
modified = gitsigns.changed,
removed = gitsigns.removed,
}
end
end
function M.show_macro_recording()
local recording_register = vim.fn.reg_recording()
if recording_register == '' then
return ''
else
return 'Recording @' .. recording_register
end
end
return M