wip
This commit is contained in:
parent
c72d894bbd
commit
0b833d555c
13 changed files with 719 additions and 46 deletions
112
lua/util.lua
Normal file
112
lua/util.lua
Normal file
|
|
@ -0,0 +1,112 @@
|
|||
local M = {}
|
||||
|
||||
function M.cmd_executable(cmd, callback)
|
||||
local executable = vim.fn.executable(cmd) == 1
|
||||
-- Check if a callback is provided and it is a function
|
||||
if executable and callback and type(callback) == "function" then
|
||||
callback()
|
||||
end
|
||||
|
||||
-- Check if a callback is provided and it is a table
|
||||
if type(callback) == "table" then
|
||||
if executable and (callback[1] or callback[true]) then
|
||||
-- Call the function associated with key 1 or true if the command is executable
|
||||
local func = callback[1] or callback[true]
|
||||
if type(func) == "function" then
|
||||
func()
|
||||
end
|
||||
elseif not executable and (callback[2] or callback[false]) then
|
||||
-- Call the function associated with key 2 or false if the command is not executable
|
||||
local func = callback[2] or callback[false]
|
||||
if type(func) == "function" then
|
||||
func()
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
return executable
|
||||
end
|
||||
|
||||
-- [1]: (string) lhs (required)
|
||||
-- [2]: (string|fun()) rhs (optional)
|
||||
-- mode: (string|string[]) mode (optional, defaults to "n")
|
||||
-- ft: (string|string[]) filetype for buffer-local keymaps (optional)
|
||||
-- any other option valid for vim.keymap.set
|
||||
function M.keymaps(keymaps)
|
||||
-- is not an array, will pass directly to keymaps
|
||||
if type(keymaps[1]) == "string" then
|
||||
M.keymap(keymaps)
|
||||
else
|
||||
-- is array will iterate over
|
||||
for _, keymap in pairs(keymaps) do
|
||||
M.keymap(keymap)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function M.keymap(keymap)
|
||||
local lhs = keymap[1]
|
||||
local rhs = keymap[2]
|
||||
local mode = keymap["mode"] or "n"
|
||||
local opts = {}
|
||||
for key, value in pairs(keymap) do
|
||||
if type(key) ~= "number" and key ~= "mode" then
|
||||
opts[key] = value
|
||||
end
|
||||
end
|
||||
|
||||
local status, err = pcall(function()
|
||||
vim.keymap.set(mode, lhs, rhs, opts)
|
||||
end)
|
||||
if not status then
|
||||
vim.notify("Failed to create keymap: " .. err, 3)
|
||||
end
|
||||
end
|
||||
|
||||
function M.spread(template)
|
||||
local result = {}
|
||||
for key, value in pairs(template) do
|
||||
result[key] = value
|
||||
end
|
||||
|
||||
return function(table)
|
||||
for key, value in pairs(table) do
|
||||
result[key] = value
|
||||
end
|
||||
return result
|
||||
end
|
||||
end
|
||||
|
||||
function M.table_contains(table, element)
|
||||
for _, value in pairs(table) do
|
||||
if value == element then
|
||||
return true
|
||||
end
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
-- From https://github.com/lukas-reineke/onedark.nvim/blob/master/lua/onedark.lua
|
||||
function M.highlight(group, options)
|
||||
local guifg = options.fg or "NONE"
|
||||
local guibg = options.bg or "NONE"
|
||||
local guisp = options.sp or "NONE"
|
||||
local gui = options.gui or "NONE"
|
||||
local blend = options.blend or 0
|
||||
local ctermfg = options.ctermfg or "NONE"
|
||||
|
||||
vim.cmd(
|
||||
string.format(
|
||||
"highlight %s guifg=%s ctermfg=%s guibg=%s guisp=%s gui=%s blend=%d",
|
||||
group,
|
||||
guifg,
|
||||
ctermfg,
|
||||
guibg,
|
||||
guisp,
|
||||
gui,
|
||||
blend
|
||||
)
|
||||
)
|
||||
end
|
||||
|
||||
return M
|
||||
Loading…
Add table
Add a link
Reference in a new issue