terminal: Run screen refresh timer in a deferred queue

Close #3332
This commit is contained in:
Thiago de Arruda
2015-09-15 08:12:55 -03:00
parent 1f90cbb4ae
commit 47cbbc0b8c
2 changed files with 3 additions and 2 deletions

View File

@@ -155,6 +155,8 @@ void terminal_init(void)
{ {
invalidated_terminals = pmap_new(ptr_t)(); invalidated_terminals = pmap_new(ptr_t)();
time_watcher_init(&loop, &refresh_timer, NULL); time_watcher_init(&loop, &refresh_timer, NULL);
// refresh_timer_cb will redraw the screen which can call vimscript
refresh_timer.events = queue_new_child(loop.events);
// initialize a rgb->color index map for cterm attributes(VTermScreenCell // initialize a rgb->color index map for cterm attributes(VTermScreenCell
// only has RGB information and we need color indexes for terminal UIs) // only has RGB information and we need color indexes for terminal UIs)
@@ -180,6 +182,7 @@ void terminal_init(void)
void terminal_teardown(void) void terminal_teardown(void)
{ {
time_watcher_stop(&refresh_timer); time_watcher_stop(&refresh_timer);
queue_free(refresh_timer.events);
time_watcher_close(&refresh_timer, NULL); time_watcher_close(&refresh_timer, NULL);
pmap_free(ptr_t)(invalidated_terminals); pmap_free(ptr_t)(invalidated_terminals);
map_free(int, int)(color_indexes); map_free(int, int)(color_indexes);

View File

@@ -27,8 +27,6 @@ describe('terminal cursor', function()
| |
-- TERMINAL -- | -- TERMINAL -- |
]]) ]])
eq(2, screen._cursor.row)
eq(15, screen._cursor.col)
end) end)
it('is highlighted when not focused', function() it('is highlighted when not focused', function()