]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
runtime(dist/vim9): fix regressions in dist#vim9#Open
authorLuca Saccarola <github.e41mv@aleeas.com>
Wed, 29 Jan 2025 17:33:46 +0000 (18:33 +0100)
committerChristian Brabandt <cb@256bit.org>
Wed, 29 Jan 2025 17:36:01 +0000 (18:36 +0100)
fixes: #16533
fixes: #16532
closes: #16535

Signed-off-by: Luca Saccarola <github.e41mv@aleeas.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
runtime/autoload/dist/vim9.vim
runtime/doc/eval.txt
runtime/doc/tags
runtime/plugin/openPlugin.vim

index a2b1451b025b5dbc2e6448a6e863dc8a78ba340b..6d4079ea36995e953bc6a73244211a7ee8d2fa2d 100644 (file)
@@ -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 \b\ " 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 =~? '\v<\f+\.(exe|com|bat|cmd)>') ?
-            $'cmd.exe /c start /b {args} {Redir()}' :
-            $'nohup {args} {Redir()} &')
-            | redraw!
+      const command = (args =~? '\v<\f+\.(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)
index 094b650c7b2cb1eead6336798e2d94a6ff659bcd..0851aa5c355ac28346f15ab5790e0c35e78460e2 100644 (file)
@@ -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
index e667a33d59fd2ed4a121416871c4f69a6e7d3aba..f1d32d8eed01744e30823161687a2db79c2ac3fc 100644 (file)
@@ -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*
index 103b33cd69cf943780c3faf11db6c3641e618f5e..c231dc448c26a01504966a3db391e389d1878224 100644 (file)
@@ -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>