patch 9.0.0416: ml_get error when appending lines in popup window
Problem: ml_get error when appending lines in popup window.
Solution: Only update w_topline when w_buffer matches curbuf.
(closes #11074)
This commit is contained in:
@ -254,7 +254,11 @@ set_buffer_lines(
|
|||||||
&& wp->w_cursor.lnum > append_lnum)
|
&& wp->w_cursor.lnum > append_lnum)
|
||||||
wp->w_cursor.lnum += added;
|
wp->w_cursor.lnum += added;
|
||||||
check_cursor_col();
|
check_cursor_col();
|
||||||
update_topline();
|
|
||||||
|
// Only update the window view if w_buffer matches curbuf, otherwise
|
||||||
|
// the computations will be wrong.
|
||||||
|
if (curwin->w_buffer == curbuf)
|
||||||
|
update_topline();
|
||||||
}
|
}
|
||||||
|
|
||||||
done:
|
done:
|
||||||
|
|||||||
15
src/testdir/dumps/Test_term_popup_bufline.dump
Normal file
15
src/testdir/dumps/Test_term_popup_bufline.dump
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
|1+0&#ffffff0| @73
|
||||||
|
|2| @73
|
||||||
|
|3| @73
|
||||||
|
|4| @73
|
||||||
|
>5| @35|0+0#0000001#ffd7ff255| +0#0000000#ffffff0@36
|
||||||
|
|~+0#4040ff13&| @35|1+0#0000001#ffd7ff255| +0#4040ff13#ffffff0@36
|
||||||
|
|!+2#ffffff16#00e0003|s|e|q| |1| |5| |[|f|i|n|i|s|h|e|d|]| @17|2+0#0000001#ffd7ff255| +2#ffffff16#00e0003@18|5|,|1| @11|A|l@1
|
||||||
|
| +0#0000000#ffffff0@36|3+0#0000001#ffd7ff255| +0#0000000#ffffff0@36
|
||||||
|
|~+0#4040ff13&| @35|4+0#0000001#ffd7ff255| +0#4040ff13#ffffff0@36
|
||||||
|
|~| @35| +0#0000001#ffd7ff255| +0#4040ff13#ffffff0@36
|
||||||
|
|~| @73
|
||||||
|
|~| @73
|
||||||
|
|~| @73
|
||||||
|
|[+1#0000000&|N|o| |N|a|m|e|]| @47|0|,|0|-|1| @9|A|l@1
|
||||||
|
| +0&&@74
|
||||||
@ -4174,5 +4174,28 @@ func Test_bufdel_skips_popupwin_buffer()
|
|||||||
call popup_close(id)
|
call popup_close(id)
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
func Test_term_popup_bufline()
|
||||||
|
" very specific situation where a non-existing buffer line is used, leading
|
||||||
|
" to an ml_get error
|
||||||
|
CheckScreendump
|
||||||
|
|
||||||
|
let lines =<< trim END
|
||||||
|
vim9script
|
||||||
|
&scrolloff = 5
|
||||||
|
term_start('seq 1 5', {term_finish: 'open'})
|
||||||
|
timer_start(50, (_) => {
|
||||||
|
set cpoptions&vim
|
||||||
|
var buf = popup_create([], {})->winbufnr()
|
||||||
|
appendbufline(buf, 0, range(5))
|
||||||
|
})
|
||||||
|
END
|
||||||
|
call writefile(lines, 'XtestTermPopup', 'D')
|
||||||
|
let buf = RunVimInTerminal('-S XtestTermPopup', #{rows: 15})
|
||||||
|
call VerifyScreenDump(buf, 'Test_term_popup_bufline', {})
|
||||||
|
|
||||||
|
" clean up
|
||||||
|
call StopVimInTerminal(buf)
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
|
||||||
" vim: shiftwidth=2 sts=2
|
" vim: shiftwidth=2 sts=2
|
||||||
|
|||||||
@ -703,6 +703,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 */
|
||||||
|
/**/
|
||||||
|
416,
|
||||||
/**/
|
/**/
|
||||||
415,
|
415,
|
||||||
/**/
|
/**/
|
||||||
|
|||||||
Reference in New Issue
Block a user