summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2022-05-22 12:23:48 +0100
committerBram Moolenaar <Bram@vim.org>2022-05-22 12:23:48 +0100
commit37233f6022b3ed16985a91d22752b3ca162e21d0 (patch)
tree7acd09e661dae2e3d293f5feda74af1f021e05f1
parent0ad00a7fd3e0389f565876521e395c35144d8009 (diff)
patch 8.2.4997: Python: changing hidden buffer can cause display mess upv8.2.4997
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)
-rw-r--r--src/if_py_both.h4
-rw-r--r--src/testdir/test_python3.vim36
-rw-r--r--src/version.c2
3 files changed, 41 insertions, 1 deletions
diff --git a/src/if_py_both.h b/src/if_py_both.h
index 0d0a5cef29..240cc966ae 100644
--- a/src/if_py_both.h
+++ b/src/if_py_both.h
@@ -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))
diff --git a/src/testdir/test_python3.vim b/src/testdir/test_python3.vim
index 95d49db2d3..dd2da400bd 100644
--- a/src/testdir/test_python3.vim
+++ b/src/testdir/test_python3.vim
@@ -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
diff --git a/src/version.c b/src/version.c
index fdbb994a4f..5ae7693c5a 100644
--- a/src/version.c
+++ b/src/version.c
@@ -735,6 +735,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 4997,
+/**/
4996,
/**/
4995,