diff options
author | Bram Moolenaar <Bram@vim.org> | 2018-11-16 20:54:47 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2018-11-16 20:54:47 +0100 |
commit | 6b731886ca94d66b9bdedfb7e603af44a6400399 (patch) | |
tree | c629d0005fed7c727f44a554f12c8d98d4e264f5 /src/ops.c | |
parent | 25a494ce609f54ce240b1986aad16ca27186d646 (diff) | |
download | vim-git-6b731886ca94d66b9bdedfb7e603af44a6400399.tar.gz |
patch 8.1.0535: increment/decrement might get interrupted by updating foldsv8.1.0535
Problem: Increment/decrement might get interrupted by updating folds.
Solution: Disable fold updating for a moment. (Christian Brabandt,
closes #3599)
Diffstat (limited to 'src/ops.c')
-rw-r--r-- | src/ops.c | 24 |
1 files changed, 24 insertions, 0 deletions
@@ -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); |