@@ -35,7 +35,8 @@ void init_grep_defaults(void)
3535 strcpy (opt -> color_filename , "" );
3636 strcpy (opt -> color_function , "" );
3737 strcpy (opt -> color_lineno , "" );
38- strcpy (opt -> color_match , GIT_COLOR_BOLD_RED );
38+ strcpy (opt -> color_match_context , GIT_COLOR_BOLD_RED );
39+ strcpy (opt -> color_match_selected , GIT_COLOR_BOLD_RED );
3940 strcpy (opt -> color_selected , "" );
4041 strcpy (opt -> color_sep , GIT_COLOR_CYAN );
4142 opt -> color = -1 ;
@@ -101,12 +102,22 @@ int grep_config(const char *var, const char *value, void *cb)
101102 color = opt -> color_function ;
102103 else if (!strcmp (var , "color.grep.linenumber" ))
103104 color = opt -> color_lineno ;
104- else if (!strcmp (var , "color.grep.match" ))
105- color = opt -> color_match ;
105+ else if (!strcmp (var , "color.grep.matchcontext" ))
106+ color = opt -> color_match_context ;
107+ else if (!strcmp (var , "color.grep.matchselected" ))
108+ color = opt -> color_match_selected ;
106109 else if (!strcmp (var , "color.grep.selected" ))
107110 color = opt -> color_selected ;
108111 else if (!strcmp (var , "color.grep.separator" ))
109112 color = opt -> color_sep ;
113+ else if (!strcmp (var , "color.grep.match" )) {
114+ int rc = 0 ;
115+ if (!value )
116+ return config_error_nonbool (var );
117+ rc |= color_parse (value , opt -> color_match_context );
118+ rc |= color_parse (value , opt -> color_match_selected );
119+ return rc ;
120+ }
110121
111122 if (color ) {
112123 if (!value )
@@ -144,7 +155,8 @@ void grep_init(struct grep_opt *opt, const char *prefix)
144155 strcpy (opt -> color_filename , def -> color_filename );
145156 strcpy (opt -> color_function , def -> color_function );
146157 strcpy (opt -> color_lineno , def -> color_lineno );
147- strcpy (opt -> color_match , def -> color_match );
158+ strcpy (opt -> color_match_context , def -> color_match_context );
159+ strcpy (opt -> color_match_selected , def -> color_match_selected );
148160 strcpy (opt -> color_selected , def -> color_selected );
149161 strcpy (opt -> color_sep , def -> color_sep );
150162}
@@ -1084,7 +1096,7 @@ static void show_line(struct grep_opt *opt, char *bol, char *eol,
10841096 const char * name , unsigned lno , char sign )
10851097{
10861098 int rest = eol - bol ;
1087- char * line_color = NULL ;
1099+ const char * match_color , * line_color = NULL ;
10881100
10891101 if (opt -> file_break && opt -> last_shown == 0 ) {
10901102 if (opt -> show_hunk_mark )
@@ -1122,6 +1134,10 @@ static void show_line(struct grep_opt *opt, char *bol, char *eol,
11221134 int ch = * eol ;
11231135 int eflags = 0 ;
11241136
1137+ if (sign == ':' )
1138+ match_color = opt -> color_match_selected ;
1139+ else
1140+ match_color = opt -> color_match_context ;
11251141 if (sign == ':' )
11261142 line_color = opt -> color_selected ;
11271143 else if (sign == '-' )
@@ -1135,8 +1151,7 @@ static void show_line(struct grep_opt *opt, char *bol, char *eol,
11351151
11361152 output_color (opt , bol , match .rm_so , line_color );
11371153 output_color (opt , bol + match .rm_so ,
1138- match .rm_eo - match .rm_so ,
1139- opt -> color_match );
1154+ match .rm_eo - match .rm_so , match_color );
11401155 bol += match .rm_eo ;
11411156 rest -= match .rm_eo ;
11421157 eflags = REG_NOTBOL ;
0 commit comments