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);
+char* view_fetch(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);
View view;
} Region;
+typedef struct {
+ char* tag;
+ void (*action)(void);
+} Tag;
+
+
/* Configuration
*****************************************************************************/
enum {
view->selection = sel;
}
+char* view_fetch(View* view, size_t row, size_t col) {
+ char* str = NULL;
+ size_t off = getoffset(view, row, col);
+ if (off != SIZE_MAX) {
+ Sel sel = { .beg = off, .end = off };
+ if (in_selection(view->selection, off)) {
+ sel = view->selection;
+ } else {
+ selcontext(view, &sel);
+ sel.end++;
+ }
+ str = view_getstr(view, &sel);
+ }
+ return str;
+}
+
void view_find(View* view, size_t row, size_t col) {
size_t off = getoffset(view, row, col);
if (off != SIZE_MAX) {
}
return NREGIONS;
}
+
/* UI Callbacks
*****************************************************************************/
static void delete(void) {
static void change_focus(void) {
if (Focused == TAGS) {
- if (TagWinExpanded) {
- TagWinExpanded = false;
- Focused = EDIT;
- } else {
- TagWinExpanded = true;
- }
+ Focused = EDIT;
} else {
Focused = TAGS;
- TagWinExpanded = true;
}
}
free(str);
}
+/* Builtin Tags
+ *****************************************************************************/
+Tag Builtins[] = {
+ { "Quit", quit },
+ { "Save", save },
+ { "Cut", cut },
+ { "Copy", copy },
+ { "Paste", paste },
+ //{ "Find", NULL },
+ { NULL, NULL }
+};
+
+static void tagexec(char* cmd) {
+ Tag* tags = Builtins;
+ while (tags->tag) {
+ if (!strcmp(tags->tag, cmd)) {
+ Focused = EDIT;
+ tags->action();
+ break;
+ }
+ tags++;
+ }
+}
+
/* Mouse Handling
*****************************************************************************/
static void mouse_left(enum RegionId id, size_t count, size_t row, size_t col) {
static void mouse_middle(enum RegionId id, size_t count, size_t row, size_t col) {
if (MouseBtns[MOUSE_BTN_LEFT].pressed)
cut();
- else
- puts("exec");
- // view_exec(getview(id), row, col);
+ else {
+ char* str = view_fetch(getview(id), row, col);
+ tagexec(str);
+ free(str);
+ }
}
static void mouse_right(enum RegionId id, size_t count, size_t row, size_t col) {
}
static void mouse_wheelup(enum RegionId id, size_t count, size_t row, size_t col) {
- view_scroll(getview(id), -1);
+ view_scroll(getview(id), -ScrollLines);
}
static void mouse_wheeldn(enum RegionId id, size_t count, size_t row, size_t col) {
- view_scroll(getview(id), 1);
+ view_scroll(getview(id), +ScrollLines);
}
void (*MouseActs[MOUSE_BTN_COUNT])(enum RegionId id, size_t count, size_t row, size_t col) = {