]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 9.0.1513: text scrolls unnecessarily when splitting v9.0.1513
authorLuuk van Baal <luukvbaal@gmail.com>
Sat, 6 May 2023 11:53:50 +0000 (12:53 +0100)
committerBram Moolenaar <Bram@vim.org>
Sat, 6 May 2023 11:53:50 +0000 (12:53 +0100)
Problem:    Text scrolls unnecessarily when splitting and 'splitkeep' is not
            "cursor".
Solution:   Avoid resetting w_skipcol. (Luuk van Baal, closes #12334)

src/testdir/dumps/Test_splitkeep_skipcol_1.dump [new file with mode: 0644]
src/testdir/test_window_cmd.vim
src/version.c
src/window.c

diff --git a/src/testdir/dumps/Test_splitkeep_skipcol_1.dump b/src/testdir/dumps/Test_splitkeep_skipcol_1.dump
new file mode 100644 (file)
index 0000000..c141490
--- /dev/null
@@ -0,0 +1,12 @@
+|<+0#4040ff13#ffffff0@2|e+0#0000000&| |l|i|n|e| |w|i|t|h| |l|o|t|s| |o|f| |t|e|x|t| |i|n| |o|n|e| |l|i|n|e| 
+|w|i|t|h| |l|o|t|s| |o|f| |t|e|x|t| |i|n| |o|n|e| |l|i|n|e| |w|i|t|h| |l|o|t|s| 
+|o|f| |t|e|x|t| |i|n| |o|n|e| |l|i|n|e| @20
+|~+0#4040ff13&| @38
+|[+1#0000000&|N|o| |N|a|m|e|]| |[|+|]| @8|1|,|1|2|1| @9|A|l@1
+|<+0#4040ff13&@2|e+0#0000000&| |l|i|n|e| |w|i|t|h| |l|o|t|s| |o|f| |t|e|x|t| |i|n| |o|n|e| |l|i|n|e| 
+>w|i|t|h| |l|o|t|s| |o|f| |t|e|x|t| |i|n| |o|n|e| |l|i|n|e| |w|i|t|h| |l|o|t|s| 
+|o|f| |t|e|x|t| |i|n| |o|n|e| |l|i|n|e| @20
+|~+0#4040ff13&| @38
+|~| @38
+|[+3#0000000&|N|o| |N|a|m|e|]| |[|+|]| @8|1|,|1|2|1| @9|A|l@1
+| +0&&@39
index a3889de26a91f8fbd026c0638a87dba5d63635a5..549069080b4a71e5aa1bc2b626eb48f3850f9fb5 100644 (file)
@@ -1935,6 +1935,23 @@ func Test_splitkeep_status()
   call StopVimInTerminal(buf)
 endfunc
 
+" skipcol is not reset unnecessarily and is copied to new window
+func Test_splitkeep_skipcol()
+  CheckScreendump
+
+  let lines =<< trim END
+    set splitkeep=topline smoothscroll splitbelow scrolloff=0
+    call setline(1, 'with lots of text in one line '->repeat(6))
+    norm 2\ 5
+    wincmd s
+  END
+
+  call writefile(lines, 'XTestSplitkeepSkipcol', 'D')
+  let buf = RunVimInTerminal('-S XTestSplitkeepSkipcol', #{rows: 12, cols: 40})
+
+  call VerifyScreenDump(buf, 'Test_splitkeep_skipcol_1', {})
+endfunc
+
 func Test_new_help_window_on_error()
   help change.txt
   execute "normal! /CTRL-@\<CR>"
index 08f213a10497674b732b0da49a9966b8de467668..2665b0395fba7a17fd6cce7c83ef7e507ceff10e 100644 (file)
@@ -695,6 +695,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1513,
 /**/
     1512,
 /**/
index 244ee37d86b054bd0341a00e21ab825b55b58b2c..27b353e17c53ea9c8f21ec40cb70fa7e0c838dc7 100644 (file)
@@ -1453,6 +1453,8 @@ win_init(win_T *newp, win_T *oldp, int flags UNUSED)
 
     if (*p_spk != 'c')
     {
+       if (*p_spk == 't')
+           newp->w_skipcol = oldp->w_skipcol;
        newp->w_botline = oldp->w_botline;
        newp->w_prev_height = oldp->w_height - WINBAR_HEIGHT(oldp);
        newp->w_prev_winrow = oldp->w_winrow + 2 * WINBAR_HEIGHT(oldp);
@@ -6860,14 +6862,16 @@ win_new_height(win_T *wp, int height)
     }
 
     wp->w_height = height;
-    wp->w_skipcol = 0;
     wp->w_redr_status = TRUE;
     win_comp_scroll(wp);
 
     // There is no point in adjusting the scroll position when exiting.  Some
     // values might be invalid.
     if (!exiting && *p_spk == 'c')
+    {
+       wp->w_skipcol = 0;
        scroll_to_fraction(wp, prev_height);
+    }
 }
 
     void