commit 2b49a8aeade04461afa786e428ef05c92967b072 from: Stefan Sperling date: Sat Jun 22 18:13:54 2019 UTC generalize tog's view_search_start() commit - 1803e47fdac6d38db1869bdf9d2f75aaf1efe71c commit + 2b49a8aeade04461afa786e428ef05c92967b072 blob - f5ec8db4239f2db4ea318c8ce6c58a1093eb8423 blob + 2c08f138d27c51eefdd281057356d21c933175b6 --- tog/tog.c +++ tog/tog.c @@ -519,6 +519,43 @@ tog_resizeterm(void) 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 * @@ -623,7 +660,7 @@ view_input(struct tog_view **new, struct tog_view **de 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; }