Mercurial > vim
changeset 8627:7c98c5d0298c v7.4.1603
commit https://github.com/vim/vim/commit/bfb96c047b79b2aab5fd57a2472871508819f3ef
Author: Bram Moolenaar <Bram@vim.org>
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.
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Sat, 19 Mar 2016 17:15:04 +0100 |
parents | 418a2a5ac8af |
children | 43d8da45ac18 |
files | src/message.c src/screen.c src/version.c |
diffstat | 3 files changed, 22 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- 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
--- 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