From 98ebced475975d1dd0cb733d11e2413e8bb54c54 Mon Sep 17 00:00:00 2001 From: Francois Fleuret Date: Fri, 10 Feb 2012 11:25:38 +0100 Subject: [PATCH] The highlight for regexp match seems to work. --- selector.c | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/selector.c b/selector.c index a4d9ee5..81286d6 100644 --- a/selector.c +++ b/selector.c @@ -389,6 +389,7 @@ int add_interval(int n, int *switches, int start, int end) { int match(struct matcher *matcher, char *string, int *nb_switches, int *switches) { int n; char *where; + regmatch_t matches; if(nb_switches) { *nb_switches = 0; } @@ -432,7 +433,16 @@ int match(struct matcher *matcher, char *string, int *nb_switches, int *switches } return 1; } else { - return regexec(&matcher->preg, string, 0, 0, 0) == 0; + if(regexec(&matcher->preg, string, 1, &matches, 0) == 0) { + if(switches) { + *nb_switches = 2; + switches[0] = matches.rm_so; + switches[1] = matches.rm_eo; + } + return 1; + } else { + return 0; + } } } @@ -630,10 +640,10 @@ void update_screen(int *current_focus_line, int *displayed_focus_line, initialize_matcher(&matcher, use_regexp, case_sensitive, pattern); - if(show_hits && matcher.nb_patterns > 0) { + if(show_hits && matcher.nb_patterns >= 0) { switches = safe_malloc(sizeof(int) * matcher.nb_patterns * 2); } else { - switches = 0; + switches = safe_malloc(sizeof(int) * 2); } console_width = getmaxx(stdscr); @@ -769,6 +779,7 @@ void update_screen(int *current_focus_line, int *displayed_focus_line, buffer[k++] = '\n'; buffer[k++] = '\0'; } + print_string_with_switches(buffer, k, console_width, nb_switches / 2, switches); } -- 2.20.1