]> git.mdlowis.com Git - projs/tide.git/commitdiff
Fixed an infinite loop for selecting at end of buffer and fixed a bug in delete at...
authorMichael D. Lowis <mike.lowis@gentex.com>
Wed, 23 Nov 2016 14:11:23 +0000 (09:11 -0500)
committerMichael D. Lowis <mike.lowis@gentex.com>
Wed, 23 Nov 2016 14:11:23 +0000 (09:11 -0500)
.gitignore
libedit/buf.c
libedit/view.c
libx/x11.c
xedit

index 371b26130559568246955315a28b613c96a5c0ee..9b5f6dc2da27ab55880c7bc3c1f0ae6fc1ad9702 100644 (file)
@@ -38,3 +38,4 @@ tags
 *.gcno
 *.gcda
 *.gcov
+xedit
index 471deb998073429e4dbcd0879f5e999e73c0a13f..c87b4675d0ec40802cfff7aab5b28f0cf4a2eaa5 100644 (file)
@@ -404,40 +404,3 @@ unsigned buf_setcol(Buf* buf, unsigned pos, unsigned col) {
     }
     return curr;
 }
-
-//char* buf_getstr(Buf* buf, unsigned beg, unsigned end) {
-//    char utf[UTF_MAX] = {0};
-//    size_t len = 0;
-//    char*  str = NULL;
-//    for (; beg <= end; beg++) {
-//        Rune rune = buf_get(buf, beg);
-//        if (rune == RUNE_CRLF) {
-//            str = realloc(str, len + 2);
-//            str[len + 1] = '\r';
-//            str[len + 2] = '\n';
-//            len += 2;
-//        } else {
-//            size_t n = utf8encode(utf, rune);
-//            str = realloc(str, len + n);
-//            memcpy(str+len, utf, n);
-//            len += n;
-//        }
-//    }
-//    str = realloc(str, len+1);
-//    if (str) str[len] = '\0';
-//    return str;
-//}
-//
-//unsigned buf_putstr(Buf* buf, unsigned beg, unsigned end, char* str) {
-//    /* delete the selected text first */
-//    for (unsigned i = beg; ((end-beg) > 1) && (i <= end); i++)
-//        buf_del(buf, beg);
-//    /* insert the text */
-//    while (*str) {
-//        Rune rune = 0;
-//        size_t length = 0;
-//        while (!utf8decode(&rune, &length, *str++));
-//        buf_ins(buf, beg++, rune);
-//    }
-//    return beg;
-//}
index 634cef4f69697faf897e30958346bc1e97093fd0..1fcf318c638ecdabd59d06a584d6af83af385870 100644 (file)
@@ -105,8 +105,6 @@ static unsigned scroll_up(View* view) {
 
 static unsigned scroll_dn(View* view) {
     unsigned last  = view->rows[view->nrows-1]->off + view->rows[view->nrows-1]->rlen - 1;
-    if (last >= buf_end(&(view->buffer)))
-        return last;
     /* delete the first row and shift the others */
     if (view->nrows > 1) {
         free(view->rows[0]);
@@ -127,7 +125,7 @@ static void sync_view(View* view, size_t csr) {
     unsigned last  = view->rows[view->nrows-1]->off + view->rows[view->nrows-1]->rlen - 1;
     while (csr < first)
         first = scroll_up(view);
-    while (csr > last)
+    while (csr > last && last < buf_end(&(view->buffer)))
         last = scroll_dn(view);
     view->sync_needed = false;
 }
@@ -371,8 +369,13 @@ void view_delete(View* view) {
     Sel sel = view->selection;
     selswap(&sel);
     size_t num = num_selected(view->selection);
-    for (size_t i = 0; i <= num; i++)
-        buf_del(&(view->buffer), sel.beg);
+    if (num == 0) {
+        if (sel.end < buf_end(&(view->buffer)))
+            buf_del(&(view->buffer), sel.end);
+    } else {
+        for (size_t i = 0; i < num; i++)
+            buf_del(&(view->buffer), sel.beg);
+    }
     view->selection.beg = view->selection.end = sel.beg;
     view->selection.col = buf_getcol(&(view->buffer), view->selection.end);
     view->sync_needed = true;
index 385f898c153d3acaea518eff2782869fb30e271d..fd1e167a433ac021cfa7eb8e5c51428949705093 100644 (file)
@@ -375,20 +375,6 @@ void x11_draw_glyphs(int fg, int bg, XGlyphSpec* specs, size_t nspecs) {
     XftColorFree(X.display, X.visual, X.colormap, &fgc);
 }
 
-//void x11_draw_utf8(XFont* font, int fg, int bg, int x, int y, char* str) {
-//    static XftGlyphFontSpec specs[256];
-//    size_t nspecs = 0;
-//    while (*str && nspecs < 256) {
-//        x11_font_getglyph(font, &(specs[nspecs]), *str);
-//        specs[nspecs].x = x;
-//        specs[nspecs].y = y;
-//        x += font->base.width;
-//        nspecs++;
-//        str++;
-//    }
-//    x11_draw_glyphs(fg, bg, specs, nspecs);
-//}
-//
 //void x11_warp_mouse(int x, int y) {
 //    XWarpPointer(X.display, X.window, X.window, 0, 0, X.width, X.height, x, y);
 //}
diff --git a/xedit b/xedit
index 8765c0e8fb1e62c55acc00018be893e2ac037bb2..41b247de8f07533be566984659a0edb39c996768 100755 (executable)
Binary files a/xedit and b/xedit differ