]> git.mdlowis.com Git - projs/tide.git/commitdiff
implemented right-click to find
authorMichael D. Lowis <mike@mdlowis.com>
Sat, 19 Nov 2016 02:50:20 +0000 (21:50 -0500)
committerMichael D. Lowis <mike@mdlowis.com>
Sat, 19 Nov 2016 02:50:20 +0000 (21:50 -0500)
inc/edit.h
libedit/buf.c
libedit/view.c
xedit.c

index 71a4618e4e6591a84792e84695b42953676eb481..7113db2457deac96d97ebfe857bcc1a4008ccbca 100644 (file)
@@ -68,7 +68,7 @@ unsigned buf_bow(Buf* buf, unsigned pos);
 unsigned buf_eow(Buf* buf, unsigned pos);
 unsigned buf_lscan(Buf* buf, unsigned pos, Rune r);
 unsigned buf_rscan(Buf* buf, unsigned pos, Rune r);
-void buf_find(Buf* buf, unsigned* beg, unsigned* end);
+void buf_find(Buf* buf, size_t* beg, size_t* end);
 unsigned buf_end(Buf* buf);
 unsigned buf_byrune(Buf* buf, unsigned pos, int count);
 unsigned buf_byline(Buf* buf, unsigned pos, int count);
@@ -156,6 +156,7 @@ 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_find(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 96d024b88a3e7b2b276bfac21061fbb8bba3c26c..ee4694bbecf7e84cf7cb2593d2ef6a19d966fed6 100644 (file)
@@ -252,7 +252,7 @@ static int range_match(Buf* buf, unsigned dbeg, unsigned dend, unsigned mbeg, un
     return 0;
 }
 
-void buf_find(Buf* buf, unsigned* beg, unsigned* end) {
+void buf_find(Buf* buf, size_t* beg, size_t* end) {
     unsigned dbeg = *beg, dend = *end;
     unsigned mbeg = dend+1, mend = mbeg + (dend-dbeg);
     while (mend != dbeg) {
index 27683247c4054e0c9c45f57eea16b3aeda5ade90..17b438b90dc156a6998f322fcc804dd8bea1301b 100644 (file)
@@ -264,10 +264,36 @@ static void selbigword(View* view, Sel* sel) {
     sel->beg = mbeg, sel->end = mend-1;
 }
 
+static void selcontext(View* view, Sel* sel) {
+    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++, ')');
+        sel->beg++, sel->end--;
+    } else if (r == '[' || r == ']') {
+        sel->beg = buf_lscan(buf, sel->end,   '[');
+        sel->end = buf_rscan(buf, sel->end++, ']');
+        sel->beg++, sel->end--;
+    } else if (r == '{' || r == '}') {
+        sel->beg = buf_lscan(buf, sel->end,   '{');
+        sel->end = buf_rscan(buf, sel->end++, '}');
+        sel->beg++, sel->end--;
+    } else {
+        selbigword(view, sel);
+    }
+}
+
 void view_selword(View* view, size_t row, size_t col) {
     view_setcursor(view, row, col);
-    Sel sel  = view->selection;
-    Buf* buf = &(view->buffer);
+    Sel sel = view->selection;
     selbigword(view, &sel);
     sel.end++;
     view->selection = sel;
@@ -275,36 +301,19 @@ void view_selword(View* view, size_t row, size_t col) {
 
 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++);
-        sel.beg++, sel.end--;
-    } else if (r == '(' || r == ')') {
-        sel.beg = buf_lscan(buf, sel.end,   '(');
-        sel.end = buf_rscan(buf, sel.end++, ')');
-        sel.beg++, sel.end--;
-    } else if (r == '[' || r == ']') {
-        sel.beg = buf_lscan(buf, sel.end,   '[');
-        sel.end = buf_rscan(buf, sel.end++, ']');
-        sel.beg++, sel.end--;
-    } else if (r == '{' || r == '}') {
-        sel.beg = buf_lscan(buf, sel.end,   '{');
-        sel.end = buf_rscan(buf, sel.end++, '}');
-        sel.beg++, sel.end--;
-    } else {
-        selbigword(view, &sel);
-    }
+    Sel sel = view->selection;
+    selcontext(view, &sel);
     sel.end++;
     view->selection = sel;
 }
 
+void view_find(View* view, size_t row, size_t col) {
+    view_select(view, row, col);
+    Sel sel = view->selection;
+    buf_find(&(view->buffer), &sel.beg, &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 64b0f3ab89826c2c2927e66f689bf2ef5afe9fdf..fd44d89350b3f92731b0d6e09e901200329f3da9 100644 (file)
--- a/xedit.c
+++ b/xedit.c
@@ -184,8 +184,7 @@ static void mouse_right(enum RegionId id, size_t count, size_t row, size_t col)
     if (MouseBtns[MOUSE_BTN_LEFT].pressed)
         paste();
     else
-        puts("find");
-    //    view_find(getview(id), row, col);
+        view_find(getview(id), row, col);
 }
 
 static void mouse_wheelup(enum RegionId id, size_t count, size_t row, size_t col) {
@@ -418,23 +417,6 @@ int main(int argc, char** argv) {
 }
 
 #if 0
-/* Mouse Actions
- *****************************************************************************/
-
-void search(int x, int y) {
-    //size_t clickpos = screen_getoff(&Buffer, SelEnd, y-1, x);
-    //if (clickpos < SelBeg || clickpos > SelEnd) {
-    //    move_cursor(x,y);
-    //    selection(x,y);
-    //} else {
-    //    buf_find(&Buffer, &SelBeg, &SelEnd);
-    //}
-    //size_t c, r;
-    //screen_update(&Buffer, SelEnd, &c, &r);
-    //extern void move_pointer(size_t c, size_t r);
-    //move_pointer(c, r);
-}
-
 void move_pointer(size_t x, size_t y) {
     x = (x * Fonts.base.width)  + (Fonts.base.width / 2);
     y = ((y+1) * Fonts.base.height) + (Fonts.base.height / 2);