mirror of
https://github.com/vim/vim.git
synced 2025-09-26 04:04:07 -04:00
patch 8.2.4997: Python: changing hidden buffer can cause display mess up
Problem: Python: changing hidden buffer can cause the display to be messed up. Solution: Do not mark changed lines when using another buffer. (Paul Ollis, closes #10437, closes #7972)
This commit is contained in:
@@ -4676,9 +4676,11 @@ SetBufferLineList(
|
|||||||
// Only adjust marks if we managed to switch to a window that holds
|
// Only adjust marks if we managed to switch to a window that holds
|
||||||
// the buffer, otherwise line numbers will be invalid.
|
// the buffer, otherwise line numbers will be invalid.
|
||||||
if (save_curbuf.br_buf == NULL)
|
if (save_curbuf.br_buf == NULL)
|
||||||
|
{
|
||||||
mark_adjust((linenr_T)lo, (linenr_T)(hi - 1),
|
mark_adjust((linenr_T)lo, (linenr_T)(hi - 1),
|
||||||
(long)MAXLNUM, (long)extra);
|
(long)MAXLNUM, (long)extra);
|
||||||
changed_lines((linenr_T)lo, 0, (linenr_T)hi, (long)extra);
|
changed_lines((linenr_T)lo, 0, (linenr_T)hi, (long)extra);
|
||||||
|
}
|
||||||
|
|
||||||
if (buf == curbuf && (switchwin.sw_curwin != NULL
|
if (buf == curbuf && (switchwin.sw_curwin != NULL
|
||||||
|| save_curbuf.br_buf == NULL))
|
|| save_curbuf.br_buf == NULL))
|
||||||
|
@@ -4061,4 +4061,40 @@ func Test_python3_fold_hidden_buffer()
|
|||||||
bwipe! Xa.txt
|
bwipe! Xa.txt
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
" Test to catch regression fix #10437.
|
||||||
|
func Test_python3_hidden_buf_mod_does_not_mess_up_display()
|
||||||
|
CheckRunVimInTerminal
|
||||||
|
|
||||||
|
let testfile = 'Xtest.vim'
|
||||||
|
let lines =<< trim END
|
||||||
|
set hidden number
|
||||||
|
new
|
||||||
|
hide
|
||||||
|
sil call setline(1, repeat(['aaa'], &lines) + ['bbbbbb'])
|
||||||
|
fu Func()
|
||||||
|
python3 << EOF
|
||||||
|
import vim
|
||||||
|
b = vim.buffers[2]
|
||||||
|
b[:] = ['', '']
|
||||||
|
EOF
|
||||||
|
endfu
|
||||||
|
norm! Gzb
|
||||||
|
call feedkeys(":call Func()\r", 'n')
|
||||||
|
END
|
||||||
|
call writefile(lines, testfile)
|
||||||
|
|
||||||
|
let rows = 10
|
||||||
|
let bufnr = term_start([GetVimProg(), '--clean', '-S', testfile], {'term_rows': rows})
|
||||||
|
call TermWait(bufnr, 100)
|
||||||
|
call assert_equal('run', job_status(term_getjob(bufnr)))
|
||||||
|
let g:test_is_flaky = 0
|
||||||
|
call WaitForAssert({-> assert_match('^ 3 aaa$', term_getline(bufnr, 1))})
|
||||||
|
call WaitForAssert({-> assert_match('^ 11 bbbbbb$', term_getline(bufnr, rows - 1))})
|
||||||
|
|
||||||
|
call term_sendkeys(bufnr, ":qall!\<CR>")
|
||||||
|
call WaitForAssert({-> assert_equal('dead', job_status(term_getjob(bufnr)))})
|
||||||
|
exe bufnr . 'bwipe!'
|
||||||
|
call delete(testfile)
|
||||||
|
endfunc
|
||||||
|
|
||||||
" vim: shiftwidth=2 sts=2 expandtab
|
" vim: shiftwidth=2 sts=2 expandtab
|
||||||
|
@@ -734,6 +734,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 */
|
||||||
|
/**/
|
||||||
|
4997,
|
||||||
/**/
|
/**/
|
||||||
4996,
|
4996,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user