diff options
-rw-r--r-- | src/search.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/src/search.c b/src/search.c index ba5203c..1945f5c 100644 --- a/src/search.c +++ b/src/search.c @@ -1075,18 +1075,24 @@ teco_state_search_kill_done(teco_machine_main_t *ctx, const teco_string_t *str, if (teco_search_parameters.dot < dot) { /* kill forwards */ sptr_t anchor = teco_interface_ssm(SCI_GETANCHOR, 0, 0); + gsize len = anchor - teco_search_parameters.dot; if (teco_current_doc_must_undo()) undo__teco_interface_ssm(SCI_GOTOPOS, dot, 0); teco_interface_ssm(SCI_GOTOPOS, anchor, 0); - teco_interface_ssm(SCI_DELETERANGE, teco_search_parameters.dot, - anchor - teco_search_parameters.dot); + teco_interface_ssm(SCI_DELETERANGE, teco_search_parameters.dot, len); /* NOTE: An undo action is not always created. */ if (teco_current_doc_must_undo() && teco_search_parameters.dot != anchor) undo__teco_interface_ssm(SCI_UNDO, 0, 0); + + /* fix up ranges (^Y) */ + for (guint i = 0; i < teco_ranges_count; i++) { + teco_ranges[i].from -= len; + teco_ranges[i].to -= len; + } } else { /* kill backwards */ teco_interface_ssm(SCI_DELETERANGE, dot, teco_search_parameters.dot - dot); |