]> granicus.if.org Git - vim/commitdiff
patch 8.1.0002: :stopinsert changes the message position v8.1.0002
authorBram Moolenaar <Bram@vim.org>
Sat, 19 May 2018 12:43:45 +0000 (14:43 +0200)
committerBram Moolenaar <Bram@vim.org>
Sat, 19 May 2018 12:43:45 +0000 (14:43 +0200)
Problem:    :stopinsert changes the message position.
Solution:   Save and restore msg_col and msg_row in clearmode(). (Jason
            Franklin)

src/screen.c
src/testdir/test_messages.vim
src/version.c

index 841dc18669f4a36857f32240aed603501d2d2c3a..e26bb44ee2b97b9f3cdf0147cca1736ad3eff7f6 100644 (file)
@@ -10485,10 +10485,16 @@ unshowmode(int force)
     void
 clearmode(void)
 {
+    int save_msg_row = msg_row;
+    int save_msg_col = msg_col;
+
     msg_pos_mode();
     if (Recording)
        recording_mode(HL_ATTR(HLF_CM));
     msg_clr_eos();
+
+    msg_col = save_msg_col;
+    msg_row = save_msg_row;
 }
 
     static void
index 188406e440d477ae9fc0bbb33b52e0ae2bb2dba1..384d2aa94f4fb1092e606d30d71ea5551d022f11 100644 (file)
@@ -38,3 +38,24 @@ function Test_messages()
     let &more = oldmore
   endtry
 endfunction
+
+" Patch 7.4.1696 defined the "clearmode()" command for clearing the mode
+" indicator (e.g., "-- INSERT --") when ":stopinsert" is invoked.  Message
+" output could then be disturbed when 'cmdheight' was greater than one.
+" This test ensures that the bugfix for this issue remains in place.
+function! Test_stopinsert_does_not_break_message_output()
+  set cmdheight=2
+  redraw!
+
+  stopinsert | echo 'test echo'
+  call assert_equal(116, screenchar(&lines - 1, 1))
+  call assert_equal(32, screenchar(&lines, 1))
+  redraw!
+
+  stopinsert | echomsg 'test echomsg'
+  call assert_equal(116, screenchar(&lines - 1, 1))
+  call assert_equal(32, screenchar(&lines, 1))
+  redraw!
+
+  set cmdheight&
+endfunction
index 04d8fb332327a81720680158b68f0464d1a0b2f6..9d92ef8cdeba1742c7d0ecf84b0a5dc111107c41 100644 (file)
@@ -761,6 +761,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    2,
 /**/
     1,
 /**/