]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 7.4.1603 v7.4.1603
authorBram Moolenaar <Bram@vim.org>
Sat, 19 Mar 2016 16:05:20 +0000 (17:05 +0100)
committerBram Moolenaar <Bram@vim.org>
Sat, 19 Mar 2016 16:05:20 +0000 (17:05 +0100)
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
src/screen.c
src/version.c

index 689a79cd497d5a89a365814014eb50ec153b6fe9..099c3aa754bb4cdaef6c2efbde93b6c67e8bfe70 100644 (file)
@@ -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
index c1eb1c459c8d76292e9f400cc91f238737a1d7b9..ce35f02dce932f5f05387f5fb592d110e50bbb26 100644 (file)
@@ -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
index e5f6ee4b52da9712030ef339c86e54080504ec4f..f7479b324ecd309711d5c32186c679fc53f854c0 100644 (file)
@@ -748,6 +748,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1603,
 /**/
     1602,
 /**/