# HG changeset patch # User Bram Moolenaar # Date 1542398406 -3600 # Node ID 73f59cd01ba74ecc8e82cf02154c04a4473e3d99 # Parent 63e1c9a38553751845f716526891fee0d986ca4e patch 8.1.0535: increment/decrement might get interrupted by updating folds commit https://github.com/vim/vim/commit/6b731886ca94d66b9bdedfb7e603af44a6400399 Author: Bram Moolenaar 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) diff --git a/src/ops.c b/src/ops.c --- 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); diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -793,6 +793,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 535, +/**/ 534, /**/ 533,