# HG changeset patch # User Christian Brabandt # Date 1710578705 -3600 # Node ID f41e8218775a21dd4ead7576d888d9857b9d3b3a # Parent 004ccc9cb0f892c888a2a663c70bff6b966b85ca patch 9.1.0183: Wrong display or screenpos() result when toggling diff mode Commit: https://github.com/vim/vim/commit/9e7f1fc2f159d58b2a4cd4b7060bead126fead49 Author: zeertzjq Date: Sat Mar 16 09:40:22 2024 +0100 patch 9.1.0183: Wrong display or screenpos() result when toggling diff mode Problem: Wrong display or screenpos() result when toggling diff mode. Solution: Reset w_skipcol when disabling 'wrap'. Reset w_leftcol when enabling 'wrap' (zeertzjq). fixes: #14210 closes: #14211 Signed-off-by: zeertzjq Signed-off-by: Christian Brabandt diff --git a/src/diff.c b/src/diff.c --- a/src/diff.c +++ b/src/diff.c @@ -1520,6 +1520,7 @@ diff_win_options( if (!wp->w_p_diff) wp->w_p_wrap_save = wp->w_p_wrap; wp->w_p_wrap = FALSE; + wp->w_skipcol = 0; } # ifdef FEAT_FOLDING if (!wp->w_p_diff) @@ -1583,8 +1584,11 @@ ex_diffoff(exarg_T *eap) wp->w_p_crb = wp->w_p_crb_save; if (!(diff_flags & DIFF_FOLLOWWRAP)) { - if (!wp->w_p_wrap) - wp->w_p_wrap = wp->w_p_wrap_save; + if (!wp->w_p_wrap && wp->w_p_wrap_save) + { + wp->w_p_wrap = TRUE; + wp->w_leftcol = 0; + } } #ifdef FEAT_FOLDING free_string_option(wp->w_p_fdm); diff --git a/src/testdir/test_diffmode.vim b/src/testdir/test_diffmode.vim --- a/src/testdir/test_diffmode.vim +++ b/src/testdir/test_diffmode.vim @@ -3,6 +3,7 @@ source shared.vim source screendump.vim source check.vim +source view_util.vim func Test_diff_fold_sync() enew! @@ -1953,4 +1954,70 @@ func Test_diffexpr_with_diff_func() call StopVimInTerminal(buf) endfunc +func Test_diff_toggle_wrap_skipcol_leftcol() + 61vnew + call setline(1, 'Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.') + 30vnew + call setline(1, 'ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.') + let win1 = win_getid() + setlocal smoothscroll + exe "normal! $\" + wincmd l + let win2 = win_getid() + setlocal smoothscroll + exe "normal! $\" + call assert_equal([ + \ '<<