summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/channel.c6
-rw-r--r--src/ex_cmds2.c9
-rw-r--r--src/proto/screen.pro4
-rw-r--r--src/screen.c8
-rw-r--r--src/terminal.c2
-rw-r--r--src/version.c2
6 files changed, 21 insertions, 10 deletions
diff --git a/src/channel.c b/src/channel.c
index b31d95d41c..886522bffc 100644
--- a/src/channel.c
+++ b/src/channel.c
@@ -2887,7 +2887,7 @@ channel_close(channel_T *channel, int invoke_close_cb)
if (channel_need_redraw)
{
channel_need_redraw = FALSE;
- redraw_after_callback();
+ redraw_after_callback(TRUE);
}
if (!channel->ch_drop_never)
@@ -4130,7 +4130,7 @@ channel_parse_messages(void)
if (channel_need_redraw)
{
channel_need_redraw = FALSE;
- redraw_after_callback();
+ redraw_after_callback(TRUE);
}
--safe_to_invoke_callback;
@@ -5230,7 +5230,7 @@ job_check_ended(void)
if (channel_need_redraw)
{
channel_need_redraw = FALSE;
- redraw_after_callback();
+ redraw_after_callback(TRUE);
}
}
diff --git a/src/ex_cmds2.c b/src/ex_cmds2.c
index 3682e797ab..18930a6cfb 100644
--- a/src/ex_cmds2.c
+++ b/src/ex_cmds2.c
@@ -1194,6 +1194,7 @@ check_due_timer(void)
long next_due = -1;
proftime_T now;
int did_one = FALSE;
+ int need_update_screen = FALSE;
long current_id = last_timer_id;
# ifdef WIN3264
LARGE_INTEGER fr;
@@ -1221,10 +1222,12 @@ check_due_timer(void)
int did_emsg_save = did_emsg;
int called_emsg_save = called_emsg;
int did_throw_save = did_throw;
+ int save_must_redraw = must_redraw;
timer_busy = timer_busy > 0 || vgetc_busy > 0;
vgetc_busy = 0;
called_emsg = FALSE;
+ must_redraw = 0;
timer->tr_firing = TRUE;
timer_callback(timer);
timer->tr_firing = FALSE;
@@ -1240,6 +1243,10 @@ check_due_timer(void)
}
did_emsg = did_emsg_save;
called_emsg = called_emsg_save;
+ if (must_redraw != 0)
+ need_update_screen = TRUE;
+ must_redraw = must_redraw > save_must_redraw
+ ? must_redraw : save_must_redraw;
/* Only fire the timer again if it repeats and stop_timer() wasn't
* called while inside the callback (tr_id == -1). */
@@ -1265,7 +1272,7 @@ check_due_timer(void)
}
if (did_one)
- redraw_after_callback();
+ redraw_after_callback(need_update_screen);
return current_id != last_timer_id ? 1 : next_due;
}
diff --git a/src/proto/screen.pro b/src/proto/screen.pro
index 4e89293bee..b40e0dadca 100644
--- a/src/proto/screen.pro
+++ b/src/proto/screen.pro
@@ -7,7 +7,7 @@ void redraw_curbuf_later(int type);
void redraw_buf_later(buf_T *buf, int type);
void redraw_buf_and_status_later(buf_T *buf, int type);
int redraw_asap(int type);
-void redraw_after_callback(void);
+void redraw_after_callback(int call_update_screen);
void redrawWinline(linenr_T lnum, int invalid);
void update_curbuf(int type);
void update_screen(int type_arg);
@@ -47,7 +47,7 @@ void setcursor(void);
int win_ins_lines(win_T *wp, int row, int line_count, int invalid, int mayclear);
int win_del_lines(win_T *wp, int row, int line_count, int invalid, int mayclear, int clear_attr);
int screen_ins_lines(int off, int row, int line_count, int end, int clear_attr, win_T *wp);
-int screen_del_lines(int off, int row, int line_count, int end, int force, int attr, win_T *wp);
+int screen_del_lines(int off, int row, int line_count, int end, int force, int clear_attr, win_T *wp);
int showmode(void);
void unshowmode(int force);
void clearmode(void);
diff --git a/src/screen.c b/src/screen.c
index 54ba957887..b5762145b7 100644
--- a/src/screen.c
+++ b/src/screen.c
@@ -445,9 +445,11 @@ redraw_asap(int type)
* Invoked after an asynchronous callback is called.
* If an echo command was used the cursor needs to be put back where
* it belongs. If highlighting was changed a redraw is needed.
+ * If "call_update_screen" is FALSE don't call update_screen() when at the
+ * command line.
*/
void
-redraw_after_callback(void)
+redraw_after_callback(int call_update_screen)
{
++redrawing_for_callback;
@@ -461,7 +463,7 @@ redraw_after_callback(void)
#ifdef FEAT_WILDMENU
&& wild_menu_showing == 0
#endif
- )
+ && call_update_screen)
update_screen(0);
/* Redraw in the same position, so that the user can continue
* editing the command. */
@@ -3013,7 +3015,7 @@ win_line(
int startrow,
int endrow,
int nochange UNUSED, /* not updating for changed text */
- proftime_T *syntax_tm)
+ proftime_T *syntax_tm UNUSED)
{
int col = 0; /* visual column on screen */
unsigned off; /* offset in ScreenLines/ScreenAttrs */
diff --git a/src/terminal.c b/src/terminal.c
index c5226134c6..a8c7ae59de 100644
--- a/src/terminal.c
+++ b/src/terminal.c
@@ -669,7 +669,7 @@ write_to_term(buf_T *buffer, char_u *msg, channel_T *channel)
update_cursor(term, TRUE);
}
else
- redraw_after_callback();
+ redraw_after_callback(TRUE);
}
}
diff --git a/src/version.c b/src/version.c
index f8eb49111e..d79f429bb5 100644
--- a/src/version.c
+++ b/src/version.c
@@ -770,6 +770,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 1002,
+/**/
1001,
/**/
1000,