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
index 689a79c..099c3aa 100644
--- a/src/message.c
+++ b/src/message.c
@@ -870,6 +870,8 @@
#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 @@
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 @@
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 @@
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 c1eb1c4..ce35f02 100644
--- a/src/screen.c
+++ b/src/screen.c
@@ -418,8 +418,15 @@
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 e5f6ee4..f7479b3 100644
--- a/src/version.c
+++ b/src/version.c
@@ -749,6 +749,8 @@
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 1603,
+/**/
1602,
/**/
1601,