From: Michael D. Lowis Date: Sat, 19 Nov 2016 02:50:20 +0000 (-0500) Subject: implemented right-click to find X-Git-Url: https://git.mdlowis.com/?a=commitdiff_plain;h=45157b24326e76a97964ae6be504dc32bd967d8b;p=projs%2Ftide.git implemented right-click to find --- diff --git a/inc/edit.h b/inc/edit.h index 71a4618..7113db2 100644 --- a/inc/edit.h +++ b/inc/edit.h @@ -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); diff --git a/libedit/buf.c b/libedit/buf.c index 96d024b..ee4694b 100644 --- a/libedit/buf.c +++ b/libedit/buf.c @@ -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) { diff --git a/libedit/view.c b/libedit/view.c index 2768324..17b438b 100644 --- a/libedit/view.c +++ b/libedit/view.c @@ -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 64b0f3a..fd44d89 100644 --- 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);