aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/diff.c
diff options
context:
space:
mode:
authorJan Edmund Lazo <jan.lazo@mail.utoronto.ca>2019-11-16 12:31:46 -0500
committerJan Edmund Lazo <jan.lazo@mail.utoronto.ca>2019-11-16 16:40:24 -0500
commit7274f5c177d49660ed8c06998da402a09f5f31c6 (patch)
tree0d36f909049b31337fc3499270f741a04ef5674d /src/nvim/diff.c
parentd3ef88db63d8b060bc6eb4dc4dbccb48cfbfaf40 (diff)
downloadrneovim-7274f5c177d49660ed8c06998da402a09f5f31c6.tar.gz
rneovim-7274f5c177d49660ed8c06998da402a09f5f31c6.tar.bz2
rneovim-7274f5c177d49660ed8c06998da402a09f5f31c6.zip
vim-patch:8.1.1922: in diff mode global operations can be very slow
Problem: In diff mode global operations can be very slow. Solution: Do not call diff_redraw() many times, call it once when redrawing. And also don't update folds multiple times. https://github.com/vim/vim/commit/4f57eefe1e84b5a90e08474092ea6fc8825ad5c9
Diffstat (limited to 'src/nvim/diff.c')
-rw-r--r--src/nvim/diff.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/src/nvim/diff.c b/src/nvim/diff.c
index 313f77474d..0f916106a2 100644
--- a/src/nvim/diff.c
+++ b/src/nvim/diff.c
@@ -490,7 +490,8 @@ static void diff_mark_adjust_tp(tabpage_T *tp, int idx, linenr_T line1,
}
if (tp == curtab) {
- diff_redraw(true);
+ // Don't redraw right away, this updates the diffs, which can be slow.
+ need_diff_redraw = true;
// Need to recompute the scroll binding, may remove or add filler
// lines (e.g., when adding lines above w_topline). But it's slow when
@@ -634,8 +635,9 @@ static int diff_check_sanity(tabpage_T *tp, diff_T *dp)
/// Mark all diff buffers in the current tab page for redraw.
///
/// @param dofold Also recompute the folds
-static void diff_redraw(int dofold)
+void diff_redraw(bool dofold)
{
+ need_diff_redraw = false;
FOR_ALL_WINDOWS_IN_TAB(wp, curtab) {
if (!wp->w_p_diff) {
continue;