From: Michael D. Lowis Date: Thu, 23 Aug 2018 01:58:31 +0000 (-0400) Subject: fixed undo/redo coalescing of inserts X-Git-Url: https://git.mdlowis.com/?a=commitdiff_plain;h=9c2ed7365608dae7e8d25a118fcdd0816cfb3559;p=projs%2Ftide.git fixed undo/redo coalescing of inserts --- diff --git a/lib/buf.c b/lib/buf.c index 3055821..93dc9dc 100644 --- a/lib/buf.c +++ b/lib/buf.c @@ -163,13 +163,24 @@ static void log_clear(Log** list) { } } +static void dumplog(Buf* buf) { +#if 0 + printf("\nUndo:\n"); + for (Log* log = buf->undo; log; log = log->next) + printf(" %lu-%lu '%s'\n", log->beg, log->end, log->data); + printf("Redo:\n"); + for (Log* log = buf->redo; log; log = log->next) + printf(" %lu-%lu '%s'\n", log->beg, log->end, log->data); +#endif +} + static void log_add(Buf* buf, size_t beg, size_t end, char* data) { Log* prev = buf->undo; log_clear(&(buf->redo)); /* decide if this is an insert or delete */ if (!data) { if (prev && !prev->data && prev->end == beg) - prev->end++; + prev->end = end; else buf->undo = mklog(beg, end, data, prev); } else { @@ -188,6 +199,7 @@ static void log_add(Buf* buf, size_t beg, size_t end, char* data) { buf->undo = mklog(beg, end, data, prev); } } + dumplog(buf); } static void log_swap(Buf* buf, Log** src, Log** dest) { @@ -218,6 +230,7 @@ static void log_swap(Buf* buf, Log** src, Log** dest) { /* push item onto redo stack */ item->next = *dest; *dest = item; + dumplog(buf); } void buf_undo(Buf* buf) { diff --git a/lib/config.c b/lib/config.c index 38a1502..78f05c2 100644 --- a/lib/config.c +++ b/lib/config.c @@ -5,7 +5,7 @@ #include #ifdef __MACH__ - #define FONT "Verdana:size=10" + #define FONT "Verdana:size=11" #define LNSPACE 0 #else #define FONT "Verdana:size=11" diff --git a/lib/job.c b/lib/job.c index 7d8f57c..1ed6f90 100644 --- a/lib/job.c +++ b/lib/job.c @@ -27,6 +27,7 @@ static void pipe_read(Job* job) { long nread = read(job->fd, buffer, sizeof(buffer)-1); if (nread <= 0) { job->readfn = NULL; + view_selprev(pipedata->dest); } else if (nread > 0) { buffer[nread] = '\0'; view_putstr(pipedata->dest, buffer);