Mercurial > vim
diff src/diff.c @ 25717:d3f992bc6ef8 v8.2.3394
patch 8.2.3394: filler lines are wrong when changing text in diff mode
Commit: https://github.com/vim/vim/commit/04626c243c47af91c2580eaf23e12286180e0e81
Author: Bram Moolenaar <Bram@vim.org>
Date: Wed Sep 1 16:02:07 2021 +0200
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)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Wed, 01 Sep 2021 16:15:04 +0200 |
parents | d5142d87f898 |
children | 2e8226c03007 |
line wrap: on
line diff
--- 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