Hi Chip,

I sometimes use gvim on Windows (win7 64-bit).  There, I found that netrw's gx 
(netrw#NetrwBrowseX) on an URL fails to launch the page in my browser when 
shellslash is set: netrw posts the message "Press <cr> to continue" to the cmd 
window, but nothing else happens.

Hacking autoload/netrw.vim to save off shellslash and unset it allows the 
command to work.  The difference seems to be in the type of quoting used by 
shellescape(): single quotes are used when shellslash is set, but double quotes 
are used otherwise.

This patch (also attached in case it gets munged) fixes the issue for me, based 
off version 140 of netrw as packaged with Vim 7.3 at patchlevel 46:

--- C:/Program Files (x86)/Vim/vim73/autoload/netrw.vim 2013-01-30 
16:11:55.780200900 -0800
+++ netrw.vim     2013-01-30 17:17:44.890628000 -0800
@@ -3385,6 +3385,12 @@
    let ret= v:shell_error
 
   elseif has("win32") || has("win64")
+   " shellslash must be unset so the quotes around the filename/URL end up as
+   " double quotes.  Otherwise start and rundll32 get confused by the single
+   " quotes that shellescape produces.
+   let shellslash_keep = &shellslash
+   setlocal noshellslash
+
    if executable("start")
 "    call Decho('exe silent !start rundll32 url.dll,FileProtocolHandler 
'.shellescape(fname,1))
     exe 'silent !start rundll32 url.dll,FileProtocolHandler 
'.shellescape(fname,1)
@@ -3394,6 +3400,7 @@
    else
     call netrw#ErrorMsg(s:WARNING,"rundll32 not on path",74)
    endif
+   let &shellslash = shellslash_keep
    call inputsave()|call input("Press <cr> to continue")|call inputrestore()
    let ret= v:shell_error

Also, I found that doing executable("start") returns 0 on my system, though 
using :!start directly works just fine.  Using start is preferable to rundll32 
because the latter pops up an intermediate window.  For now, I've also hacked 
my netrw.vim to just use start exclusively (and also to avoid the "Press <cr> 
to continue" prompt).  I don't have a good patch for this because I don't know 
the correct way to test whether start will work or not.  (Maybe we can just try 
it and see if it fails?)

Thanks,
Steve

-- 
-- 
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].
For more options, visit https://groups.google.com/groups/opt_out.


--- C:/Program Files (x86)/Vim/vim73/autoload/netrw.vim	2013-01-30 16:11:55.780200900 -0800
+++ u:/home/.vim/autoload/netrw.vim	2013-01-30 17:17:44.890628000 -0800
@@ -3385,6 +3385,12 @@
    let ret= v:shell_error
 
   elseif has("win32") || has("win64")
+   " shellslash must be unset so the quotes around the filename/URL end up as
+   " double quotes.  Otherwise start and rundll32 get confused by the single
+   " quotes that shellescape produces.
+   let shellslash_keep = &shellslash
+   setlocal noshellslash
+
    if executable("start")
 "    call Decho('exe silent !start rundll32 url.dll,FileProtocolHandler '.shellescape(fname,1))
     exe 'silent !start rundll32 url.dll,FileProtocolHandler '.shellescape(fname,1)
@@ -3394,6 +3400,7 @@
    else
     call netrw#ErrorMsg(s:WARNING,"rundll32 not on path",74)
    endif
+   let &shellslash = shellslash_keep
    call inputsave()|call input("Press <cr> to continue")|call inputrestore()
    let ret= v:shell_error
 

Raspunde prin e-mail lui