aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/interface-curses/interface.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/interface-curses/interface.c')
-rw-r--r--src/interface-curses/interface.c26
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);
}