From 714875f3c0c22ed01a8e777755b281c97f2b52b8 Mon Sep 17 00:00:00 2001 From: Robin Haberkorn Date: Thu, 18 Dec 2025 02:10:46 +0100 Subject: fixup: must not use teco_view_save_to_file() when creating backup/recovery files * It emits undo tokens which would bring internal datastructures - especially the undo stack - out of sync. * We now document that teco_view_save_to_channel() will always be without undo token emission. --- src/ring.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) (limited to 'src/ring.c') diff --git a/src/ring.c b/src/ring.c index e42ff14..afd6b25 100644 --- a/src/ring.c +++ b/src/ring.c @@ -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; } -- cgit v1.2.3