diff --git a/src/message.c b/src/message.c index 689a79cd49..099c3aa754 100644 --- 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 diff --git a/src/screen.c b/src/screen.c index c1eb1c459c..ce35f02dce 100644 --- 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 diff --git a/src/version.c b/src/version.c index e5f6ee4b52..f7479b324e 100644 --- a/src/version.c +++ b/src/version.c @@ -748,6 +748,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1603, /**/ 1602, /**/