From 04626c243c47af91c2580eaf23e12286180e0e81 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Wed, 1 Sep 2021 16:02:07 +0200 Subject: patch 8.2.3394: filler lines are wrong when changing text in diff mode Problem: Filler lines are wrong when changing text in diff mode. Solution: Don't change the filler lines on every change. Check scrollbinding when updating the filler lines. (closes #8809) --- src/diff.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'src/diff.c') diff --git a/src/diff.c b/src/diff.c index 7bdfa48195..b59a125106 100644 --- a/src/diff.c +++ b/src/diff.c @@ -655,6 +655,8 @@ diff_redraw( int dofold) // also recompute the folds { win_T *wp; + win_T *wp_other = NULL; + int used_max_fill = FALSE; int n; need_diff_redraw = FALSE; @@ -662,6 +664,8 @@ diff_redraw( if (wp->w_p_diff) { redraw_win_later(wp, SOME_VALID); + if (wp != curwin) + wp_other = wp; #ifdef FEAT_FOLDING if (dofold && foldmethodIsDiff(wp)) foldUpdateAll(wp); @@ -674,10 +678,19 @@ diff_redraw( if (wp->w_topfill > n) wp->w_topfill = (n < 0 ? 0 : n); else if (n > 0 && n > wp->w_topfill) + { wp->w_topfill = n; + if (wp == curwin) + used_max_fill = TRUE; + } check_topfill(wp, FALSE); } } + + if (wp_other != NULL && used_max_fill && curwin->w_p_scb) + // The current window was set to used the maximum number of filler + // lines, may need to reduce them. + diff_set_topline(wp_other, curwin); } static void -- cgit v1.2.3