diff options
Diffstat (limited to 'src/ring.c')
| -rw-r--r-- | src/ring.c | 30 |
1 files changed, 13 insertions, 17 deletions
@@ -76,15 +76,6 @@ teco_buffer_undo_edit(teco_buffer_t *ctx) } /** @private @memberof teco_buffer_t */ -static inline gchar * -teco_buffer_get_recovery(teco_buffer_t *ctx) -{ - g_autofree gchar *dirname = g_path_get_dirname(ctx->filename); - g_autofree gchar *basename = g_path_get_basename(ctx->filename); - return g_strconcat(dirname, G_DIR_SEPARATOR_S, "#", basename, "#", NULL); -} - -/** @private @memberof teco_buffer_t */ static gboolean teco_buffer_load(teco_buffer_t *ctx, const gchar *filename, GError **error) { @@ -119,7 +110,7 @@ teco_buffer_save(teco_buffer_t *ctx, const gchar *filename, GError **error) if (ctx == teco_ring_current && !teco_qreg_current) undo__teco_interface_info_update_buffer(ctx); if (ctx->state > TECO_BUFFER_DIRTY_NO_DUMP) { - g_autofree gchar *filename_recovery = teco_buffer_get_recovery(ctx); + g_autofree gchar *filename_recovery = teco_file_get_recovery(ctx->filename); g_unlink(filename_recovery); /* on rubout, we do not restore the recovery file */ ctx->state = TECO_BUFFER_DIRTY_NO_DUMP; @@ -149,7 +140,7 @@ teco_buffer_free(teco_buffer_t *ctx) */ if (ctx->state > TECO_BUFFER_DIRTY_NO_DUMP && teco_interrupted != TECO_TERMINATED) { - g_autofree gchar *filename_recovery = teco_buffer_get_recovery(ctx); + g_autofree gchar *filename_recovery = teco_file_get_recovery(ctx->filename); g_unlink(filename_recovery); } @@ -250,7 +241,7 @@ static void teco_ring_undirtify(void) { if (teco_ring_current->state > TECO_BUFFER_DIRTY_NO_DUMP) { - g_autofree gchar *filename_recovery = teco_buffer_get_recovery(teco_ring_current); + g_autofree gchar *filename_recovery = teco_file_get_recovery(teco_ring_current->filename); g_unlink(filename_recovery); } @@ -346,7 +337,7 @@ teco_ring_dump_recovery(void) if (!buffer->filename) continue; - g_autofree gchar *filename_recovery = teco_buffer_get_recovery(buffer); + g_autofree gchar *filename_recovery = teco_file_get_recovery(buffer->filename); g_autoptr(GIOChannel) channel = g_io_channel_new_file(filename_recovery, "w", NULL); if (!channel) @@ -736,19 +727,24 @@ teco_state_read_file_done(teco_machine_main_t *ctx, teco_string_t str, GError ** if (ctx->flags.mode > TECO_MODE_NORMAL) return &teco_state_start; - sptr_t pos = teco_interface_ssm(SCI_GETCURRENTPOS, 0, 0); - teco_undo_int(teco_ranges[0].from) = teco_interface_bytes2glyphs(pos); + sptr_t from = teco_interface_ssm(SCI_GETCURRENTPOS, 0, 0); + teco_undo_int(teco_ranges[0].from) = teco_current_doc_get_dot();; g_autofree gchar *filename = teco_file_expand_path(str.data); /* FIXME: Add wrapper to interface.h? */ if (!teco_view_load(teco_interface_current_view, filename, FALSE, error)) return NULL; - pos = teco_interface_ssm(SCI_GETCURRENTPOS, 0, 0); - teco_undo_int(teco_ranges[0].to) = teco_interface_bytes2glyphs(pos); + /* + * FIXME: Perhaps teco_view_load() should return the number of glyphs added. + */ + sptr_t to = teco_interface_ssm(SCI_GETCURRENTPOS, 0, 0); + teco_undo_int(teco_ranges[0].to) = teco_interface_bytes2glyphs_rel(teco_ranges[0].from, + from, to-from); teco_undo_guint(teco_ranges_count) = 1; if (teco_ranges[0].from != teco_ranges[0].to) { + teco_current_doc_set_dot(teco_ranges[0].to); teco_ring_dirtify(); if (teco_current_doc_must_undo()) |
