]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 8.2.2271: ml_get error when changing hidden buffer in Python v8.2.2271
authorBram Moolenaar <Bram@vim.org>
Sat, 2 Jan 2021 12:53:59 +0000 (13:53 +0100)
committerBram Moolenaar <Bram@vim.org>
Sat, 2 Jan 2021 12:53:59 +0000 (13:53 +0100)
Problem:    ml_get error when changing hidden buffer in Python.
Solution:   Block updating folds. (closes #7598)

src/evalbuffer.c
src/testdir/test_python3.vim
src/version.c

index eabe626f50a93eebd11afd0f7c8fc916365e7897..376c1fe302f8a36b14df4581337c69133477ba4c 100644 (file)
@@ -807,6 +807,9 @@ f_setline(typval_T *argvars, typval_T *rettv)
 switch_buffer(bufref_T *save_curbuf, buf_T *buf)
 {
     block_autocmds();
+#ifdef FEAT_FOLDING
+    ++disable_fold_update;
+#endif
     set_bufref(save_curbuf, curbuf);
     --curbuf->b_nwindows;
     curbuf = buf;
@@ -821,6 +824,9 @@ switch_buffer(bufref_T *save_curbuf, buf_T *buf)
 restore_buffer(bufref_T *save_curbuf)
 {
     unblock_autocmds();
+#ifdef FEAT_FOLDING
+    --disable_fold_update;
+#endif
     // Check for valid buffer, just in case.
     if (bufref_valid(save_curbuf))
     {
index 7765071b2d167540aeff9351d473f2fe62c760d8..6afb76d9a17e003cda7791ec2e4f6fe0b2e2122f 100644 (file)
@@ -4016,4 +4016,37 @@ func Test_python3_non_utf8_string()
   sunmap <Esc>@
 endfunc
 
+func Test_python3_fold_hidden_buffer()
+  CheckFeature folding
+
+  set fdm=expr fde=Fde(v:lnum)
+  let b:regex = '^'
+  func Fde(lnum)
+    let ld = [{}]
+    let lines = bufnr('%')->getbufline(1, '$')
+    let was_import = 0
+    for lnum in range(1, len(lines))
+      let line = lines[lnum]
+      call add(ld, {'a': b:regex})
+      let ld[lnum].foldexpr = was_import ? 1 : '>1'
+      let was_import = 1
+    endfor
+    return ld[a:lnum].foldexpr
+  endfunc
+
+  call setline(1, repeat([''], 15) + repeat(['from'], 3))
+  eval repeat(['x'], 17)->writefile('Xa.txt')
+  split Xa.txt
+  py3 import vim
+  py3 b = vim.current.buffer
+  py3 aaa = b[:]
+  hide
+  py3 b[:] = aaa
+
+  call delete('Xa.txt')
+  set fdm& fde&
+  delfunc Fde
+  bwipe! Xa.txt
+endfunc
+
 " vim: shiftwidth=2 sts=2 expandtab
index c1e79864a670c93359be56a71a3b4a68eccc4f7f..d6e92b188be2a4aa083be4c2de273a692bfb06b2 100644 (file)
@@ -750,6 +750,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    2271,
 /**/
     2270,
 /**/