aboutsummaryrefslogtreecommitdiff
path: root/runtime/lua/man.lua
diff options
context:
space:
mode:
Diffstat (limited to 'runtime/lua/man.lua')
-rw-r--r--runtime/lua/man.lua35
1 files changed, 27 insertions, 8 deletions
diff --git a/runtime/lua/man.lua b/runtime/lua/man.lua
index 6477786dbb..732a4ab92e 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()
@@ -283,6 +295,14 @@ local function get_path(sect, name, silent)
return
end
+ -- `man -w /some/path` will return `/some/path` for any existent file, which
+ -- stops us from actually determining if a path has a corresponding man file.
+ -- Since `:Man /some/path/to/man/file` isn't supported anyway, we should just
+ -- error out here if we detect this is the case.
+ if sect == '' and #results == 1 and results[1] == name then
+ return
+ end
+
-- find any that match the specified name
local namematches = vim.tbl_filter(function(v)
return fn.fnamemodify(v, ':t'):match(name)
@@ -400,6 +420,10 @@ local function extract_sect_and_name_path(path)
end
local function find_man()
+ if vim.bo.filetype == 'man' then
+ return true
+ end
+
local win = 1
while win <= fn.winnr('$') do
local buf = fn.winbufnr(win)
@@ -449,7 +473,7 @@ local function get_page(path, silent)
end
local function put_page(page)
- vim.bo.modified = true
+ vim.bo.modifiable = true
vim.bo.readonly = false
vim.bo.swapfile = false
@@ -604,11 +628,6 @@ function M.goto_tag(pattern, _, _)
end
end
- if vim.o.cscopetag then
- -- return only a single entry so we work well with :cstag (#11675)
- structured = { structured[1] }
- end
-
return vim.tbl_map(function(entry)
return {
name = entry.name,