diff options
author | Aylur <[email protected]> | 2024-08-22 02:14:36 +0200 |
---|---|---|
committer | Aylur <[email protected]> | 2024-08-22 02:14:50 +0200 |
commit | 24af00f6a7f624feda4b6aaceb4c5b0fa6f536d6 (patch) | |
tree | 11fdac0f3031a991b32b12ff76f5f96adaf4848d /lua | |
parent | 6dd5200fa30c48e1cd9a2f820c62c54b0974c925 (diff) |
feat: async Process.exec
the exec_async function was not truly async but a signal based one
Diffstat (limited to 'lua')
-rw-r--r-- | lua/astal/process.lua | 31 |
1 files changed, 16 insertions, 15 deletions
diff --git a/lua/astal/process.lua b/lua/astal/process.lua index 804fd0f..3d10f8b 100644 --- a/lua/astal/process.lua +++ b/lua/astal/process.lua @@ -68,26 +68,27 @@ 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.exec_async(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.exec_asyncv(commandline) + Astal.Process.exec_asyncv(commandline, function(_, res) + local stdout, fail = Astal.exec_asyncv_finish(res) + if fail ~= nil then + err(fail) + else + out(stdout) + end + end) else - proc, fail = Astal.Process.exec_async(commandline) + Astal.Process.exec_async(commandline, function(_, res) + local stdout, fail = Astal.exec_finish(res) + if fail ~= nil then + err(fail) + else + out(stdout) + end + end) end - if fail ~= nil then - err(fail) - return nil - end - proc.on_stdout = function(_, str) - out(str) - end - proc.on_stderr = function(_, str) - err(str) - end - return proc end return M |