]> git.mdlowis.com Git - projs/tide.git/commitdiff
implemented double and triple click selections
authorMichael D. Lowis <mike@mdlowis.com>
Sat, 19 Nov 2016 02:14:12 +0000 (21:14 -0500)
committerMichael D. Lowis <mike@mdlowis.com>
Sat, 19 Nov 2016 02:14:12 +0000 (21:14 -0500)
inc/edit.h
libedit/view.c
xedit.c

index 0d6b3f3d6e0c106ac54848f4627b807337a904a4..71a4618e4e6591a84792e84695b42953676eb481 100644 (file)
@@ -154,6 +154,8 @@ void view_byrune(View* view, int move);
 void view_byline(View* view, int move);
 void view_setcursor(View* view, size_t row, size_t col);
 void view_selext(View* view, size_t row, size_t col);
+void view_selword(View* view, size_t row, size_t col);
+void view_select(View* view, size_t row, size_t col);
 void view_insert(View* view, Rune rune);
 void view_delete(View* view);
 void view_bol(View* view);
index d1f8eca0d38bbd3681f1923aa302ae1509287457..ef09803cf7ab0009d9f1207859893e0fecae6dc9 100644 (file)
@@ -256,6 +256,51 @@ void view_selext(View* view, size_t row, size_t col) {
     }
 }
 
+static void selbigword(View* view, Sel* sel) {
+    Buf* buf = &(view->buffer);
+    size_t mbeg = sel->end, mend = sel->end;
+    for (; !risblank(buf_get(buf, mbeg-1)); mbeg--);
+    for (; !risblank(buf_get(buf, mend));   mend++);
+    sel->beg = mbeg, sel->end = mend-1;
+}
+
+void view_selword(View* view, size_t row, size_t col) {
+    view_setcursor(view, row, col);
+    Sel sel  = view->selection;
+    Buf* buf = &(view->buffer);
+    selbigword(view, &sel);
+    sel.end++;
+    view->selection = sel;
+}
+
+void view_select(View* view, size_t row, size_t col) {
+    view_setcursor(view, row, col);
+    Sel sel  = view->selection;
+    Buf* buf = &(view->buffer);
+    size_t bol = buf_bol(buf, sel.end);
+    Rune r = buf_get(buf, sel.end);
+    if (sel.end == bol || r == '\n' || r == RUNE_CRLF) {
+        sel.beg = bol;
+        sel.end = buf_eol(buf, sel.end);
+    } else if (risword(r)) {
+        sel.beg = buf_bow(buf, sel.end);
+        sel.end = buf_eow(buf, sel.end++);
+    } else if (r == '(' || r == ')') {
+        sel.beg = buf_lscan(buf, sel.end,   '(');
+        sel.end = buf_rscan(buf, sel.end++, ')');
+    } else if (r == '[' || r == ']') {
+        sel.beg = buf_lscan(buf, sel.end,   '[');
+        sel.end = buf_rscan(buf, sel.end++, ']');
+    } else if (r == '{' || r == '}') {
+        sel.beg = buf_lscan(buf, sel.end,   '{');
+        sel.end = buf_rscan(buf, sel.end++, '}');
+    } else {
+        selbigword(view, &sel);
+    }
+    sel.end++;
+    view->selection = sel;
+}
+
 void view_insert(View* view, Rune rune) {
     if (rune == '\b') {
         if (num_selected(view->selection))
diff --git a/xedit.c b/xedit.c
index 5c75c7076b0fb58fb280b739782e5cca228ab216..64b0f3ab89826c2c2927e66f689bf2ef5afe9fdf 100644 (file)
--- a/xedit.c
+++ b/xedit.c
@@ -166,11 +166,9 @@ static void mouse_left(enum RegionId id, size_t count, size_t row, size_t col) {
     if (count == 1) {
         view_setcursor(getview(id), row, col);
     } else if (count == 2) {
-        puts("select");
-        //view_select(getview(id), row, col);
+        view_select(getview(id), row, col);
     } else if (count == 3) {
-        puts("select bigword");
-        //view_selword(getview(id), row, col);
+        view_selword(getview(id), row, col);
     }
 }
 
@@ -422,35 +420,6 @@ int main(int argc, char** argv) {
 #if 0
 /* Mouse Actions
  *****************************************************************************/
-void bigword(int x, int y) {
-    size_t mbeg = SelEnd, mend = SelEnd;
-    for (; !risblank(buf_get(&Buffer, mbeg-1)); mbeg--);
-    for (; !risblank(buf_get(&Buffer, mend));   mend++);
-    SelBeg = mbeg, SelEnd = mend-1;
-}
-
-void selection(int x, int y) {
-    size_t bol = buf_bol(&Buffer, SelEnd);
-    Rune r = buf_get(&Buffer, SelEnd);
-    if (SelEnd == bol || r == '\n' || r == RUNE_CRLF) {
-        SelBeg = bol;
-        SelEnd = buf_eol(&Buffer, SelEnd);
-    } else if (risword(r)) {
-        SelBeg = buf_bow(&Buffer, SelEnd);
-        SelEnd = buf_eow(&Buffer, SelEnd++);
-    } else if (r == '(' || r == ')') {
-        SelBeg = buf_lscan(&Buffer, SelEnd,   '(');
-        SelEnd = buf_rscan(&Buffer, SelEnd++, ')');
-    } else if (r == '[' || r == ']') {
-        SelBeg = buf_lscan(&Buffer, SelEnd,   '[');
-        SelEnd = buf_rscan(&Buffer, SelEnd++, ']');
-    } else if (r == '{' || r == '}') {
-        SelBeg = buf_lscan(&Buffer, SelEnd,   '{');
-        SelEnd = buf_rscan(&Buffer, SelEnd++, '}');
-    } else {
-        bigword(x,y);
-    }
-}
 
 void search(int x, int y) {
     //size_t clickpos = screen_getoff(&Buffer, SelEnd, y-1, x);