84 lines
1.5 KiB
Lua
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
|