]> granicus.if.org Git - vim/commitdiff
patch 8.0.1829: MS-Windows: script for vimdiff can't handle ! chars v8.0.1829
authorBram Moolenaar <Bram@vim.org>
Sun, 13 May 2018 12:45:25 +0000 (14:45 +0200)
committerBram Moolenaar <Bram@vim.org>
Sun, 13 May 2018 12:45:25 +0000 (14:45 +0200)
Problem:    MS-Windows: script for vimdiff can't handle ! chars.
Solution:   Escape the ! chars. (Hans Ginzel, closes #2896)

src/dosinst.c
src/version.c

index ae5517da949a15e39f29e49bc7c7ff23aea8af55..e5d1f75fd391da1839ed70017c690c8e90aa1c7c 100644 (file)
@@ -1197,13 +1197,17 @@ install_vimrc(int idx)
        fprintf(fd, "  let opt = '-a --binary '\n");
        fprintf(fd, "  if &diffopt =~ 'icase' | let opt = opt . '-i ' | endif\n");
        fprintf(fd, "  if &diffopt =~ 'iwhite' | let opt = opt . '-b ' | endif\n");
-       /* Use quotes only when needed, they may cause trouble. */
+       /* Use quotes only when needed, they may cause trouble.
+        * Always escape "!". */
        fprintf(fd, "  let arg1 = v:fname_in\n");
        fprintf(fd, "  if arg1 =~ ' ' | let arg1 = '\"' . arg1 . '\"' | endif\n");
+       fprintf(fd, "  let arg1 = substitute(arg1, '!', '\\!', 'g')\n");
        fprintf(fd, "  let arg2 = v:fname_new\n");
        fprintf(fd, "  if arg2 =~ ' ' | let arg2 = '\"' . arg2 . '\"' | endif\n");
+       fprintf(fd, "  let arg2 = substitute(arg2, '!', '\\!', 'g')\n");
        fprintf(fd, "  let arg3 = v:fname_out\n");
        fprintf(fd, "  if arg3 =~ ' ' | let arg3 = '\"' . arg3 . '\"' | endif\n");
+       fprintf(fd, "  let arg3 = substitute(arg3, '!', '\\!', 'g')\n");
 
        /* If the path has a space:  When using cmd.exe (Win NT/2000/XP) put
         * quotes around the diff command and rely on the default value of
@@ -1225,6 +1229,7 @@ install_vimrc(int idx)
        fprintf(fd, "  else\n");
        fprintf(fd, "    let cmd = $VIMRUNTIME . '\\diff'\n");
        fprintf(fd, "  endif\n");
+       fprintf(fd, "  let cmd = substitute(cmd, '!', '\\!', 'g')\n");
        fprintf(fd, "  silent execute '!' . cmd . ' ' . opt . arg1 . ' ' . arg2 . ' > ' . arg3\n");
        fprintf(fd, "  if exists('l:shxq_sav')\n");
        fprintf(fd, "    let &shellxquote=l:shxq_sav\n");
index 3271b642161e13551ce4a3249864558711787868..555275b769b0a4ee5f9238cab19aa1f6db9836fc 100644 (file)
@@ -761,6 +761,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1829,
 /**/
     1828,
 /**/