commit a8dd5c7e41dde33a5e130eb6d8945def13ebb8d6
parent 74ca73d545daf9aff6a6b041572be062d46d51ef
Author: Emanuel Krollmann <115734183+Sodastream11@users.noreply.github.com>
Date: Sat, 12 Apr 2025 19:54:20 +0200
fix(man.lua): noisy "ENOENT" error on Windows #33409
Problem:
:Man shows noisy "ENOENT: no such file or directory" error on Windows.
Solution:
Do some checks before calling `vim.system`.
Diffstat:
2 files changed, 11 insertions(+), 2 deletions(-)
diff --git a/runtime/lua/man.lua b/runtime/lua/man.lua
@@ -8,6 +8,12 @@ local M = {}
--- @param env? table<string,string|number>
--- @return string
local function system(cmd, silent, env)
+ if vim.fn.executable(cmd[1]) == 0 then
+ error(string.format('not found: "%s"', cmd[1]), 0)
+ elseif vim.uv.fs_access(cmd[1], 'X') then
+ error(string.format('not executable : "%s"', cmd[1]), 0)
+ end
+
local r = vim.system(cmd, { env = env, timeout = 10000 }):wait()
if not silent then
@@ -577,7 +583,10 @@ function M.man_complete(arg_lead, cmd_line)
return {}
end
- local pages = get_paths(name, sect)
+ local ok, pages = pcall(get_paths, name, sect)
+ if not ok then
+ return nil
+ end
-- We check for duplicates in case the same manpage in different languages
-- was found.
diff --git a/runtime/plugin/man.lua b/runtime/plugin/man.lua
@@ -8,7 +8,7 @@ vim.api.nvim_create_user_command('Man', function(params)
if params.bang then
man.init_pager()
else
- local err = man.open_page(params.count, params.smods, params.fargs)
+ local _, err = pcall(man.open_page, params.count, params.smods, params.fargs)
if err then
vim.notify('man.lua: ' .. err, vim.log.levels.ERROR)
end