aboutsummaryrefslogtreecommitdiff
path: root/src/buffers.c
diff options
context:
space:
mode:
authorDavid Moc <personal@cdatgoose.org>2026-06-03 02:26:11 +0200
committerDavid Moc <personal@cdatgoose.org>2026-06-03 02:26:11 +0200
commitc6d44836fd8ed1442e01825cb0f9f97e7bf11515 (patch)
treed0e8cededdecafdf27476a744ac2d892d5a18620 /src/buffers.c
parentb68766967c86a6a789d65772f69f7f44939ebdf2 (diff)
Harden editor logging and packaging
Diffstat (limited to 'src/buffers.c')
-rw-r--r--src/buffers.c18
1 files changed, 14 insertions, 4 deletions
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) {