forked from aniani/vim
patch 8.0.1820: terminal window redirecting stdout does not show stderr
Problem: Terminal window redirecting stdout does not show stderr. (Matéo Zanibelli) Solution: When stdout is not connected to pty_master_fd then use it for stderr. (closes #2903)
This commit is contained in:
parent
8c3169c58e
commit
cd8fb449d6
@ -5645,7 +5645,12 @@ mch_job_start(char **argv, job_T *job, jobopt_T *options)
|
|||||||
/* When using pty_master_fd only set it for stdout, do not duplicate it
|
/* When using pty_master_fd only set it for stdout, do not duplicate it
|
||||||
* for stderr, it only needs to be read once. */
|
* for stderr, it only needs to be read once. */
|
||||||
int err_fd = use_out_for_err || use_file_for_err || use_null_for_err
|
int err_fd = use_out_for_err || use_file_for_err || use_null_for_err
|
||||||
? INVALID_FD : fd_err[0] < 0 ? INVALID_FD : fd_err[0];
|
? INVALID_FD
|
||||||
|
: fd_err[0] >= 0
|
||||||
|
? fd_err[0]
|
||||||
|
: (out_fd == pty_master_fd
|
||||||
|
? INVALID_FD
|
||||||
|
: pty_master_fd);
|
||||||
|
|
||||||
channel_set_pipes(channel, in_fd, out_fd, err_fd);
|
channel_set_pipes(channel, in_fd, out_fd, err_fd);
|
||||||
channel_set_job(channel, job, options);
|
channel_set_job(channel, job, options);
|
||||||
|
@ -1484,3 +1484,25 @@ func Test_terminal_termwinkey()
|
|||||||
call feedkeys("\<C-L>\<C-C>", 'tx')
|
call feedkeys("\<C-L>\<C-C>", 'tx')
|
||||||
call WaitForAssert({-> assert_equal("dead", job_status(job))})
|
call WaitForAssert({-> assert_equal("dead", job_status(job))})
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
func Test_terminal_out_err()
|
||||||
|
if !has('unix')
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
call writefile([
|
||||||
|
\ '#!/bin/sh',
|
||||||
|
\ 'echo "this is standard error" >&2',
|
||||||
|
\ 'echo "this is standard out" >&1',
|
||||||
|
\ ], 'Xechoerrout.sh')
|
||||||
|
call setfperm('Xechoerrout.sh', 'rwxrwx---')
|
||||||
|
|
||||||
|
let outfile = 'Xtermstdout'
|
||||||
|
let buf = term_start(['./Xechoerrout.sh'], {'out_io': 'file', 'out_name': outfile})
|
||||||
|
call WaitForAssert({-> assert_inrange(1, 2, len(readfile(outfile)))})
|
||||||
|
call assert_equal("this is standard out", readfile(outfile)[0])
|
||||||
|
call assert_equal('this is standard error', term_getline(buf, 1))
|
||||||
|
|
||||||
|
exe buf . 'bwipe'
|
||||||
|
call delete('Xechoerrout.sh')
|
||||||
|
call delete(outfile)
|
||||||
|
endfunc
|
||||||
|
@ -761,6 +761,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
1820,
|
||||||
/**/
|
/**/
|
||||||
1819,
|
1819,
|
||||||
/**/
|
/**/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user