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