summaryrefslogtreecommitdiff
path: root/lang/lua/astal/process.lua
diff options
context:
space:
mode:
authorAylur <[email protected]>2024-10-15 13:25:45 +0000
committerAylur <[email protected]>2024-10-15 13:29:19 +0000
commitbafd48d3df9b43a1d49ec015eff30619d595468b (patch)
treed5c3788835ca7e50d68cd023026e7738f39f6f71 /lang/lua/astal/process.lua
parentfe11c037bad45697451b7264ff93fa37f1fac78f (diff)
update lua and gjs layout
installing the gjs package through meson or npm now results in the same exposed structure lua: fix rockspec docs: aur package
Diffstat (limited to 'lang/lua/astal/process.lua')
-rw-r--r--lang/lua/astal/process.lua78
1 files changed, 78 insertions, 0 deletions
diff --git a/lang/lua/astal/process.lua b/lang/lua/astal/process.lua
new file mode 100644
index 0000000..b8b7436
--- /dev/null
+++ b/lang/lua/astal/process.lua
@@ -0,0 +1,78 @@
+local lgi = require("lgi")
+local Astal = lgi.require("AstalIO", "0.1")
+
+local M = {}
+
+---@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)
+ if on_stdout == nil then
+ on_stdout = function(out)
+ io.stdout:write(tostring(out) .. "\n")
+ end
+ end
+
+ 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(_, stdoud)
+ on_stdout(stdoud)
+ end
+ proc.on_stderr = function(_, stderr)
+ on_stderr(stderr)
+ end
+ return proc
+end
+
+---@param commandline string | string[]
+---@return string, string
+function M.exec(commandline)
+ if type(commandline) == "table" then
+ return Astal.Process.execv(commandline)
+ else
+ return Astal.Process.exec(commandline)
+ end
+end
+
+---@param commandline string | string[]
+---@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 out, err = Astal.Process.exec_asyncv_finish(res)
+ callback(out, err)
+ end)
+ else
+ Astal.Process.exec_async(commandline, function(_, res)
+ local out, err = Astal.Process.exec_finish(res)
+ callback(out, err)
+ end)
+ end
+end
+
+return M