95 lines
2.2 KiB
Lua
95 lines
2.2 KiB
Lua
-- Highlight on yank
|
|
local highlight_group = vim.api.nvim_create_augroup("YankHighlight", { clear = true })
|
|
|
|
vim.api.nvim_create_autocmd("TextYankPost", {
|
|
callback = function()
|
|
vim.highlight.on_yank()
|
|
end,
|
|
group = highlight_group,
|
|
pattern = "*",
|
|
})
|
|
|
|
function root_pattern(...)
|
|
local patterns = M.tbl_flatten({ ... })
|
|
return function(startpath)
|
|
startpath = M.strip_archive_subpath(startpath)
|
|
for _, pattern in ipairs(patterns) do
|
|
local match = M.search_ancestors(startpath, function(path)
|
|
for _, p in ipairs(vim.fn.glob(table.concat({ escape_wildcards(path), pattern }, "/"), true, true)) do
|
|
if vim.loop.fs_stat(p) then
|
|
return path
|
|
end
|
|
end
|
|
end)
|
|
|
|
if match ~= nil then
|
|
return match
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
local function filter(arr, fn)
|
|
if type(arr) ~= "table" then
|
|
return arr
|
|
end
|
|
|
|
local filtered = {}
|
|
for k, v in pairs(arr) do
|
|
if fn(v, k, arr) then
|
|
table.insert(filtered, v)
|
|
end
|
|
end
|
|
|
|
return filtered
|
|
end
|
|
|
|
local function filterReactDTS(value)
|
|
-- Depending on typescript version either uri or targetUri is returned
|
|
if value.uri then
|
|
return string.match(value.uri, "%.d.ts") == nil
|
|
elseif value.targetUri then
|
|
return string.match(value.targetUri, "%.d.ts") == nil
|
|
end
|
|
end
|
|
|
|
local project_types = {
|
|
["main.odin"] = "odin run .",
|
|
["package.json"] = "pnpm run dev",
|
|
["Makefile"] = "make",
|
|
}
|
|
|
|
local function find_project_type()
|
|
for marker, _ in pairs(project_types) do
|
|
if vim.fn.glob(marker) ~= "" then
|
|
return marker
|
|
end
|
|
end
|
|
return nil
|
|
end
|
|
|
|
local function compile_project()
|
|
local marker = find_project_type()
|
|
|
|
if not marker then
|
|
vim.notify("No recognized project type found", vim.log.levels.WARN)
|
|
return
|
|
end
|
|
|
|
local cmd = project_types[marker]
|
|
|
|
-- Create a new terminal buffer and run the command
|
|
vim.cmd("botright new") -- Create new window at bottom
|
|
vim.cmd("terminal " .. cmd)
|
|
|
|
-- Enter normal mode and hide the buffer number
|
|
vim.cmd("setlocal nonumber")
|
|
vim.cmd("setlocal norelativenumber")
|
|
vim.cmd("startinsert")
|
|
end
|
|
|
|
return {
|
|
compile_project = compile_project,
|
|
filter = filter,
|
|
filterReactDTS = filterReactDTS,
|
|
}
|