diff options
Diffstat (limited to 'src/buffers.c')
| -rw-r--r-- | src/buffers.c | 18 |
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) { |
