On Wednesday, January 30, 2013 7:32:08 PM UTC-6, Steven Mueller wrote:
> 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
> 

Something like this will be needed, there is a known issue in :help todo about 
it:

> shellescape() depends on 'shellshash' for quoting.  That doesn't work when
> 'shellslash' is set but using cmd.exe. (Ben Fritz)
> Use a different option or let it depend on whether 'shell' looks like a
> unix-like shell?


> 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?)
> 

If I understand correctly:
  :!start is handled internally by Vim, it doesn't actually invoke "start".
  :! start will directly invoke "start"

See :help :!start

-- 
-- 
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.


Raspunde prin e-mail lui