diff options
Diffstat (limited to 'src/interface-curses')
| -rw-r--r-- | src/interface-curses/interface.c | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/src/interface-curses/interface.c b/src/interface-curses/interface.c index 8f41f2a..e03ba72 100644 --- a/src/interface-curses/interface.c +++ b/src/interface-curses/interface.c @@ -205,6 +205,9 @@ static struct { teco_string_t info_current; gboolean info_dirty; + /** timer to track the backup interval */ + GTimer *backup_timer; + WINDOW *msg_window; /** @@ -1217,7 +1220,7 @@ teco_interface_info_update_buffer(const teco_buffer_t *buffer) teco_string_clear(&teco_interface.info_current); teco_string_init(&teco_interface.info_current, filename, strlen(filename)); - teco_interface.info_dirty = buffer->dirty; + teco_interface.info_dirty = buffer->state > TECO_BUFFER_CLEAN; teco_interface.info_type = TECO_INFO_TYPE_BUFFER; /* NOTE: drawn in teco_interface_event_loop_iter() */ } @@ -2014,6 +2017,18 @@ teco_interface_blocking_getch(void) /* no special <CTRL/C> handling */ raw(); nodelay(teco_interface.input_pad, FALSE); + + /* + * Make sure we return when it's time to create backups. + */ + if (teco_ring_backup_interval != 0) { + if (G_UNLIKELY(!teco_interface.backup_timer)) + teco_interface.backup_timer = g_timer_new(); + gdouble elapsed = g_timer_elapsed(teco_interface.backup_timer, NULL); + wtimeout(teco_interface.input_pad, + MAX((gdouble)teco_ring_backup_interval - elapsed, 0)*1000); + } + /* * Memory limiting is stopped temporarily, since it might otherwise * constantly place 100% load on the CPU. @@ -2029,6 +2044,12 @@ teco_interface_blocking_getch(void) cbreak(); #endif + if (key == ERR && teco_ring_backup_interval != 0 && + g_timer_elapsed(teco_interface.backup_timer, NULL) >= teco_ring_backup_interval) { + teco_ring_backup(); + g_timer_start(teco_interface.backup_timer); + } + return key; } @@ -2290,4 +2311,7 @@ teco_interface_cleanup(void) if (teco_interface.pair_table) g_hash_table_destroy(teco_interface.pair_table); + + if (teco_interface.backup_timer) + g_timer_destroy(teco_interface.backup_timer); } |
