From 042fee929e505bed504a0b6a696f0a7babcb9cd5 Mon Sep 17 00:00:00 2001 From: "Michael D. Lowis" Date: Wed, 22 Aug 2018 12:26:07 -0400 Subject: [PATCH] implemented logic for selecting last edit --- lib/buf.c | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/lib/buf.c b/lib/buf.c index 3df154b..3055821 100644 --- 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; } -- 2.49.0