Initial commit
This commit is contained in:
234
nvim/lua/darcula/utils/init.lua
Normal file
234
nvim/lua/darcula/utils/init.lua
Normal file
@@ -0,0 +1,234 @@
|
||||
-- The MIT License (MIT)
|
||||
--
|
||||
-- Copyright © 2026 Scott E. Graves <scott.e.graves@protonmail.com>
|
||||
--
|
||||
-- Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
||||
-- and associated documentation files (the “Software”), to deal in the Software without restriction,
|
||||
-- including without limitation the rights to use, copy, modify, merge, publish, distribute,
|
||||
-- sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
|
||||
-- furnished to do so, subject to the following conditions:
|
||||
--
|
||||
-- The above copyright notice and this permission notice shall be included in all copies or
|
||||
-- substantial portions of the Software.
|
||||
--
|
||||
-- THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
|
||||
-- BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
-- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
||||
-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
-- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
--
|
||||
local cword = function()
|
||||
---@diagnostic disable-next-line: missing-parameter
|
||||
return vim.fn.expand("<cword>")
|
||||
end
|
||||
|
||||
local coc_command = function(command)
|
||||
vim.cmd("CocCommand " .. command)
|
||||
end
|
||||
|
||||
local autocmd = function(group, event, pattern, callback)
|
||||
vim.api.nvim_create_autocmd(
|
||||
event,
|
||||
{
|
||||
callback = callback,
|
||||
group = group,
|
||||
pattern = pattern
|
||||
}
|
||||
)
|
||||
end
|
||||
|
||||
local autocmd_buffer = function(group, event, buffer, callback)
|
||||
vim.api.nvim_create_autocmd(
|
||||
event,
|
||||
{
|
||||
buffer = buffer,
|
||||
callback = callback,
|
||||
group = group
|
||||
}
|
||||
)
|
||||
end
|
||||
|
||||
local augroup_with_autocmd = function(name, event, pattern, callback)
|
||||
local group = vim.api.nvim_create_augroup(name, {clear = true})
|
||||
autocmd(group, event, pattern, callback)
|
||||
return group
|
||||
end
|
||||
|
||||
local augroup_with_autocmd_buffer = function(name, event, buffer, callback)
|
||||
local group = vim.api.nvim_create_augroup(name, {clear = true})
|
||||
autocmd_buffer(group, event, buffer, callback)
|
||||
return group
|
||||
end
|
||||
|
||||
local file_exists = function(name)
|
||||
local f = io.open(name, "r")
|
||||
return f ~= nil and io.close(f)
|
||||
end
|
||||
|
||||
local get_visual_text = function()
|
||||
vim.cmd('normal! "ry')
|
||||
return vim.fn.getreg("r")
|
||||
end
|
||||
|
||||
local is_c_family_file = function()
|
||||
local name = vim.api.nvim_buf_get_name(0)
|
||||
if name == nil or name == "" then
|
||||
return false
|
||||
end
|
||||
|
||||
local ext = name:match("%.([^.]+)$")
|
||||
if not ext then
|
||||
return false
|
||||
end
|
||||
|
||||
ext = ext:lower()
|
||||
return ext == "h" or ext == "hh" or ext == "hxx" or ext == "hpp" or ext == "c" or
|
||||
ext == "cc" or
|
||||
ext == "cpp" or
|
||||
ext == "cxx"
|
||||
end
|
||||
|
||||
local function get_files_sorted_without_extension(dir)
|
||||
local files = {}
|
||||
local scanner = vim.loop.fs_scandir(dir)
|
||||
if not scanner then
|
||||
return files
|
||||
end
|
||||
|
||||
while true do
|
||||
local name, typ = vim.loop.fs_scandir_next(scanner)
|
||||
if not name then
|
||||
break
|
||||
end
|
||||
if typ == "file" then
|
||||
local base = name:match("(.+)%.[^%.]+$") or name
|
||||
table.insert(files, base)
|
||||
end
|
||||
end
|
||||
|
||||
table.sort(files)
|
||||
return files
|
||||
end
|
||||
|
||||
local function create_vert_display(name, command)
|
||||
vim.api.nvim_create_user_command(
|
||||
name,
|
||||
function()
|
||||
vim.cmd("vert new")
|
||||
local buf = vim.api.nvim_get_current_buf()
|
||||
|
||||
vim.bo[buf].buftype = "nofile"
|
||||
vim.bo[buf].bufhidden = "wipe"
|
||||
vim.bo[buf].buflisted = false
|
||||
vim.bo[buf].swapfile = false
|
||||
vim.bo[buf].modifiable = true
|
||||
vim.opt_local.wrap = true
|
||||
|
||||
local lines = vim.fn.execute(command, "silent")
|
||||
vim.api.nvim_buf_set_lines(
|
||||
buf,
|
||||
0,
|
||||
-1,
|
||||
false,
|
||||
vim.split(lines, "\n", {plain = true, trimempty = true})
|
||||
)
|
||||
|
||||
vim.bo[buf].modifiable = false
|
||||
vim.api.nvim_win_set_cursor(0, {vim.api.nvim_buf_line_count(buf), 0})
|
||||
end,
|
||||
{}
|
||||
)
|
||||
end
|
||||
|
||||
local function copy_file(src, dst)
|
||||
local uv = vim.uv
|
||||
local ok, err = uv.fs_copyfile(src, dst)
|
||||
if not ok then
|
||||
error(("copy failed: %s"):format(err))
|
||||
end
|
||||
end
|
||||
|
||||
local function iff(b, l, r)
|
||||
if b then
|
||||
return l
|
||||
end
|
||||
|
||||
return r
|
||||
end
|
||||
|
||||
local parse_env = function(var, def)
|
||||
if vim.env[var] ~= nil then
|
||||
if type(def) == "boolean" then
|
||||
local result =
|
||||
({
|
||||
["0"] = false,
|
||||
["1"] = true,
|
||||
["false"] = false,
|
||||
["n"] = false,
|
||||
["no"] = false,
|
||||
["off"] = false,
|
||||
["on"] = true,
|
||||
["true"] = true,
|
||||
["y"] = true,
|
||||
["yes"] = true
|
||||
})[tostring(vim.env[var]):lower()]
|
||||
if result == nil then
|
||||
return def
|
||||
end
|
||||
return result
|
||||
end
|
||||
|
||||
return vim.env[var]
|
||||
end
|
||||
|
||||
return def
|
||||
end
|
||||
|
||||
local parse_env_list = function(var, def)
|
||||
if vim.env[var] ~= nil then
|
||||
local items = vim.split(var, " ", {plain = true, trimempty = true})
|
||||
for i, v in ipairs(items) do
|
||||
items[i] = vim.fn.trim(v)
|
||||
end
|
||||
return items
|
||||
end
|
||||
|
||||
return def
|
||||
end
|
||||
|
||||
local function get_current_filename(buffer)
|
||||
buffer = buffer or 0
|
||||
local name = vim.api.nvim_buf_get_name(buffer)
|
||||
if name == "" then
|
||||
return ""
|
||||
end
|
||||
|
||||
return vim.fn.fnamemodify(name, ":t")
|
||||
end
|
||||
|
||||
local notify_setting_enabled = function(text, enabled)
|
||||
vim.notify(
|
||||
text .. ": " .. iff(enabled, "ENABLED", "DISABLED"),
|
||||
vim.log.levels.INFO
|
||||
)
|
||||
end
|
||||
|
||||
return {
|
||||
augroup_with_autocmd = augroup_with_autocmd,
|
||||
augroup_with_autocmd_buffer = augroup_with_autocmd_buffer,
|
||||
autocmd = autocmd,
|
||||
autocmd_buffer = autocmd_buffer,
|
||||
coc_command = coc_command,
|
||||
copy_file = copy_file,
|
||||
create_vert_display = create_vert_display,
|
||||
cword = cword,
|
||||
file_exists = file_exists,
|
||||
get_current_filename = get_current_filename,
|
||||
get_files_sorted_without_extension = get_files_sorted_without_extension,
|
||||
get_visual_text = get_visual_text,
|
||||
iff = iff,
|
||||
is_c_family_file = is_c_family_file,
|
||||
notify_setting_enabled = notify_setting_enabled,
|
||||
parse_env = parse_env,
|
||||
parse_env_list = parse_env_list
|
||||
}
|
||||
Reference in New Issue
Block a user