mirror of
https://github.com/vim/vim.git
synced 2025-07-26 11:04:33 -04:00
patch 9.1.0751: Error callback for term_start() not used
Problem: Error callback for term_start() not used (darkseid-is) Solution: attach pipe to stderr if an error callback exists fixes: #15665 closes: #15729 Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
parent
563e8ec8c7
commit
b50bc9ad55
@ -5763,8 +5763,11 @@ mch_job_start(char **argv, job_T *job, jobopt_T *options, int is_terminal)
|
|||||||
goto failed;
|
goto failed;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// only create a pipe for the error fd, when either a callback has been setup
|
||||||
|
// or pty is not used (e.g. terminal uses pty by default)
|
||||||
else if (!use_out_for_err && !use_null_for_err
|
else if (!use_out_for_err && !use_null_for_err
|
||||||
&& pty_master_fd < 0 && pipe(fd_err) < 0)
|
&& (pty_master_fd < 0 || (options->jo_set & JO_ERR_CALLBACK))
|
||||||
|
&& pipe(fd_err) < 0)
|
||||||
goto failed;
|
goto failed;
|
||||||
|
|
||||||
if (!use_null_for_in || !use_null_for_out || !use_null_for_err)
|
if (!use_null_for_in || !use_null_for_out || !use_null_for_err)
|
||||||
|
@ -2765,4 +2765,42 @@ func Test_channel_lsp_mode()
|
|||||||
call RunServer('test_channel_lsp.py', 'LspTests', [])
|
call RunServer('test_channel_lsp.py', 'LspTests', [])
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
func Test_error_callback_terminal()
|
||||||
|
CheckUnix
|
||||||
|
CheckFeature terminal
|
||||||
|
let g:out = ''
|
||||||
|
let g:error = ''
|
||||||
|
|
||||||
|
func! s:Out(channel, msg)
|
||||||
|
let g:out .= string(a:msg)
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
func! s:Err(channel, msg)
|
||||||
|
let g:error .= string(a:msg)
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
let buf = term_start(['sh'], #{term_finish: 'close', out_cb: 's:Out', err_cb: 's:Err', err_io: 'pipe'})
|
||||||
|
let job = term_getjob(buf)
|
||||||
|
let dict = job_info(job).channel->ch_info()
|
||||||
|
|
||||||
|
call assert_true(dict.id != 0)
|
||||||
|
call assert_equal('open', dict.status)
|
||||||
|
call assert_equal('open', dict.out_status)
|
||||||
|
call assert_equal('RAW', dict.out_mode)
|
||||||
|
call assert_equal('buffer', dict.out_io)
|
||||||
|
call assert_equal('open', dict.err_status)
|
||||||
|
call assert_equal('RAW', dict.err_mode)
|
||||||
|
call assert_equal('pipe', dict.err_io)
|
||||||
|
call term_sendkeys(buf, "XXXX\<cr>")
|
||||||
|
call term_wait(buf)
|
||||||
|
call term_sendkeys(buf, "exit\<cr>")
|
||||||
|
call term_wait(buf)
|
||||||
|
call assert_match('XXX.*exit', g:out)
|
||||||
|
call assert_match('sh:.*XXXX:.*not found', g:error)
|
||||||
|
|
||||||
|
delfunc s:Out
|
||||||
|
delfunc s:Err
|
||||||
|
unlet! g:out g:error
|
||||||
|
endfunc
|
||||||
|
|
||||||
" vim: shiftwidth=2 sts=2 expandtab
|
" vim: shiftwidth=2 sts=2 expandtab
|
||||||
|
@ -704,6 +704,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 */
|
||||||
|
/**/
|
||||||
|
751,
|
||||||
/**/
|
/**/
|
||||||
750,
|
750,
|
||||||
/**/
|
/**/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user