diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/ring.c | 17 | ||||
| -rw-r--r-- | src/view.c | 7 |
2 files changed, 23 insertions, 1 deletions
@@ -334,11 +334,26 @@ teco_ring_backup(void) continue; g_autofree gchar *filename_backup = teco_buffer_get_backup(buffer); + + g_autoptr(GIOChannel) channel = g_io_channel_new_file(filename_backup, "w", NULL); + if (!channel) + continue; + /* + * teco_view_save_to_channel() expects a buffered and blocking channel. + */ + g_io_channel_set_encoding(channel, NULL, NULL); + g_io_channel_set_buffered(channel, TRUE); + + /* + * This does not use teco_view_save_to_file() since we must not + * emit undo tokens. + * * FIXME: Errors are silently ignored. * Should we log warnings instead? */ - teco_view_save(buffer->view, filename_backup, NULL); + if (!teco_view_save_to_channel(buffer->view, channel, NULL)) + continue; buffer->state = TECO_BUFFER_DIRTY_BACKEDUP; } @@ -508,6 +508,13 @@ teco_undo_remove_file_push(const gchar *filename) strcpy(ctx, filename); } +/** + * Save the view's document to the given IO channel. + * + * @note This must not emit undo tokens as it is also used by teco_ring_backup(). + * + * @memberof teco_view_t + */ gboolean teco_view_save_to_channel(teco_view_t *ctx, GIOChannel *channel, GError **error) { |
