]> granicus.if.org Git - vim/commitdiff
patch 8.2.3952: first line not redrawn when adding lines to an empty buffer v8.2.3952
authorzeertzjq <zeertzjq@outlook.com>
Fri, 31 Dec 2021 12:19:22 +0000 (12:19 +0000)
committerBram Moolenaar <Bram@vim.org>
Fri, 31 Dec 2021 12:19:22 +0000 (12:19 +0000)
Problem:    First line not redrawn when adding lines to an empty buffer.
Solution:   Adjust the argument to appended_lines(). (closes #9439,
            closes #9438)

src/ex_cmds.c
src/testdir/test_excmd.vim
src/version.c

index 8595e8be05643f94e25f95255bd772ddabf191a4..c57f3325543005bc61b7012a4e372564df635b3e 100644 (file)
@@ -3359,7 +3359,11 @@ ex_append(exarg_T *eap)
 
        did_undo = TRUE;
        ml_append(lnum, theline, (colnr_T)0, FALSE);
-       appended_lines_mark(lnum + (empty ? 1 : 0), 1L);
+       if (empty)
+           // there are no marks below the inserted lines
+           appended_lines(lnum, 1L);
+       else
+           appended_lines_mark(lnum, 1L);
 
        vim_free(theline);
        ++lnum;
index 67b95bb3bdbcac4dc33e48abc70894dffa40842b..6f648dd4e5c16d83ccf180b4dccfae752ffd6806 100644 (file)
@@ -1,6 +1,8 @@
 " Tests for various Ex commands.
 
 source check.vim
+source shared.vim
+source term_util.vim
 
 func Test_ex_delete()
   new
@@ -128,6 +130,27 @@ func Test_append_cmd()
   close!
 endfunc
 
+func Test_append_cmd_empty_buf()
+  CheckRunVimInTerminal
+  let lines =<< trim END
+    func Timer(timer)
+      append
+    aaaaa
+    bbbbb
+    .
+    endfunc
+    call timer_start(10, 'Timer')
+  END
+  call writefile(lines, 'Xtest_append_cmd_empty_buf')
+  let buf = RunVimInTerminal('-S Xtest_append_cmd_empty_buf', {'rows': 6})
+  call WaitForAssert({-> assert_equal('bbbbb', term_getline(buf, 2))})
+  call WaitForAssert({-> assert_equal('aaaaa', term_getline(buf, 1))})
+
+  " clean up
+  call StopVimInTerminal(buf)
+  call delete('Xtest_append_cmd_empty_buf')
+endfunc
+
 " Test for the :insert command
 func Test_insert_cmd()
   new
@@ -156,6 +179,27 @@ func Test_insert_cmd()
   close!
 endfunc
 
+func Test_insert_cmd_empty_buf()
+  CheckRunVimInTerminal
+  let lines =<< trim END
+    func Timer(timer)
+      insert
+    aaaaa
+    bbbbb
+    .
+    endfunc
+    call timer_start(10, 'Timer')
+  END
+  call writefile(lines, 'Xtest_insert_cmd_empty_buf')
+  let buf = RunVimInTerminal('-S Xtest_insert_cmd_empty_buf', {'rows': 6})
+  call WaitForAssert({-> assert_equal('bbbbb', term_getline(buf, 2))})
+  call WaitForAssert({-> assert_equal('aaaaa', term_getline(buf, 1))})
+
+  " clean up
+  call StopVimInTerminal(buf)
+  call delete('Xtest_insert_cmd_empty_buf')
+endfunc
+
 " Test for the :change command
 func Test_change_cmd()
   new
index 649d2fc601416a9de51291d0b71d8859e13d8b87..5f24ba4e22accd4ebc02db2ec852845b74393fae 100644 (file)
@@ -749,6 +749,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    3952,
 /**/
     3951,
 /**/