# HG changeset patch # User Christian Brabandt # Date 1698523204 -7200 # Node ID 09d88190c05c1a2895443fead25bdfce8bbc47ff # Parent 9e9aebc5f9718838c4d29c5e0932fd48c767f351 patch 9.0.2081: smoothscroll may result in wrong cursor position Commit: https://github.com/vim/vim/commit/1bf1bf569b96d2f9b28e0cce0968ffbf2fb80aac Author: Luuk van Baal Date: Sat Oct 28 21:43:31 2023 +0200 patch 9.0.2081: smoothscroll may result in wrong cursor position Problem: With 'smoothscroll' set, "w_skipcol" is not reset when unsetting 'wrap'. Resulting in incorrect calculation of the cursor position. Solution: Reset "w_skipcol" when unsetting 'wrap'. fixes: #12970 closes: #13439 Signed-off-by: Luuk van Baal Signed-off-by: Christian Brabandt diff --git a/src/option.c b/src/option.c --- a/src/option.c +++ b/src/option.c @@ -4081,11 +4081,9 @@ did_set_showtabline(optset_T *args UNUSE char * did_set_smoothscroll(optset_T *args UNUSED) { - if (curwin->w_p_sms) - return NULL; - - curwin->w_skipcol = 0; - changed_line_abv_curs(); + if (!curwin->w_p_sms) + curwin->w_skipcol = 0; + return NULL; } @@ -4535,9 +4533,12 @@ did_set_winwidth(optset_T *args UNUSED) char * did_set_wrap(optset_T *args UNUSED) { - // If 'wrap' is set, set w_leftcol to zero. + // Set w_leftcol or w_skipcol to zero. if (curwin->w_p_wrap) curwin->w_leftcol = 0; + else + curwin->w_skipcol = 0; + return NULL; } diff --git a/src/testdir/test_options.vim b/src/testdir/test_options.vim --- a/src/testdir/test_options.vim +++ b/src/testdir/test_options.vim @@ -2207,4 +2207,20 @@ func Test_set_keyprotocol() let &term = term endfunc +func Test_set_wrap() + " Unsetting 'wrap' when 'smoothscroll' is set does not result in incorrect + " cursor position. + set wrap smoothscroll scrolloff=5 + + call setline(1, ['', 'aaaa'->repeat(500)]) + 20 split + 20 vsplit + norm 2G$ + redraw + set nowrap + call assert_equal(2, winline()) + + set wrap& smoothscroll& scrolloff& +endfunc + " vim: shiftwidth=2 sts=2 expandtab diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -705,6 +705,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 2081, +/**/ 2080, /**/ 2079,