astronvim-config/lua/utils.lua
2024-09-17 15:02:57 -03:00

61 lines
1.5 KiB
Lua

local M = {}
function M.vim_opt_toggle(opt, on, off, name)
if on == nil then on = true end
if off == nil then off = false end
if not name then name = opt end
local is_off = vim.opt[opt]:get() == off
vim.opt[opt] = is_off and on or off
require("astrocore").notify(name .. " " .. (is_off and "Enabled" or "Disabled"))
end
function M.async_run(cmd, on_finish)
local lines = { "" }
local function on_event(_, data, event)
if (event == "stdout" or event == "stderr") and data then vim.list_extend(lines, data) end
if event == "exit" then
vim.fn.setqflist({}, " ", {
title = table.concat(cmd, " "),
lines = lines,
efm = "%f:%l:%c: %t%n %m",
})
if on_finish then on_finish() end
end
end
vim.fn.jobstart(cmd, {
on_stdout = on_event,
on_stderr = on_event,
on_exit = on_event,
stdout_buffered = true,
stderr_buffered = true,
})
end
function M.toggle_qf()
local qf_exists = false
for _, win in pairs(vim.fn.getwininfo()) do
if win["quickfix"] == 1 then
qf_exists = true
break
end
end
if qf_exists then
vim.cmd.cclose()
elseif not vim.tbl_isempty(vim.fn.getqflist()) then
vim.cmd.copen()
end
end
function M.better_search(key)
return function()
local searched, error =
pcall(vim.cmd.normal, { args = { (vim.v.count > 0 and vim.v.count or "") .. key }, bang = true })
if not searched and type(error) == "string" then require("astrocore").notify(error, vim.log.levels.ERROR) end
end
end
return M