aboutsummaryrefslogtreecommitdiff
path: root/runtime/lua/vim/ui.lua
diff options
context:
space:
mode:
authorJosh Rahm <joshuarahm@gmail.com>2024-05-24 19:18:11 +0000
committerJosh Rahm <joshuarahm@gmail.com>2024-05-24 19:18:11 +0000
commitff7ed8f586589d620a806c3758fac4a47a8e7e15 (patch)
tree729bbcb92231538fa61dab6c3d890b025484b7f5 /runtime/lua/vim/ui.lua
parent376914f419eb08fdf4c1a63a77e1f035898a0f10 (diff)
parent28c04948a1c887a1cc0cb64de79fa32631700466 (diff)
downloadrneovim-ff7ed8f586589d620a806c3758fac4a47a8e7e15.tar.gz
rneovim-ff7ed8f586589d620a806c3758fac4a47a8e7e15.tar.bz2
rneovim-ff7ed8f586589d620a806c3758fac4a47a8e7e15.zip
Merge remote-tracking branch 'upstream/master' into mix_20240309
Diffstat (limited to 'runtime/lua/vim/ui.lua')
-rw-r--r--runtime/lua/vim/ui.lua41
1 files changed, 31 insertions, 10 deletions
diff --git a/runtime/lua/vim/ui.lua b/runtime/lua/vim/ui.lua
index b0e7ca1a35..99b9b78e2a 100644
--- a/runtime/lua/vim/ui.lua
+++ b/runtime/lua/vim/ui.lua
@@ -114,15 +114,20 @@ end
--- Examples:
---
--- ```lua
+--- -- Asynchronous.
--- vim.ui.open("https://neovim.io/")
--- vim.ui.open("~/path/to/file")
---- vim.ui.open("$VIMRUNTIME")
+--- -- Synchronous (wait until the process exits).
+--- local cmd, err = vim.ui.open("$VIMRUNTIME")
+--- if cmd then
+--- cmd:wait()
+--- end
--- ```
---
---@param path string Path or URL to open
---
----@return vim.SystemCompleted|nil # Command result, or nil if not found.
----@return string|nil # Error message on failure
+---@return vim.SystemObj|nil # Command object, or nil if not found.
+---@return nil|string # Error message on failure, or nil on success.
---
---@see |vim.system()|
function M.open(path)
@@ -144,21 +149,37 @@ function M.open(path)
else
return nil, 'vim.ui.open: rundll32 not found'
end
+ elseif vim.fn.executable('wslview') == 1 then
+ cmd = { 'wslview', path }
elseif vim.fn.executable('explorer.exe') == 1 then
cmd = { 'explorer.exe', path }
elseif vim.fn.executable('xdg-open') == 1 then
cmd = { 'xdg-open', path }
else
- return nil, 'vim.ui.open: no handler found (tried: explorer.exe, xdg-open)'
+ return nil, 'vim.ui.open: no handler found (tried: wslview, explorer.exe, xdg-open)'
end
- local rv = vim.system(cmd, { text = true, detach = true }):wait()
- if rv.code ~= 0 then
- local msg = ('vim.ui.open: command failed (%d): %s'):format(rv.code, vim.inspect(cmd))
- return rv, msg
- end
+ return vim.system(cmd, { text = true, detach = true }), nil
+end
- return rv, nil
+--- Gets the URL at cursor, if any.
+function M._get_url()
+ if vim.bo.filetype == 'markdown' then
+ local range = vim.api.nvim_win_get_cursor(0)
+ vim.treesitter.get_parser():parse(range)
+ -- marking the node as `markdown_inline` is required. Setting it to `markdown` does not
+ -- work.
+ local current_node = vim.treesitter.get_node { lang = 'markdown_inline' }
+ while current_node do
+ local type = current_node:type()
+ if type == 'inline_link' or type == 'image' then
+ local child = assert(current_node:named_child(1))
+ return vim.treesitter.get_node_text(child, 0)
+ end
+ current_node = current_node:parent()
+ end
+ end
+ return vim.fn.expand('<cfile>')
end
return M