canola.nvim/lua/oil/shell.lua
2023-01-02 01:34:53 -08:00

40 lines
887 B
Lua

local M = {}
M.run = function(cmd, callback)
local stdout
local stderr = {}
local jid = vim.fn.jobstart(cmd, {
stdout_buffered = true,
stderr_buffered = true,
on_stdout = function(j, output)
stdout = output
end,
on_stderr = function(j, output)
stderr = output
end,
on_exit = vim.schedule_wrap(function(j, code)
if code == 0 then
callback(nil, stdout)
else
local err = table.concat(stderr, "\n")
if err == "" then
err = "Unknown error"
end
callback(err)
end
end),
})
local exe
if type(cmd) == "string" then
exe = vim.split(cmd, "%s+")[1]
else
exe = cmd[1]
end
if jid == 0 then
callback(string.format("Passed invalid arguments to '%s'", exe))
elseif jid == -1 then
callback(string.format("'%s' is not executable", exe))
end
end
return M