feat(#2430): use vim.ui.open as default system_open, for neovim 0.10+ (#2912)

* feat(#2430): use vim.ui.open as default system_open, for neovim 0.10+

* feat(#2430): use vim.ui.open as default system_open, for neovim 0.10+
This commit is contained in:
Alexander Courtis 2024-09-14 15:15:44 +10:00 committed by GitHub
parent a4dd5ad5c8
commit 03f737e574
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 40 additions and 12 deletions

View File

@ -1198,11 +1198,18 @@ Takes the `BufEnter` event as an argument. see |autocmd-events|
Open a file or directory in your preferred application. Open a file or directory in your preferred application.
|vim.ui.open| was introduced in neovim 0.10 and is the default.
Once nvim-tree minimum neovim version is updated to 0.10, these options will
no longer be necessary and will be removed.
*nvim-tree.system_open.cmd* *nvim-tree.system_open.cmd*
The open command itself. The open command itself.
Type: `string`, Default: `""` Type: `string`, Default: `""`
Leave empty for OS specific default: neovim >= 0.10 defaults to |vim.ui.open|
neovim < 0.10 defaults to:
UNIX: `"xdg-open"` UNIX: `"xdg-open"`
macOS: `"open"` macOS: `"open"`
Windows: `"cmd"` Windows: `"cmd"`

View File

@ -4,7 +4,7 @@ local utils = require "nvim-tree.utils"
local M = {} local M = {}
---@param node Node ---@param node Node
function M.fn(node) local function user(node)
if #M.config.system_open.cmd == 0 then if #M.config.system_open.cmd == 0 then
require("nvim-tree.utils").notify.warn "Cannot open file with system application. Unrecognized platform." require("nvim-tree.utils").notify.warn "Cannot open file with system application. Unrecognized platform."
return return
@ -49,10 +49,30 @@ function M.fn(node)
vim.loop.unref(process.handle) vim.loop.unref(process.handle)
end end
---@param node Node
local function native(node)
local _, err = vim.ui.open(node.link_to or node.absolute_path)
-- err only provided on opener executable not found hence logging path is not useful
if err then
notify.warn(err)
end
end
---@param node Node
function M.fn(node)
M.open(node)
end
-- TODO always use native once 0.10 is the minimum neovim version
function M.setup(opts) function M.setup(opts)
M.config = {} M.config = {}
M.config.system_open = opts.system_open or {} M.config.system_open = opts.system_open or {}
if vim.fn.has "nvim-0.10" == 1 and #M.config.system_open.cmd == 0 then
M.open = native
else
M.open = user
if #M.config.system_open.cmd == 0 then if #M.config.system_open.cmd == 0 then
if utils.is_windows then if utils.is_windows then
M.config.system_open = { M.config.system_open = {
@ -65,6 +85,7 @@ function M.setup(opts)
M.config.system_open.cmd = "xdg-open" M.config.system_open.cmd = "xdg-open"
end end
end end
end
end end
return M return M