generalize tog's view_search_start()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
diff --git a/tog/tog.c b/tog/tog.c
index f5ec8db..2c08f13 100644
--- a/tog/tog.c
+++ b/tog/tog.c
@@ -522,6 +522,43 @@ tog_resizeterm(void)
}
static const struct got_error *
+view_search_start(struct tog_view *view)
+{
+ char pattern[1024];
+ int ret;
+
+ if (view->nlines < 1)
+ return NULL;
+
+ mvwaddstr(view->window, view->begin_y + view->nlines - 1,
+ view->begin_x, "/");
+ wclrtoeol(view->window);
+
+ nocbreak();
+ echo();
+ ret = wgetnstr(view->window, pattern, sizeof(pattern));
+ cbreak();
+ noecho();
+ if (ret == ERR)
+ return NULL;
+
+ if (view->searching) {
+ regfree(&view->regex);
+ view->searching = 0;
+ }
+
+ if (regcomp(&view->regex, pattern,
+ REG_EXTENDED | REG_ICASE | REG_NOSUB | REG_NEWLINE) == 0) {
+ view->search_start(view);
+ view->searching = TOG_SEARCH_FORWARD;
+ view->search_next_done = 0;
+ view->search_next(view);
+ }
+
+ return NULL;
+}
+
+static const struct got_error *
view_input(struct tog_view **new, struct tog_view **dead,
struct tog_view **focus, int *done, struct tog_view *view,
struct tog_view_list_head *views)
@@ -623,7 +660,7 @@ view_input(struct tog_view **new, struct tog_view **dead,
break;
case '/':
if (view->search_start)
- view->search_start(view);
+ view_search_start(view);
else
err = view->input(new, dead, focus, view, ch);
break;
@@ -1672,37 +1709,8 @@ static const struct got_error *
search_start_log_view(struct tog_view *view)
{
struct tog_log_view_state *s = &view->state.log;
- char pattern[1024];
- int ret;
-
- if (view->nlines < 1)
- return NULL;
-
- mvwaddstr(view->window, view->begin_y + view->nlines - 1,
- view->begin_x, "/");
- wclrtoeol(view->window);
-
- nocbreak();
- echo();
- ret = wgetnstr(view->window, pattern, sizeof(pattern));
- cbreak();
- noecho();
- if (ret == ERR)
- return NULL;
-
- if (view->searching) {
- regfree(&view->regex);
- view->searching = 0;
- }
s->matched_entry = NULL;
- if (regcomp(&view->regex, pattern,
- REG_EXTENDED | REG_ICASE | REG_NOSUB | REG_NEWLINE) == 0) {
- view->searching = TOG_SEARCH_FORWARD;
- view->search_next_done = 0;
- view->search_next(view);
- }
-
return NULL;
}