changeset 8627:7c98c5d0298c v7.4.1603

commit https://github.com/vim/vim/commit/bfb96c047b79b2aab5fd57a2472871508819f3ef Author: Bram Moolenaar <Bram@vim.org> Date: Sat Mar 19 17:05:20 2016 +0100 patch 7.4.1603 Problem: Timer with an ":echo" command messes up display. Solution: Redraw depending on the mode. (Hirohito Higashi) Avoid the more prompt being used recursively.
author Christian Brabandt <cb@256bit.org>
date Sat, 19 Mar 2016 17:15:04 +0100
parents 418a2a5ac8af
children 43d8da45ac18
files src/message.c src/screen.c src/version.c
diffstat 3 files changed, 22 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/message.c
+++ b/src/message.c
@@ -870,6 +870,8 @@ wait_return(int redraw)
 #ifdef USE_ON_FLY_SCROLL
 	dont_scroll = TRUE;		/* disallow scrolling here */
 #endif
+	cmdline_row = msg_row;
+
 	/* Avoid the sequence that the user types ":" at the hit-return prompt
 	 * to start an Ex command, but the file-changed dialog gets in the
 	 * way. */
@@ -2426,6 +2428,7 @@ msg_puts_printf(char_u *str, int maxlen)
     static int
 do_more_prompt(int typed_char)
 {
+    static int	entered = FALSE;
     int		used_typed_char = typed_char;
     int		oldState = State;
     int		c;
@@ -2437,6 +2440,13 @@ do_more_prompt(int typed_char)
     msgchunk_T	*mp;
     int		i;
 
+    /* We get called recursively when a timer callback outputs a message. In
+     * that case don't show another prompt. Also when at the hit-Enter prompt.
+     */
+    if (entered || State == HITRETURN)
+	return FALSE;
+    entered = TRUE;
+
     if (typed_char == 'G')
     {
 	/* "g<": Find first line on the last page. */
@@ -2675,6 +2685,7 @@ do_more_prompt(int typed_char)
 	msg_col = Columns - 1;
 #endif
 
+    entered = FALSE;
 #ifdef FEAT_CON_DIALOG
     return retval;
 #else
--- a/src/screen.c
+++ b/src/screen.c
@@ -418,8 +418,15 @@ redraw_asap(int type)
     void
 redraw_after_callback()
 {
-    update_screen(0);
-    setcursor();
+    if (State == HITRETURN || State == ASKMORE)
+	; /* do nothing */
+    else if (State & CMDLINE)
+	redrawcmdline();
+    else if ((State & NORMAL) || (State & INSERT))
+    {
+	update_screen(0);
+	setcursor();
+    }
     cursor_on();
     out_flush();
 #ifdef FEAT_GUI
--- a/src/version.c
+++ b/src/version.c
@@ -749,6 +749,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1603,
+/**/
     1602,
 /**/
     1601,