runtime(dist/vim9): fix regressions in dist#vim9#Open
Commit:
https://github.com/vim/vim/commit/766801295df78193a93712cd53b73e103f95e445
Author: Luca Saccarola <[email protected]>
Date: Wed Jan 29 18:33:46 2025 +0100
runtime(dist/vim9): fix regressions in dist#vim9#Open
fixes: https://github.com/vim/vim/issues/16533
fixes: https://github.com/vim/vim/issues/16532
closes: #16535
Signed-off-by: Luca Saccarola <[email protected]>
Signed-off-by: Christian Brabandt <[email protected]>
diff --git a/runtime/autoload/dist/vim9.vim b/runtime/autoload/dist/vim9.vim
index a2b1451b0..6d4079ea3 100644
--- a/runtime/autoload/dist/vim9.vim
+++ b/runtime/autoload/dist/vim9.vim
@@ -3,7 +3,7 @@ vim9script
# Vim runtime support library
#
# Maintainer: The Vim Project <https://github.com/vim/vim>
-# Last Change: 2025 Jan 24
+# Last Change: 2025 Jan 29
export def IsSafeExecutable(filetype: string, executable: string): bool
if empty(exepath(executable))
@@ -34,7 +34,7 @@ if has('unix')
# Cygwin provides cygstart
if executable('cygstart')
export def Launch(args: string)
- execute 'silent ! cygstart --hide' args Redir() | redraw!
+ execute $'silent ! cygstart --hide {args} {Redir()}' | redraw!
enddef
elseif !empty($MSYSTEM) && executable('start')
# MSYS2/Git Bash comes by default without cygstart; see
@@ -43,31 +43,32 @@ if has('unix')
# Adding "" //b` sets void title, hides cmd window and blocks path
conversion
# of /b to \ " by MSYS2; see
https://www.msys2.org/docs/filesystem-paths/
export def Launch(args: string)
- execute 'silent !start "" //b' args Redir() | redraw!
+ execute $'silent !start "" //b {args} {Redir()}' | redraw!
enddef
else
# imitate /usr/bin/start script for other environments and hope for the
best
export def Launch(args: string)
- execute 'silent !cmd //c start "" //b' args Redir() | redraw!
+ execute $'silent !cmd /c start "" /b {args} {Redir()}' | redraw!
enddef
endif
elseif exists('$WSL_DISTRO_NAME') # use cmd.exe to start GUI apps in WSL
export def Launch(args: string)
- execute 'silent !' ..
- ((args =~? ' <+\.(exe|com|bat|cmd)>') ?
- $'cmd.exe /c start /b {args} {Redir()}' :
- $'nohup {args} {Redir()} &')
- | redraw!
+ const command = (args =~? ' <+\.(exe|com|bat|cmd)>')
+ ? $'cmd.exe /c start /b {args} {Redir()}'
+ : $'nohup {args} {Redir()} &'
+ execute $'silent ! {command}' | redraw!
enddef
else
export def Launch(args: string)
- execute ':silent ! nohup' args Redir() (has('gui_running') ? '' : '&') |
redraw!
+ const fork = has('gui_running') ? '' : '&'
+ execute $':silent ! nohup {args} {Redir()} {fork}' | redraw!
enddef
endif
elseif has('win32')
export def Launch(args: string)
- execute 'silent !' .. (&shell =~? '\<cmd\.exe\>' ? '' : 'cmd.exe /c')
- 'start "" /b' args Redir() | redraw!
+ const shell = (&shell =~? '\<cmd\.exe\>') ? '' : 'cmd.exe /c'
+ const quotes = empty(shell) ? '' : '""'
+ execute $'silent ! {shell} start {quotes} /b {args} {Redir()}' | redraw!
enddef
else
export def Launch(dummy: string)
diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt
index 094b650c7..0851aa5c3 100644
--- a/runtime/doc/eval.txt
+++ b/runtime/doc/eval.txt
@@ -1,4 +1,4 @@
-*eval.txt* For Vim version 9.1. Last change: 2025 Jan 25
+*eval.txt* For Vim version 9.1. Last change: 2025 Jan 29
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -4908,13 +4908,25 @@ executable. It takes the following arguments:
executable string
*dist#vim9#Open()* *:Open*
- *g:Openprg*
+ *g:Openprg* *gx*
dist#vim9#Open(file: string) ~
Opens `path` with the system default handler (macOS `open`, Windows
`explorer.exe`, Linux `xdg-open`, 窶ヲ). If the variable |g:Openprg| exists the
string specified in the variable is used instead.
+This function is by default called using the gx mapping. In visual mode
+tries to open the visually selected text.
+
+Associated setting variables:
+`g:gx_word`: control how gx picks up the text under the cursor. Uses
+ `g:netrw_gx` as a fallback for backward compatibility.
+ (default: `<cfile>`)
+
+`g:nogx`: disables the gx mapping. Uses `g:netrw_nogx` as a fallback for
+ backward compatibility. (default: `unset`)
+
+
NOTE: Escaping of the path is automatically applied.
Usage: >vim
diff --git a/runtime/doc/tags b/runtime/doc/tags
index e667a33d5..f1d32d8ee 100644
--- a/runtime/doc/tags
+++ b/runtime/doc/tags
@@ -8053,6 +8053,7 @@ gvimrc gui.txt /*gvimrc*
gw change.txt /*gw*
gwgw change.txt /*gwgw*
gww change.txt /*gww*
+gx eval.txt /*gx*
gzip pi_gzip.txt /*gzip*
gzip-autocmd pi_gzip.txt /*gzip-autocmd*
gzip-example autocmd.txt /*gzip-example*
diff --git a/runtime/plugin/openPlugin.vim b/runtime/plugin/openPlugin.vim
index 103b33cd6..c231dc448 100644
--- a/runtime/plugin/openPlugin.vim
+++ b/runtime/plugin/openPlugin.vim
@@ -12,9 +12,18 @@ command -complete=file -nargs=1 Open
vim9.Open(trim(<q-args>))
const no_gx = get(g:, "nogx", get(g:, "netrw_nogx", false))
if !no_gx
+ def GetWordUnderCursor(): string
+ const url = matchstr(expand("<cWORD>"),
'\%(\%(http\|ftp\|irc\)s\?\|file\)://\S\{-}\ze[^A-Za-z0-9/]*$')
+ if !empty(url)
+ return url
+ endif
+
+ const user_var = get(g:, 'gx_word', get(g:, 'netrw_gx', '<cfile>')
+ return expand(user_var)
+ enddef
+
if maparg('gx', 'n') == ""
- const file = get(g:, 'netrw_gx', '<cfile>')
- nnoremap <unique> gx <scriptcmd>vim9.Open(expand(file))<CR>
+ nnoremap <unique> gx <scriptcmd>vim9.Open(GetWordUnderCursor())<CR>
endif
if maparg('gx', 'x') == ""
xnoremap <unique> gx <scriptcmd>vim9.Open(getregion(getpos('v'),
getpos('.'), { type: mode() })->join())<CR>
--
--
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php
---
You received this message because you are subscribed to the Google Groups
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion visit
https://groups.google.com/d/msgid/vim_dev/E1tdC7d-009zC1-Ch%40256bit.org.