0
0
mirror of https://github.com/vim/vim.git synced 2025-07-26 11:04:33 -04:00

patch 8.2.2271: ml_get error when changing hidden buffer in Python

Problem:    ml_get error when changing hidden buffer in Python.
Solution:   Block updating folds. (closes #7598)
This commit is contained in:
Bram Moolenaar 2021-01-02 13:53:59 +01:00
parent 38a434f7ba
commit 3e0107ea16
3 changed files with 41 additions and 0 deletions

View 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))
{

View 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

View File

@ -750,6 +750,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
2271,
/**/
2270,
/**/