Mercurial > vim
changeset 5508:4db151014f93 v7.4.103
updated for version 7.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)
author | Bram Moolenaar <bram@vim.org> |
---|---|
date | Thu, 21 Nov 2013 18:13:37 +0100 |
parents | 09f476198471 |
children | 7adbbf32444e |
files | src/dosinst.c src/version.c |
diffstat | 2 files changed, 14 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- 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"); }