mirror of
https://github.com/vim/vim.git
synced 2025-11-16 23:24:03 -05:00
patch 8.1.1776: text added with a job isn't displayed
Problem: Text added with a job to another buffer isn't displayed. Solution: Update topline after adding a line. (closes #4745)
This commit is contained in:
@@ -2537,12 +2537,18 @@ append_to_buffer(buf_T *buffer, char_u *msg, channel_T *channel, ch_part_T part)
|
|||||||
|
|
||||||
FOR_ALL_WINDOWS(wp)
|
FOR_ALL_WINDOWS(wp)
|
||||||
{
|
{
|
||||||
if (wp->w_buffer == buffer
|
if (wp->w_buffer == buffer)
|
||||||
&& (save_write_to
|
{
|
||||||
|
int move_cursor = save_write_to
|
||||||
? wp->w_cursor.lnum == lnum + 1
|
? wp->w_cursor.lnum == lnum + 1
|
||||||
: (wp->w_cursor.lnum == lnum
|
: (wp->w_cursor.lnum == lnum
|
||||||
&& wp->w_cursor.col == 0)))
|
&& wp->w_cursor.col == 0);
|
||||||
|
|
||||||
|
// If the cursor is at or above the new line, move it one line
|
||||||
|
// down. If the topline is outdated update it now.
|
||||||
|
if (move_cursor || wp->w_topline > buffer->b_ml.ml_line_count)
|
||||||
{
|
{
|
||||||
|
if (move_cursor)
|
||||||
++wp->w_cursor.lnum;
|
++wp->w_cursor.lnum;
|
||||||
save_curwin = curwin;
|
save_curwin = curwin;
|
||||||
curwin = wp;
|
curwin = wp;
|
||||||
@@ -2552,6 +2558,7 @@ append_to_buffer(buf_T *buffer, char_u *msg, channel_T *channel, ch_part_T part)
|
|||||||
curbuf = curwin->w_buffer;
|
curbuf = curwin->w_buffer;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
redraw_buf_and_status_later(buffer, VALID);
|
redraw_buf_and_status_later(buffer, VALID);
|
||||||
channel_need_redraw = TRUE;
|
channel_need_redraw = TRUE;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,3 +21,19 @@ func CheckFunction(name)
|
|||||||
throw 'Skipped: ' .. a:name .. ' function missing'
|
throw 'Skipped: ' .. a:name .. ' function missing'
|
||||||
endif
|
endif
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
" Command to check for running on MS-Windows
|
||||||
|
command CheckMSWindows call CheckMSWindows()
|
||||||
|
func CheckMSWindows()
|
||||||
|
if !has('win32')
|
||||||
|
throw 'Skipped: only works on MS-Windows'
|
||||||
|
endif
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
" Command to check for running on Unix
|
||||||
|
command CheckUnix call CheckUnix()
|
||||||
|
func CheckUnix()
|
||||||
|
if !has('unix')
|
||||||
|
throw 'Skipped: only works on Unix'
|
||||||
|
endif
|
||||||
|
endfunc
|
||||||
|
|||||||
10
src/testdir/dumps/Test_job_buffer_scroll_1.dump
Normal file
10
src/testdir/dumps/Test_job_buffer_scroll_1.dump
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
|s+0&#ffffff0|o|m|e|t|e|x|t| @66
|
||||||
|
|~+0#4040ff13&| @73
|
||||||
|
|~| @73
|
||||||
|
|~| @73
|
||||||
|
|X+1#0000000&|s|c|r|o|l@1|b|u|f@1|e|r| |[|+|]| @39|1|,|1| @11|A|l@1
|
||||||
|
> +0&&@74
|
||||||
|
|~+0#4040ff13&| @73
|
||||||
|
|~| @73
|
||||||
|
|[+3#0000000&|N|o| |N|a|m|e|]| @47|0|,|0|-|1| @9|A|l@1
|
||||||
|
|-+0&&@1|N|o| |l|i|n|e|s| |i|n| |b|u|f@1|e|r|-@1| @52
|
||||||
@@ -1,10 +1,10 @@
|
|||||||
" Test for channel functions.
|
" Test for channel functions.
|
||||||
|
|
||||||
if !has('channel')
|
source check.vim
|
||||||
throw 'Skipped: channel feature missing'
|
CheckFeature channel
|
||||||
endif
|
|
||||||
|
|
||||||
source shared.vim
|
source shared.vim
|
||||||
|
source screendump.vim
|
||||||
|
|
||||||
let s:python = PythonProg()
|
let s:python = PythonProg()
|
||||||
if s:python == ''
|
if s:python == ''
|
||||||
@@ -1125,6 +1125,35 @@ func Test_pipe_io_one_buffer()
|
|||||||
endtry
|
endtry
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
func Test_write_to_buffer_and_scroll()
|
||||||
|
CheckFeature job
|
||||||
|
if !CanRunVimInTerminal()
|
||||||
|
throw 'Skipped: cannot make screendumps'
|
||||||
|
endif
|
||||||
|
let lines =<< trim END
|
||||||
|
new Xscrollbuffer
|
||||||
|
call setline(1, range(1, 200))
|
||||||
|
$
|
||||||
|
redraw
|
||||||
|
wincmd w
|
||||||
|
call deletebufline('Xscrollbuffer', 1, '$')
|
||||||
|
if has('win32')
|
||||||
|
let cmd = ['cmd', '/c', 'echo sometext']
|
||||||
|
else
|
||||||
|
let cmd = [&shell, &shellcmdflag, 'echo sometext']
|
||||||
|
endif
|
||||||
|
call job_start(cmd, #{out_io: 'buffer', out_name: 'Xscrollbuffer'})
|
||||||
|
END
|
||||||
|
call writefile(lines, 'XtestBufferScroll')
|
||||||
|
let buf = RunVimInTerminal('-S XtestBufferScroll', #{rows: 10})
|
||||||
|
sleep 500m
|
||||||
|
call VerifyScreenDump(buf, 'Test_job_buffer_scroll_1', {})
|
||||||
|
|
||||||
|
" clean up
|
||||||
|
call StopVimInTerminal(buf)
|
||||||
|
call delete('XtestBufferScroll')
|
||||||
|
endfunc
|
||||||
|
|
||||||
func Test_pipe_null()
|
func Test_pipe_null()
|
||||||
if !has('job')
|
if !has('job')
|
||||||
return
|
return
|
||||||
@@ -1804,9 +1833,8 @@ func Test_read_from_terminated_job()
|
|||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
func Test_job_start_windows()
|
func Test_job_start_windows()
|
||||||
if !has('job') || !has('win32')
|
CheckFeature job
|
||||||
return
|
CheckMSWindows
|
||||||
endif
|
|
||||||
|
|
||||||
" Check that backslash in $COMSPEC is handled properly.
|
" Check that backslash in $COMSPEC is handled properly.
|
||||||
let g:echostr = ''
|
let g:echostr = ''
|
||||||
@@ -1820,9 +1848,7 @@ func Test_job_start_windows()
|
|||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
func Test_env()
|
func Test_env()
|
||||||
if !has('job')
|
CheckFeature job
|
||||||
return
|
|
||||||
endif
|
|
||||||
|
|
||||||
let g:envstr = ''
|
let g:envstr = ''
|
||||||
if has('win32')
|
if has('win32')
|
||||||
@@ -1837,9 +1863,7 @@ func Test_env()
|
|||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
func Test_cwd()
|
func Test_cwd()
|
||||||
if !has('job')
|
CheckFeature job
|
||||||
return
|
|
||||||
endif
|
|
||||||
|
|
||||||
let g:envstr = ''
|
let g:envstr = ''
|
||||||
if has('win32')
|
if has('win32')
|
||||||
@@ -1901,9 +1925,7 @@ func s:test_list_args(cmd, out, remove_lf)
|
|||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
func Test_list_args()
|
func Test_list_args()
|
||||||
if !has('job')
|
CheckFeature job
|
||||||
return
|
|
||||||
endif
|
|
||||||
|
|
||||||
call s:test_list_args('import sys;sys.stdout.write("hello world")', "hello world", 0)
|
call s:test_list_args('import sys;sys.stdout.write("hello world")', "hello world", 0)
|
||||||
call s:test_list_args('import sys;sys.stdout.write("hello\nworld")', "hello\nworld", 0)
|
call s:test_list_args('import sys;sys.stdout.write("hello\nworld")', "hello\nworld", 0)
|
||||||
@@ -1956,9 +1978,8 @@ func Test_keep_pty_open()
|
|||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
func Test_job_start_in_timer()
|
func Test_job_start_in_timer()
|
||||||
if !has('job') || !has('timers')
|
CheckFeature job
|
||||||
return
|
CheckFeature timers
|
||||||
endif
|
|
||||||
|
|
||||||
func OutCb(chan, msg)
|
func OutCb(chan, msg)
|
||||||
let g:val += 1
|
let g:val += 1
|
||||||
@@ -2017,9 +2038,8 @@ func Test_raw_large_data()
|
|||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
func Test_no_hang_windows()
|
func Test_no_hang_windows()
|
||||||
if !has('job') || !has('win32')
|
CheckFeature job
|
||||||
return
|
CheckMSWindows
|
||||||
endif
|
|
||||||
|
|
||||||
try
|
try
|
||||||
let job = job_start(s:python . " test_channel_pipe.py busy",
|
let job = job_start(s:python . " test_channel_pipe.py busy",
|
||||||
@@ -2055,9 +2075,8 @@ func Test_job_exitval_and_termsig()
|
|||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
func Test_job_tty_in_out()
|
func Test_job_tty_in_out()
|
||||||
if !has('job') || !has('unix')
|
CheckFeature job
|
||||||
return
|
CheckUnix
|
||||||
endif
|
|
||||||
|
|
||||||
call writefile(['test'], 'Xtestin')
|
call writefile(['test'], 'Xtestin')
|
||||||
let in_opts = [{},
|
let in_opts = [{},
|
||||||
|
|||||||
@@ -777,6 +777,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 */
|
||||||
|
/**/
|
||||||
|
1776,
|
||||||
/**/
|
/**/
|
||||||
1775,
|
1775,
|
||||||
/**/
|
/**/
|
||||||
|
|||||||
Reference in New Issue
Block a user