On Wed, Jan 14, 2009 at 6:51 PM, Yasuhiro MATSUMOTO <[email protected]> wrote:
> On Wed, Jan 14, 2009 at 5:55 PM, Tony Mechelynck
> <[email protected]> wrote:
>>
>> On 14/01/09 03:03, Yasuhiro MATSUMOTO wrote:
>>> Hi all.
>>>
>>> It seems that quoting arguments of shebang command depend on shellslash.
>>> but on windows, cmd.exe or command.com can't treat single quote.
>>>
>>> --- test.vimrc ---
>>> set nocompatible
>>> set shellslash
>>> ----------------------
>>>
>>
>> cmd.exe and command.com also can't handle the forward slash as a path
>> separator, so you shouldn't set 'sellslash' if you're using them. The
>> single quote is to be used when using a Unix-like shell on Windows (and,
>> unlike what you seem to be assuming, a Unix-like shell can be used on
>> top of cmd.exe or command.com, in which case $COMSPEC will be set to the
>> Dos/Windows shell, not the Unix-like shell).
>
> Hmm.
> No. cmd.exe can treat the forward slash as path separator. And
> shellslash had working good on windows with older version.
> I guess this is a bug or grade down.
> still more, netrw can't treat shellshash correctly on latest version.
>
> :e http://www.google.com/
>
> the buffer name will be broken like a following with noshellslash.
>
> http:\\www.google.com\
>
> Many users hope to use shellslash on windows.
Or how about below?
(check that COMSPEC is cmd.exe)
Index: src/misc2.c
===================================================================
--- src/misc2.c (revision 1318)
+++ src/misc2.c (working copy)
@@ -1286,7 +1286,19 @@
char_u *escaped_string;
int l;
int csh_like;
+ int ssl = p_ssl;
+# if defined(WIN32) || defined(WIN16) || defined(DOS)
+ /* cmd.exe or command.com can't treat single quote. */
+ char_u *comspec;
+
+ comspec = mch_getenv("COMSPEC");
+ if (comspec && STRICMP((char *)gettail(comspec), "cmd.exe") == 0
+ && STRNCMP(comspec, p_sh, STRLEN(comspec)) == 0) {
+ ssl = 0;
+ }
+#endif
+
/* Only csh and similar shells expand '!' within single quotes. For sh and
* the like we must not put a backslash before it, it will be taken
* literally. If do_special is set the '!' will be escaped twice.
@@ -1298,7 +1310,7 @@
for (p = string; *p != NUL; mb_ptr_adv(p))
{
# if defined(WIN32) || defined(WIN16) || defined(DOS)
- if (!p_ssl)
+ if (!ssl)
{
if (*p == '"')
++length; /* " -> "" */
@@ -1328,7 +1340,7 @@
/* add opening quote */
# if defined(WIN32) || defined(WIN16) || defined(DOS)
- if (!p_ssl)
+ if (!ssl)
*d++ = '"';
else
# endif
@@ -1337,7 +1349,7 @@
for (p = string; *p != NUL; )
{
# if defined(WIN32) || defined(WIN16) || defined(DOS)
- if (!p_ssl)
+ if (!ssl)
{
if (*p == '"')
{
@@ -1378,7 +1390,7 @@
/* add terminating quote and finish with a NUL */
# if defined(WIN32) || defined(WIN16) || defined(DOS)
- if (!p_ssl)
+ if (!ssl)
*d++ = '"';
else
# endif
--
- Yasuhiro Matsumoto
--~--~---------~--~----~------------~-------~--~----~
You received this message from the "vim_dev" maillist.
For more information, visit http://www.vim.org/maillist.php
-~----------~----~----~----~------~----~------~--~---