aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorRobin Haberkorn <robin.haberkorn@googlemail.com>2024-12-14 00:10:52 +0300
committerRobin Haberkorn <robin.haberkorn@googlemail.com>2024-12-14 00:10:52 +0300
commit8c2cac3957600637a388e5ad5809f408030a51be (patch)
treeb6d2efe524da929aa4797d739cf8a79423b672f8
parent6dcb454e8dba0593b39752895addff84fea7516e (diff)
downloadsciteco-8c2cac3957600637a388e5ad5809f408030a51be.tar.gz
fixed ^Y after FK...$: take the deleted text into account
* I.e. you can now write FK...$^YD to delete up to AND the matched pattern.
-rw-r--r--src/search.c10
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);