mirror of
https://github.com/zoriya/astal.git
synced 2025-12-06 06:06:10 +00:00
lua: adjust exec functions
This commit is contained in:
@@ -3,90 +3,74 @@ local Astal = lgi.require("Astal", "0.1")
|
||||
|
||||
local M = {}
|
||||
|
||||
local defualt_proc_args = function(on_stdout, on_stderr)
|
||||
if on_stdout == nil then
|
||||
on_stdout = function(out)
|
||||
io.stdout:write(tostring(out) .. "\n")
|
||||
return tostring(out)
|
||||
end
|
||||
end
|
||||
|
||||
if on_stderr == nil then
|
||||
on_stderr = function(err)
|
||||
io.stderr:write(tostring(err) .. "\n")
|
||||
return tostring(err)
|
||||
end
|
||||
end
|
||||
|
||||
return on_stdout, on_stderr
|
||||
end
|
||||
|
||||
---@param commandline string | string[]
|
||||
---@param on_stdout? fun(out: string): nil
|
||||
---@param on_stderr? fun(err: string): nil
|
||||
---@return { kill: function } | nil proc
|
||||
function M.subprocess(commandline, on_stdout, on_stderr)
|
||||
local out, err = defualt_proc_args(on_stdout, on_stderr)
|
||||
local proc, fail
|
||||
if type(commandline) == "table" then
|
||||
proc, fail = Astal.Process.subprocessv(commandline)
|
||||
else
|
||||
proc, fail = Astal.Process.subprocess(commandline)
|
||||
if on_stdout == nil then
|
||||
on_stdout = function(out)
|
||||
io.stdout:write(tostring(out) .. "\n")
|
||||
end
|
||||
end
|
||||
if fail ~= nil then
|
||||
err(fail)
|
||||
|
||||
if on_stderr == nil then
|
||||
on_stderr = function(err)
|
||||
io.stderr:write(tostring(err) .. "\n")
|
||||
end
|
||||
end
|
||||
|
||||
local proc, err
|
||||
if type(commandline) == "table" then
|
||||
proc, err = Astal.Process.subprocessv(commandline)
|
||||
else
|
||||
proc, err = Astal.Process.subprocess(commandline)
|
||||
end
|
||||
if err ~= nil then
|
||||
err(err)
|
||||
return nil
|
||||
end
|
||||
proc.on_stdout = function(_, str)
|
||||
out(str)
|
||||
proc.on_stdout = function(_, stdoud)
|
||||
on_stdout(stdoud)
|
||||
end
|
||||
proc.on_stderr = function(_, str)
|
||||
err(str)
|
||||
proc.on_stderr = function(_, stderr)
|
||||
on_stderr(stderr)
|
||||
end
|
||||
return proc
|
||||
end
|
||||
|
||||
---@generic T
|
||||
---@param commandline string | string[]
|
||||
---@param on_stdout? fun(out: string): T
|
||||
---@param on_stderr? fun(err: string): T
|
||||
---@return T
|
||||
function M.exec(commandline, on_stdout, on_stderr)
|
||||
local out, err = defualt_proc_args(on_stdout, on_stderr)
|
||||
local stdout, stderr
|
||||
---@return string, string
|
||||
function M.exec(commandline)
|
||||
if type(commandline) == "table" then
|
||||
stdout, stderr = Astal.Process.execv(commandline)
|
||||
return Astal.Process.execv(commandline)
|
||||
else
|
||||
stdout, stderr = Astal.Process.exec(commandline)
|
||||
return Astal.Process.exec(commandline)
|
||||
end
|
||||
if stderr then
|
||||
return err(stderr)
|
||||
end
|
||||
return out(stdout)
|
||||
end
|
||||
|
||||
---@param commandline string | string[]
|
||||
---@param on_stdout? fun(out: string): nil
|
||||
---@param on_stderr? fun(err: string): nil
|
||||
function M.exec_async(commandline, on_stdout, on_stderr)
|
||||
local out, err = defualt_proc_args(on_stdout, on_stderr)
|
||||
---@param callback? fun(out: string, err: string): nil
|
||||
function M.exec_async(commandline, callback)
|
||||
if callback == nil then
|
||||
callback = function(out, err)
|
||||
if err ~= nil then
|
||||
io.stdout:write(tostring(out) .. "\n")
|
||||
else
|
||||
io.stderr:write(tostring(err) .. "\n")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if type(commandline) == "table" then
|
||||
Astal.Process.exec_asyncv(commandline, function(_, res)
|
||||
local stdout, fail = Astal.Process.exec_asyncv_finish(res)
|
||||
if fail ~= nil then
|
||||
err(fail)
|
||||
else
|
||||
out(stdout)
|
||||
end
|
||||
local out, err = Astal.Process.exec_asyncv_finish(res)
|
||||
callback(out, err)
|
||||
end)
|
||||
else
|
||||
Astal.Process.exec_async(commandline, function(_, res)
|
||||
local stdout, fail = Astal.Process.exec_finish(res)
|
||||
if fail ~= nil then
|
||||
err(fail)
|
||||
else
|
||||
out(stdout)
|
||||
end
|
||||
local out, err = Astal.Process.exec_finish(res)
|
||||
callback(out, err)
|
||||
end)
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user