Skip to content

Commit

Permalink
patch 8.0.1820: terminal window redirecting stdout does not show stderr
Browse files Browse the repository at this point in the history
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)
  • Loading branch information
brammool committed May 12, 2018
1 parent 8c3169c commit cd8fb44
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 1 deletion.
7 changes: 6 additions & 1 deletion src/os_unix.c
Expand Up @@ -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);
Expand Down
22 changes: 22 additions & 0 deletions src/testdir/test_terminal.vim
Expand Up @@ -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
2 changes: 2 additions & 0 deletions src/version.c
Expand Up @@ -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,
/**/ /**/
Expand Down

0 comments on commit cd8fb44

Please sign in to comment.