Mercurial > vim
changeset 15048:73f59cd01ba7 v8.1.0535
patch 8.1.0535: increment/decrement might get interrupted by updating folds
commit https://github.com/vim/vim/commit/6b731886ca94d66b9bdedfb7e603af44a6400399
Author: Bram Moolenaar <Bram@vim.org>
Date: Fri Nov 16 20:54:47 2018 +0100
patch 8.1.0535: increment/decrement might get interrupted by updating folds
Problem: Increment/decrement might get interrupted by updating folds.
Solution: Disable fold updating for a moment. (Christian Brabandt,
closes #3599)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Fri, 16 Nov 2018 21:00:06 +0100 |
parents | 63e1c9a38553 |
children | 8fd94c25a939 |
files | src/ops.c src/version.c |
diffstat | 2 files changed, 26 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/src/ops.c +++ b/src/ops.c @@ -5549,12 +5549,27 @@ op_addsub( int change_cnt = 0; linenr_T amount = Prenum1; + // do_addsub() might trigger re-evaluation of 'foldexpr' halfway, when the + // buffer is not completly updated yet. Postpone updating folds until before + // the call to changed_lines(). +#ifdef FEAT_FOLDING + disable_fold_update++; +#endif + if (!VIsual_active) { pos = curwin->w_cursor; if (u_save_cursor() == FAIL) + { +#ifdef FEAT_FOLDING + disable_fold_update--; +#endif return; + } change_cnt = do_addsub(oap->op_type, &pos, 0, amount); +#ifdef FEAT_FOLDING + disable_fold_update--; +#endif if (change_cnt) changed_lines(pos.lnum, 0, pos.lnum + 1, 0L); } @@ -5566,7 +5581,12 @@ op_addsub( if (u_save((linenr_T)(oap->start.lnum - 1), (linenr_T)(oap->end.lnum + 1)) == FAIL) + { +#ifdef FEAT_FOLDING + disable_fold_update--; +#endif return; + } pos = oap->start; for (; pos.lnum <= oap->end.lnum; ++pos.lnum) @@ -5624,6 +5644,10 @@ op_addsub( if (g_cmd && one_change) amount += Prenum1; } + +#ifdef FEAT_FOLDING + disable_fold_update--; +#endif if (change_cnt) changed_lines(oap->start.lnum, 0, oap->end.lnum + 1, 0L);