]> git.mdlowis.com Git - projs/tide.git/commitdiff
implemented logic for selecting last edit
authorMichael D. Lowis <mike.lowis@gentex.com>
Wed, 22 Aug 2018 16:26:07 +0000 (12:26 -0400)
committerMichael D. Lowis <mike.lowis@gentex.com>
Wed, 22 Aug 2018 16:26:07 +0000 (12:26 -0400)
lib/buf.c

index 3df154bb1ea09e4ac8c2f435644236369b0211b3..30558219a3c3fd9bdfaa98ea54e5930d2763fb22 100644 (file)
--- a/lib/buf.c
+++ b/lib/buf.c
@@ -234,8 +234,23 @@ void buf_logclear(Buf* buf) {
 }
 
 void buf_lastins(Buf* buf) {
-    Sel sel = buf_getsel(buf);
-    // Set selection to last inserted text
+    Log* log = buf->undo;
+    if (!log) return;
+    Sel sel = {.beg = log->beg, .end = log->end };
+    size_t delsize = 0;
+    /* try and expand the selected region to encompass related inserts */
+    for (; log; log = log->next) {
+        if (!log->data) {
+            size_t ibeg = log->beg, iend = log->end - delsize;
+            if (iend < ibeg || ibeg > sel.beg || iend < sel.beg) break;
+            if (ibeg < sel.beg && iend > sel.end) break;
+            sel.beg = ibeg, delsize = 0;
+        } else {
+            /* bail if the delete doesnt overlap */
+            if(log->beg != sel.beg) break;
+            delsize = strlen(log->data);
+        }
+    }
     buf->selection = sel;
 }