Mercurial > vim
diff src/ex_cmds.c @ 18195:a81f0c936112 v8.1.2092
patch 8.1.2092: MS-Windows: redirect in system() does not work
Commit: https://github.com/vim/vim/commit/1a613398068580ca1286ac2ed920f20c978aa662
Author: Bram Moolenaar <Bram@vim.org>
Date: Sat Sep 28 15:51:37 2019 +0200
patch 8.1.2092: MS-Windows: redirect in system() does not work
Problem: MS-Windows: redirect in system() does not work.
Solution: Handle 'shellxescape' and 'shellxquote' better. (Yasuhiro
Matsumoto, closes #2054)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sat, 28 Sep 2019 16:00:03 +0200 |
parents | 1868ec23360e |
children | d27060eba45f |
line wrap: on
line diff
--- a/src/ex_cmds.c +++ b/src/ex_cmds.c @@ -1762,12 +1762,21 @@ make_filter_cmd( STRCAT(buf, itmp); } #else - /* - * For shells that don't understand braces around commands, at least allow - * the use of commands in a pipe. - */ - STRCPY(buf, cmd); - if (itmp != NULL) + // For shells that don't understand braces around commands, at least allow + // the use of commands in a pipe. + if (*p_sxe != NUL && *p_sxq == '(') + { + if (itmp != NULL || otmp != NULL) + vim_snprintf((char *)buf, len, "(%s)", (char *)cmd); + else + STRCPY(buf, cmd); + if (itmp != NULL) + { + STRCAT(buf, " < "); + STRCAT(buf, itmp); + } + } + else { char_u *p; @@ -1819,18 +1828,20 @@ append_redir( char_u *end; end = buf + STRLEN(buf); - /* find "%s" */ + // find "%s" for (p = opt; (p = vim_strchr(p, '%')) != NULL; ++p) { - if (p[1] == 's') /* found %s */ + if (p[1] == 's') // found %s break; - if (p[1] == '%') /* skip %% */ + if (p[1] == '%') // skip %% ++p; } if (p != NULL) { - *end = ' '; /* not really needed? Not with sh, ksh or bash */ - vim_snprintf((char *)end + 1, (size_t)(buflen - (end + 1 - buf)), +#ifdef MSWIN + *end++ = ' '; // not really needed? Not with sh, ksh or bash +#endif + vim_snprintf((char *)end, (size_t)(buflen - (end - buf)), (char *)opt, (char *)fname); } else @@ -1838,7 +1849,7 @@ append_redir( #ifdef FEAT_QUICKFIX " %s %s", #else - " %s%s", /* " > %s" causes problems on Amiga */ + " %s%s", // " > %s" causes problems on Amiga #endif (char *)opt, (char *)fname); }