From c6d44836fd8ed1442e01825cb0f9f97e7bf11515 Mon Sep 17 00:00:00 2001 From: David Moc Date: Wed, 3 Jun 2026 02:26:11 +0200 Subject: Harden editor logging and packaging --- src/buffers.c | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) (limited to 'src/buffers.c') diff --git a/src/buffers.c b/src/buffers.c index 1e42bfc..c2e94e2 100644 --- a/src/buffers.c +++ b/src/buffers.c @@ -302,15 +302,25 @@ int buffer_delete_selection(buffer_t *buffer) { int buffer_replace_selection(buffer_t *buffer, const char *text) { if (!buffer || !text) return ECEX_ERR; if (!buffer_has_selection(buffer)) return buffer_insert(buffer, text); + if (buffer_record_undo(buffer) != ECEX_OK) return ECEX_ERR; size_t start = 0; size_t end = 0; buffer_selection_range(buffer, &start, &end); - if (buffer_delete_range(buffer, start, end) != ECEX_OK) return ECEX_ERR; - buffer->point = start; - buffer_clear_mark(buffer); - return buffer_insert(buffer, text); + int undo_disabled = buffer->undo_disabled; + int result = ECEX_OK; + buffer->undo_disabled = 1; + + result = buffer_delete_range(buffer, start, end); + if (result == ECEX_OK) { + buffer->point = start; + buffer_clear_mark(buffer); + result = buffer_insert(buffer, text); + } + + buffer->undo_disabled = undo_disabled; + return result; } int buffer_backspace(buffer_t *buffer) { -- cgit v1.2.3