diff options
author | euclidianAce <euclidianAce@protonmail.com> | 2022-11-09 17:26:02 -0600 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-11-09 23:26:02 +0000 |
commit | 0faf007a236c9b51f151790f79ee59366b501c55 (patch) | |
tree | 369d795ddee879f5add70f7a2a67e049f6c30b33 | |
parent | ef1d291f29961ae10cc122e92fb2419cbbd29f3b (diff) | |
download | rneovim-0faf007a236c9b51f151790f79ee59366b501c55.tar.gz rneovim-0faf007a236c9b51f151790f79ee59366b501c55.tar.bz2 rneovim-0faf007a236c9b51f151790f79ee59366b501c55.zip |
fix(man.lua): use `env` command (#21007)
Previously man.lua would use the `env` field in the parameters of
`vim.loop.spawn` to override things like MANPAGER. This caused issues on
NixOS since `spawn` will _override_ the environment rather than _append_
to it (and NixOS relies on a heavily modified environment). Using the
`env` command to append to the environment solves this issue.
-rw-r--r-- | runtime/lua/man.lua | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/runtime/lua/man.lua b/runtime/lua/man.lua index 5951884e07..a644dd68b8 100644 --- a/runtime/lua/man.lua +++ b/runtime/lua/man.lua @@ -12,7 +12,7 @@ local function man_error(msg) end -- Run a system command and timeout after 30 seconds. -local function system(cmd, silent, env) +local function system(cmd_, silent, env) local stdout_data = {} local stderr_data = {} local stdout = vim.loop.new_pipe(false) @@ -21,11 +21,23 @@ local function system(cmd, silent, env) local done = false local exit_code + -- We use the `env` command here rather than the env option to vim.loop.spawn since spawn will + -- completely overwrite the environment when we just want to modify the existing one. + -- + -- Overwriting mainly causes problems NixOS which relies heavily on a non-standard environment. + local cmd + if env then + cmd = { 'env' } + vim.list_extend(cmd, env) + vim.list_extend(cmd, cmd_) + else + cmd = cmd_ + end + local handle handle = vim.loop.spawn(cmd[1], { args = vim.list_slice(cmd, 2), stdio = { nil, stdout, stderr }, - env = env, }, function(code) exit_code = code stdout:close() |