Mercurial > vim
changeset 23456:f6514ca9f45e v8.2.2271
patch 8.2.2271: ml_get error when changing hidden buffer in Python
Commit: https://github.com/vim/vim/commit/3e0107ea16349b354e0e9712e95b09ef019e99e5
Author: Bram Moolenaar <Bram@vim.org>
Date: Sat Jan 2 13:53:59 2021 +0100
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 https://github.com/vim/vim/issues/7598)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sat, 02 Jan 2021 14:00:04 +0100 |
parents | 4277c9dbafb9 |
children | 86b9697a8c63 |
files | src/evalbuffer.c src/testdir/test_python3.vim src/version.c |
diffstat | 3 files changed, 41 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/src/evalbuffer.c +++ b/src/evalbuffer.c @@ -807,6 +807,9 @@ f_setline(typval_T *argvars, typval_T *r 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 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)) {
--- a/src/testdir/test_python3.vim +++ b/src/testdir/test_python3.vim @@ -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