]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 9.0.2081: smoothscroll may result in wrong cursor position v9.0.2081
authorLuuk van Baal <luukvbaal@gmail.com>
Sat, 28 Oct 2023 19:43:31 +0000 (21:43 +0200)
committerChristian Brabandt <cb@256bit.org>
Sat, 28 Oct 2023 19:43:31 +0000 (21:43 +0200)
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>
src/option.c
src/testdir/test_options.vim
src/version.c

index 180aca221d0d2050a1511d9b37c6f0e4ac9bdc83..35529a576e7a1a737f8ac219065e8e686757fe9c 100644 (file)
@@ -4081,11 +4081,9 @@ did_set_showtabline(optset_T *args UNUSED)
     char *
 did_set_smoothscroll(optset_T *args UNUSED)
 {
-    if (curwin->w_p_sms)
-       return NULL;
+    if (!curwin->w_p_sms)
+       curwin->w_skipcol = 0;
 
-    curwin->w_skipcol = 0;
-    changed_line_abv_curs();
     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;
 }
 
index ef2d3bd4da992b06570b04787302d729e0cc85b1..f65654dc5c1cdbf51dcbc30417969cc3165f6607 100644 (file)
@@ -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
index a75c4a675a8003b400ed286161a917c7191e1a26..78c23fca65129dce2238be98e9df4d25e2e96a93 100644 (file)
@@ -704,6 +704,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    2081,
 /**/
     2080,
 /**/