From bfb96c047b79b2aab5fd57a2472871508819f3ef Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Sat, 19 Mar 2016 17:05:20 +0100 Subject: [PATCH] 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. --- src/message.c | 11 +++++++++++ src/screen.c | 11 +++++++++-- src/version.c | 2 ++ 3 files changed, 22 insertions(+), 2 deletions(-) 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, /**/