--- a/ui/gtk/text.c Sun Feb 01 18:38:06 2026 +0100 +++ b/ui/gtk/text.c Mon Feb 02 20:59:13 2026 +0100 @@ -186,6 +186,7 @@ value->set = ui_textarea_set; value->getsubstr = ui_textarea_getsubstr; value->insert = ui_textarea_insert; + value->replace = ui_textarea_replace; value->setposition = ui_textarea_setposition; value->position = ui_textarea_position; value->showposition = ui_textarea_showposition; @@ -287,7 +288,7 @@ return str; } -void ui_textarea_insert(UiText *text, int pos, char *str) { +void ui_textarea_insert(UiText *text, int pos, const char *str) { GtkTextIter offset; gtk_text_buffer_get_iter_at_offset(text->data1, &offset, pos); gtk_text_buffer_insert(text->data1, &offset, str, -1); @@ -298,6 +299,20 @@ text->value.free = NULL; } +void ui_textarea_replace(UiText *text, int begin, int end, const char *replacement) { + GtkTextBuffer *buffer = text->data1; + GtkTextIter begin_offset; + GtkTextIter end_offset; + gtk_text_buffer_get_iter_at_offset(buffer, &begin_offset, begin); + gtk_text_buffer_get_iter_at_offset(buffer, &end_offset, end); + gtk_text_buffer_begin_user_action(buffer); + gtk_text_buffer_delete(buffer, &begin_offset, &end_offset); + if(replacement) { + gtk_text_buffer_insert(buffer, &begin_offset, replacement, -1); + } + gtk_text_buffer_end_user_action(buffer); +} + void ui_textarea_setposition(UiText *text, int pos) { GtkTextIter iter; gtk_text_buffer_get_iter_at_offset(text->data1, &iter, pos);