commit - 1803e47fdac6d38db1869bdf9d2f75aaf1efe71c
commit + 2b49a8aeade04461afa786e428ef05c92967b072
blob - f5ec8db4239f2db4ea318c8ce6c58a1093eb8423
blob + 2c08f138d27c51eefdd281057356d21c933175b6
--- tog/tog.c
+++ tog/tog.c
lines = size.ws_row;
}
resize_term(lines, cols);
+}
+
+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 *
break;
case '/':
if (view->search_start)
- view->search_start(view);
+ view_search_start(view);
else
err = view->input(new, dead, focus, view, ch);
break;
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;
}