Skip to content

Commit

Permalink
patch 8.2.4997: Python: changing hidden buffer can cause display mess up
Browse files Browse the repository at this point in the history
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)
  • Loading branch information
brammool committed May 22, 2022
1 parent 0ad00a7 commit 37233f6
Show file tree
Hide file tree
Showing 3 changed files with 41 additions and 1 deletion.
4 changes: 3 additions & 1 deletion src/if_py_both.h
Expand Up @@ -4676,9 +4676,11 @@ SetBufferLineList(
// Only adjust marks if we managed to switch to a window that holds
// the buffer, otherwise line numbers will be invalid.
if (save_curbuf.br_buf == NULL)
{
mark_adjust((linenr_T)lo, (linenr_T)(hi - 1),
(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
|| save_curbuf.br_buf == NULL))
Expand Down
36 changes: 36 additions & 0 deletions src/testdir/test_python3.vim
Expand Up @@ -4061,4 +4061,40 @@ func Test_python3_fold_hidden_buffer()
bwipe! Xa.txt
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
2 changes: 2 additions & 0 deletions src/version.c
Expand Up @@ -734,6 +734,8 @@ static char *(features[]) =

static int included_patches[] =
{ /* Add new patch number below this line */
/**/
4997,
/**/
4996,
/**/
Expand Down

0 comments on commit 37233f6

Please sign in to comment.