0
0
mirror of https://github.com/vim/vim.git synced 2025-09-23 03:43:49 -04:00

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 <luukvbaal@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
Luuk van Baal
2023-10-28 21:43:31 +02:00
committed by Christian Brabandt
parent a390e984db
commit 1bf1bf569b
3 changed files with 24 additions and 5 deletions

View File

@@ -4081,11 +4081,9 @@ did_set_showtabline(optset_T *args UNUSED)
char * char *
did_set_smoothscroll(optset_T *args UNUSED) did_set_smoothscroll(optset_T *args UNUSED)
{ {
if (curwin->w_p_sms) if (!curwin->w_p_sms)
return NULL; curwin->w_skipcol = 0;
curwin->w_skipcol = 0;
changed_line_abv_curs();
return NULL; return NULL;
} }
@@ -4535,9 +4533,12 @@ did_set_winwidth(optset_T *args UNUSED)
char * char *
did_set_wrap(optset_T *args UNUSED) 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) if (curwin->w_p_wrap)
curwin->w_leftcol = 0; curwin->w_leftcol = 0;
else
curwin->w_skipcol = 0;
return NULL; return NULL;
} }

View File

@@ -2207,4 +2207,20 @@ func Test_set_keyprotocol()
let &term = term let &term = term
endfunc 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 " vim: shiftwidth=2 sts=2 expandtab

View File

@@ -704,6 +704,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
2081,
/**/ /**/
2080, 2080,
/**/ /**/