comparison src/channel.c @ 8928:e6916e1683bb v7.4.1750

commit https://github.com/vim/vim/commit/7f7c3325d3f1baba32263a3457cfc4d90ecd5ff1 Author: Bram Moolenaar <Bram@vim.org> Date: Mon Apr 18 19:27:24 2016 +0200 patch 7.4.1750 Problem: When a buffer gets updated while in command line mode, the screen may be messed up. Solution: Postpone the redraw when the screen is scrolled.
author Christian Brabandt <cb@256bit.org>
date Mon, 18 Apr 2016 19:30:05 +0200
parents ed0b39dd7fd6
children 072556995a8e
comparison
equal deleted inserted replaced
8927:bab6c130bb26 8928:e6916e1683bb
1429 buf->b_write_to_channel = FALSE; 1429 buf->b_write_to_channel = FALSE;
1430 } 1430 }
1431 1431
1432 /* 1432 /*
1433 * Invoke the "callback" on channel "channel". 1433 * Invoke the "callback" on channel "channel".
1434 * This does not redraw but sets channel_need_redraw;
1434 */ 1435 */
1435 static void 1436 static void
1436 invoke_callback(channel_T *channel, char_u *callback, partial_T *partial, 1437 invoke_callback(channel_T *channel, char_u *callback, partial_T *partial,
1437 typval_T *argv) 1438 typval_T *argv)
1438 { 1439 {
1443 argv[0].vval.v_channel = channel; 1444 argv[0].vval.v_channel = channel;
1444 1445
1445 call_func(callback, (int)STRLEN(callback), 1446 call_func(callback, (int)STRLEN(callback),
1446 &rettv, 2, argv, 0L, 0L, &dummy, TRUE, partial, NULL); 1447 &rettv, 2, argv, 0L, 0L, &dummy, TRUE, partial, NULL);
1447 clear_tv(&rettv); 1448 clear_tv(&rettv);
1448 1449 channel_need_redraw = TRUE;
1449 redraw_after_callback();
1450 } 1450 }
1451 1451
1452 /* 1452 /*
1453 * Return the first buffer from channel "channel"/"part" and remove it. 1453 * Return the first buffer from channel "channel"/"part" and remove it.
1454 * The caller must free it. 1454 * The caller must free it.
2007 ch_errors(channel, "Receved unknown command: %s", (char *)cmd); 2007 ch_errors(channel, "Receved unknown command: %s", (char *)cmd);
2008 EMSG2("E905: received unknown command: %s", cmd); 2008 EMSG2("E905: received unknown command: %s", cmd);
2009 } 2009 }
2010 } 2010 }
2011 2011
2012 /*
2013 * Invoke the callback at "cbhead".
2014 * Does not redraw but sets channel_need_redraw.
2015 */
2012 static void 2016 static void
2013 invoke_one_time_callback( 2017 invoke_one_time_callback(
2014 channel_T *channel, 2018 channel_T *channel,
2015 cbq_T *cbhead, 2019 cbq_T *cbhead,
2016 cbq_T *item, 2020 cbq_T *item,
2097 } 2101 }
2098 } 2102 }
2099 2103
2100 /* 2104 /*
2101 * Invoke a callback for "channel"/"part" if needed. 2105 * Invoke a callback for "channel"/"part" if needed.
2106 * This does not redraw but sets channel_need_redraw when redraw is needed.
2102 * Return TRUE when a message was handled, there might be another one. 2107 * Return TRUE when a message was handled, there might be another one.
2103 */ 2108 */
2104 static int 2109 static int
2105 may_invoke_callback(channel_T *channel, int part) 2110 may_invoke_callback(channel_T *channel, int part)
2106 { 2111 {
3466 channel = channel->ch_next; 3471 channel = channel->ch_next;
3467 part = PART_SOCK; 3472 part = PART_SOCK;
3468 } 3473 }
3469 } 3474 }
3470 3475
3471 if (channel_need_redraw && must_redraw) 3476 if (channel_need_redraw)
3472 { 3477 {
3473 channel_need_redraw = FALSE; 3478 channel_need_redraw = FALSE;
3474 update_screen(0); 3479 redraw_after_callback();
3475 setcursor();
3476 cursor_on();
3477 out_flush();
3478 } 3480 }
3479 3481
3480 return ret; 3482 return ret;
3481 } 3483 }
3482 3484