summaryrefslogtreecommitdiff
path: root/src/dosinst.c
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2013-11-21 18:13:37 +0100
committerBram Moolenaar <Bram@vim.org>2013-11-21 18:13:37 +0100
commitc62a644eaf31ff1ea6e3d569d0fe8c9d4eb3d908 (patch)
tree8ee2e188df3586e8b3c88a9463885f41da353263 /src/dosinst.c
parentace8d8ee2f5d6ddd6d47272609c75155ce533f97 (diff)
downloadvim-git-c62a644eaf31ff1ea6e3d569d0fe8c9d4eb3d908.tar.gz
updated for version 7.4.103v7.4.103
Problem: Dos installer uses an old way to escape spaces in the diff command. Solution: Adjust the quoting to the new default shellxquote. (Ben Fritz)
Diffstat (limited to 'src/dosinst.c')
-rw-r--r--src/dosinst.c18
1 files changed, 12 insertions, 6 deletions
diff --git a/src/dosinst.c b/src/dosinst.c
index 3fbfb5c5c..5b54380fe 100644
--- a/src/dosinst.c
+++ b/src/dosinst.c
@@ -1192,23 +1192,29 @@ install_vimrc(int idx)
fprintf(fd, " if arg3 =~ ' ' | let arg3 = '\"' . arg3 . '\"' | endif\n");
/* If the path has a space: When using cmd.exe (Win NT/2000/XP) put
- * quotes around the whole command and around the diff command.
+ * quotes around the diff command and rely on the default value of
+ * shellxquote to solve the quoting problem for the whole command.
+ *
* Otherwise put a double quote just before the space and at the
* end of the command. Putting quotes around the whole thing
* doesn't work on Win 95/98/ME. This is mostly guessed! */
- fprintf(fd, " let eq = ''\n");
fprintf(fd, " if $VIMRUNTIME =~ ' '\n");
fprintf(fd, " if &sh =~ '\\<cmd'\n");
- fprintf(fd, " let cmd = '\"\"' . $VIMRUNTIME . '\\diff\"'\n");
- fprintf(fd, " let eq = '\"'\n");
+ fprintf(fd, " if empty(&shellxquote)\n");
+ fprintf(fd, " let l:shxq_sav = ''\n");
+ fprintf(fd, " set shellxquote&\n");
+ fprintf(fd, " endif\n");
+ fprintf(fd, " let cmd = '\"' . $VIMRUNTIME . '\\diff\"'\n");
fprintf(fd, " else\n");
fprintf(fd, " let cmd = substitute($VIMRUNTIME, ' ', '\" ', '') . '\\diff\"'\n");
fprintf(fd, " endif\n");
fprintf(fd, " else\n");
fprintf(fd, " let cmd = $VIMRUNTIME . '\\diff'\n");
fprintf(fd, " endif\n");
- fprintf(fd, " silent execute '!' . cmd . ' ' . opt . arg1 . ' ' . arg2 . ' > ' . arg3 . eq\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");
+ fprintf(fd, " endif\n");
fprintf(fd, "endfunction\n");
fprintf(fd, "\n");
}