runtime(dist/vim9): fix regressions in dist#vim9#Open Commit: https://github.com/vim/vim/commit/766801295df78193a93712cd53b73e103f95e445 Author: Luca Saccarola <github.e4...@aleeas.com> 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 <github.e4...@aleeas.com> Signed-off-by: Christian Brabandt <c...@256bit.org> 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 vim_dev+unsubscr...@googlegroups.com. To view this discussion visit https://groups.google.com/d/msgid/vim_dev/E1tdC7d-009zC1-Ch%40256bit.org.