diff options
author | Lewis Russell <lewis6991@gmail.com> | 2022-10-11 13:25:42 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-10-11 13:25:42 +0100 |
commit | cba05c541d613dc05916b262c0d7d3a10ec08c67 (patch) | |
tree | 62ba0de531a6a09456cacbc1dcb0b682888ccf10 /runtime/lua/man.lua | |
parent | c5347d47e1f8af1e5a23ea9a71c98ec4a0fbeaa3 (diff) | |
download | rneovim-cba05c541d613dc05916b262c0d7d3a10ec08c67.tar.gz rneovim-cba05c541d613dc05916b262c0d7d3a10ec08c67.tar.bz2 rneovim-cba05c541d613dc05916b262c0d7d3a10ec08c67.zip |
refactor(man): pass env directly to spawn() (#20591)
Diffstat (limited to 'runtime/lua/man.lua')
-rw-r--r-- | runtime/lua/man.lua | 48 |
1 files changed, 24 insertions, 24 deletions
diff --git a/runtime/lua/man.lua b/runtime/lua/man.lua index 88535321ac..8ca1bb90f5 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 man_system(cmd, silent) +local function man_system(args, silent, env) local stdout_data = {} local stderr_data = {} local stdout = vim.loop.new_pipe(false) @@ -22,9 +22,10 @@ local function man_system(cmd, silent) local exit_code local handle - handle = vim.loop.spawn(cmd[1], { - args = vim.list_slice(cmd, 2), + handle = vim.loop.spawn('man', { + args = args, stdio = { nil, stdout, stderr }, + env = env, }, function(code) exit_code = code stdout:close() @@ -44,7 +45,8 @@ local function man_system(cmd, silent) stdout:close() stderr:close() if not silent then - man_error(string.format('command error: %s', table.concat(cmd))) + local cmd = table.concat({ 'man', unpack(args) }, ' ') + man_error(string.format('command error: %s', cmd)) end end @@ -58,13 +60,13 @@ local function man_system(cmd, silent) stdout:close() stderr:close() end - man_error(string.format('command timed out: %s', table.concat(cmd, ' '))) + local cmd = table.concat({ 'man', unpack(args) }, ' ') + man_error(string.format('command timed out: %s', cmd)) end if exit_code ~= 0 and not silent then - man_error( - string.format("command error '%s': %s", table.concat(cmd, ' '), table.concat(stderr_data)) - ) + local cmd = table.concat({ 'man', unpack(args) }, ' ') + man_error(string.format("command error '%s': %s", cmd, table.concat(stderr_data))) end return table.concat(stdout_data) @@ -267,19 +269,15 @@ local function get_path(sect, name, silent) -- -- Finally, we can avoid relying on -S or -s here since they are very -- inconsistently supported. Instead, call -w with a section and a name. - local cmd + local args if sect == '' then - cmd = { 'man', find_arg, name } + args = { find_arg, name } else - cmd = { 'man', find_arg, sect, name } + args = { find_arg, sect, name } end - local lines = man_system(cmd, silent) - if lines == nil then - return nil - end - - local results = vim.split(lines, '\n', { trimempty = true }) + local lines = man_system(args, silent) + local results = vim.split(lines or {}, '\n', { trimempty = true }) if #results == 0 then return @@ -435,15 +433,17 @@ local function get_page(path, silent) else manwidth = api.nvim_win_get_width(0) end + + local args = localfile_arg and { '-l', path } or { path } + -- Force MANPAGER=cat to ensure Vim is not recursively invoked (by man-db). -- http://comments.gmane.org/gmane.editors.vim.devel/29085 -- Set MAN_KEEP_FORMATTING so Debian man doesn't discard backspaces. - local cmd = { 'env', 'MANPAGER=cat', 'MANWIDTH=' .. manwidth, 'MAN_KEEP_FORMATTING=1', 'man' } - if localfile_arg then - cmd[#cmd + 1] = '-l' - end - cmd[#cmd + 1] = path - return man_system(cmd, silent) + return man_system(args, silent, { + 'MANPAGER=cat', + 'MANWIDTH=' .. manwidth, + 'MAN_KEEP_FORMATTING=1', + }) end local function put_page(page) @@ -484,7 +484,7 @@ local function get_paths(sect, name, do_fallback) -- callers must try-catch this, as some `man` implementations don't support `s:find_arg` local ok, ret = pcall(function() local mandirs = - table.concat(vim.split(man_system({ 'man', find_arg }), '[:\n]', { trimempty = true }), ',') + table.concat(vim.split(man_system({ find_arg }), '[:\n]', { trimempty = true }), ',') local paths = fn.globpath(mandirs, 'man?/' .. name .. '*.' .. sect .. '*', false, true) pcall(function() -- Prioritize the result from verify_exists as it obeys b:man_default_sects. |