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);
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);
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;
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))
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) {
}
#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);