# HG changeset patch # User Christian Brabandt # Date 1458404104 -3600 # Node ID 7c98c5d0298c821fdb2642af628da85ac3a7e06d # Parent 418a2a5ac8af05f9ca957216a38053e395731402 commit https://github.com/vim/vim/commit/bfb96c047b79b2aab5fd57a2472871508819f3ef Author: Bram Moolenaar 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. diff --git a/src/message.c b/src/message.c --- 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 --- 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 --- 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,