]> granicus.if.org Git - vim/commitdiff
patch 9.0.1279: display shows lines scrolled down erroneously v9.0.1279
authorBram Moolenaar <Bram@vim.org>
Sat, 4 Feb 2023 13:57:55 +0000 (13:57 +0000)
committerBram Moolenaar <Bram@vim.org>
Sat, 4 Feb 2023 13:57:55 +0000 (13:57 +0000)
Problem:    Display shows lines scrolled down erroneously. (Yishai Lerner)
Solution:   Do not change "wl_lnum" at index zero. (closes #11938)

src/change.c
src/testdir/dumps/Test_move_undo_1.dump [new file with mode: 0644]
src/testdir/dumps/Test_move_undo_2.dump [new file with mode: 0644]
src/testdir/test_move.vim
src/version.c

index 1e7bdd6bdb9cd6d35b5115096a3a31b2bc04158e..e5798c54a464b04456012efcdfff6366d99c452e 100644 (file)
@@ -611,7 +611,9 @@ changed_common(
                {
                    if (wp->w_lines[i].wl_lnum >= lnum)
                    {
-                       if (wp->w_lines[i].wl_lnum < lnume)
+                       // Do not change wl_lnum at index zero, it is used to
+                       // compare with w_topline.  Invalidate it instead.
+                       if (wp->w_lines[i].wl_lnum < lnume || i == 0)
                        {
                            // line included in change
                            wp->w_lines[i].wl_valid = FALSE;
diff --git a/src/testdir/dumps/Test_move_undo_1.dump b/src/testdir/dumps/Test_move_undo_1.dump
new file mode 100644 (file)
index 0000000..71e3120
--- /dev/null
@@ -0,0 +1,10 @@
+|S+0&#ffffff0|e|c|o|n|d| @53
+>F|i|r|s|t| @54
+|T|h|i|r|d| @54
+|F|o|u|r|t|h| @53
+|~+0#4040ff13&| @58
+|~| @58
+|~| @58
+|~| @58
+|~| @58
+|:+0#0000000&|m|o|v|e| |+|1| @33|2|,|1| @10|A|l@1| 
diff --git a/src/testdir/dumps/Test_move_undo_2.dump b/src/testdir/dumps/Test_move_undo_2.dump
new file mode 100644 (file)
index 0000000..ff0bc1a
--- /dev/null
@@ -0,0 +1,10 @@
+>F+0&#ffffff0|i|r|s|t| @54
+|S|e|c|o|n|d| @53
+|T|h|i|r|d| @54
+|F|o|u|r|t|h| @53
+|~+0#4040ff13&| @58
+|~| @58
+|~| @58
+|~| @58
+|~| @58
+| +0#0000000&@41|1|,|1| @10|A|l@1| 
index 98c766504c4b0b7bb05f35d0c71d660efe959d77..0412097541b163876eadba3a3f3c16da41ed75c5 100644 (file)
@@ -1,5 +1,8 @@
 " Test the ":move" command.
 
+source check.vim
+source screendump.vim
+
 func Test_move()
   enew!
   call append(0, ['line 1', 'line 2', 'line 3'])
@@ -43,4 +46,25 @@ func Test_move()
   %bwipeout!
 endfunc
 
+func Test_move_undo()
+  CheckRunVimInTerminal
+
+  let lines =<< trim END
+      call setline(1, ['First', 'Second', 'Third', 'Fourth'])
+  END
+  call writefile(lines, 'Xtest_move_undo.vim', 'D')
+  let buf = RunVimInTerminal('-S Xtest_move_undo.vim', #{rows: 10, cols: 60, statusoff: 2})
+
+  call term_sendkeys(buf, "gg:move +1\<CR>")
+  call VerifyScreenDump(buf, 'Test_move_undo_1', {})
+
+  " here the display would show the last few lines scrolled down
+  call term_sendkeys(buf, "u")
+  call term_sendkeys(buf, ":\<Esc>")
+  call VerifyScreenDump(buf, 'Test_move_undo_2', {})
+
+  call StopVimInTerminal(buf)
+endfunc
+
+
 " vim: shiftwidth=2 sts=2 expandtab
index f21013d40c6e92abaa98ed4328c1da42b14faac3..2e5b93201d1abedb6f58389389e3eb3f36259abe 100644 (file)
@@ -695,6 +695,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1279,
 /**/
     1278,
 /**/