forked from aniani/vim
patch 8.1.0468: MS-Windows: filter command with pipe character fails
Problem: MS-Windows: Filter command with pipe character fails. (Johannes Riecken) Solution: Find the pipe character outside of quotes. (Yasuhiro Matsumoto, closes #1743, closes #3523)
This commit is contained in:
@@ -1676,6 +1676,26 @@ do_shell(
|
||||
apply_autocmds(EVENT_SHELLCMDPOST, NULL, NULL, FALSE, curbuf);
|
||||
}
|
||||
|
||||
#if !defined(UNIX)
|
||||
static char_u *
|
||||
find_pipe(char_u *cmd)
|
||||
{
|
||||
char_u *p;
|
||||
int inquote = FALSE;
|
||||
|
||||
for (p = cmd; *p != NUL; ++p)
|
||||
{
|
||||
if (!inquote && *p == '|')
|
||||
return p;
|
||||
if (*p == '"')
|
||||
inquote = !inquote;
|
||||
else if (rem_backslash(p))
|
||||
++p;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Create a shell command from a command string, input redirection file and
|
||||
* output redirection file.
|
||||
@@ -1746,7 +1766,7 @@ make_filter_cmd(
|
||||
*/
|
||||
if (*p_shq == NUL)
|
||||
{
|
||||
p = vim_strchr(buf, '|');
|
||||
p = find_pipe(buf);
|
||||
if (p != NULL)
|
||||
*p = NUL;
|
||||
}
|
||||
@@ -1754,7 +1774,7 @@ make_filter_cmd(
|
||||
STRCAT(buf, itmp);
|
||||
if (*p_shq == NUL)
|
||||
{
|
||||
p = vim_strchr(cmd, '|');
|
||||
p = find_pipe(cmd);
|
||||
if (p != NULL)
|
||||
{
|
||||
STRCAT(buf, " "); /* insert a space before the '|' for DOS */
|
||||
|
@@ -74,3 +74,16 @@ func Test_filter_cmd_completion()
|
||||
call assert_equal('filter /pat/ print', s:complete_filter_cmd('filter /pat/ pri'))
|
||||
call assert_equal('filter #pat# print', s:complete_filter_cmd('filter #pat# pri'))
|
||||
endfunc
|
||||
|
||||
func Test_filter_cmd_with_filter()
|
||||
new
|
||||
set shelltemp
|
||||
%!echo "a|b"
|
||||
let out = getline(1)
|
||||
bw!
|
||||
if has('win32')
|
||||
let out = trim(out, '" ')
|
||||
endif
|
||||
call assert_equal('a|b', out)
|
||||
set shelltemp&
|
||||
endfunction
|
||||
|
@@ -792,6 +792,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
468,
|
||||
/**/
|
||||
467,
|
||||
/**/
|
||||
|
Reference in New Issue
Block a user