aboutsummaryrefslogtreecommitdiff
path: root/runtime/lua/vim/_system.lua
diff options
context:
space:
mode:
authorJustin M. Keyes <justinkz@gmail.com>2024-04-15 04:33:09 -0700
committerGitHub <noreply@github.com>2024-04-15 04:33:09 -0700
commit57adf8c6e01d9395eb52fe03571c535571efdc4b (patch)
treef5f999287509f2970c4f9034934fbecdfadb83ca /runtime/lua/vim/_system.lua
parent4ec8fd43bfdf1924ee03e07afc8a46dfdd3c9b12 (diff)
downloadrneovim-57adf8c6e01d9395eb52fe03571c535571efdc4b.tar.gz
rneovim-57adf8c6e01d9395eb52fe03571c535571efdc4b.tar.bz2
rneovim-57adf8c6e01d9395eb52fe03571c535571efdc4b.zip
fix(vim.ui): open() may wait indefinitely #28325
Problem: vim.ui.open "locks up" Nvim if the spawned process does not terminate. #27986 Solution: - Change `vim.ui.open()`: - Do not call `wait()`. - Return a `SystemObj`. The caller can decide if it wants to `wait()`. - Change `gx` to `wait()` only a short time. - Allows `gx` to show a message if the command fails, without the risk of waiting forever.
Diffstat (limited to 'runtime/lua/vim/_system.lua')
-rw-r--r--runtime/lua/vim/_system.lua3
1 files changed, 3 insertions, 0 deletions
diff --git a/runtime/lua/vim/_system.lua b/runtime/lua/vim/_system.lua
index e97a5fc6c3..d603971495 100644
--- a/runtime/lua/vim/_system.lua
+++ b/runtime/lua/vim/_system.lua
@@ -18,6 +18,7 @@ local uv = vim.uv
--- @field stderr? string
--- @class vim.SystemState
+--- @field cmd string[]
--- @field handle? uv.uv_process_t
--- @field timer? uv.uv_timer_t
--- @field pid? integer
@@ -56,6 +57,7 @@ local function close_handles(state)
end
--- @class vim.SystemObj
+--- @field cmd string[]
--- @field pid integer
--- @field private _state vim.SystemState
--- @field wait fun(self: vim.SystemObj, timeout?: integer): vim.SystemCompleted
@@ -68,6 +70,7 @@ local SystemObj = {}
--- @return vim.SystemObj
local function new_systemobj(state)
return setmetatable({
+ cmd = state.cmd,
pid = state.pid,
_state = state,
}, { __index = SystemObj })