mirror of
https://github.com/neovim/neovim.git
synced 2025-09-06 03:18:16 +00:00
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.
This commit is contained in:
@@ -12,7 +12,7 @@ local function man_error(msg)
|
|||||||
end
|
end
|
||||||
|
|
||||||
-- Run a system command and timeout after 30 seconds.
|
-- 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 stdout_data = {}
|
||||||
local stderr_data = {}
|
local stderr_data = {}
|
||||||
local stdout = vim.loop.new_pipe(false)
|
local stdout = vim.loop.new_pipe(false)
|
||||||
@@ -21,11 +21,23 @@ local function system(cmd, silent, env)
|
|||||||
local done = false
|
local done = false
|
||||||
local exit_code
|
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
|
local handle
|
||||||
handle = vim.loop.spawn(cmd[1], {
|
handle = vim.loop.spawn(cmd[1], {
|
||||||
args = vim.list_slice(cmd, 2),
|
args = vim.list_slice(cmd, 2),
|
||||||
stdio = { nil, stdout, stderr },
|
stdio = { nil, stdout, stderr },
|
||||||
env = env,
|
|
||||||
}, function(code)
|
}, function(code)
|
||||||
exit_code = code
|
exit_code = code
|
||||||
stdout:close()
|
stdout:close()
|
||||||
|
Reference in New Issue
Block a user