зеркало из https://github.com/microsoft/git.git
grep: Colorize selected, context, and function lines
Colorize non-matching text of selected lines, context lines, and function name lines. The default for all three is no color, but they can be configured using color.grep.<slot>. The first two are similar to the corresponding options in GNU grep, except that GNU grep applies the color to the entire line, not just non-matching text. Signed-off-by: Mark Lodato <lodatom@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Родитель
55f638bdc6
Коммит
00588bb5cd
|
@ -688,12 +688,18 @@ color.grep.<slot>::
|
|||
part of the line to use the specified color, and is one of
|
||||
+
|
||||
--
|
||||
`context`;;
|
||||
non-matching text in context lines (when using `-A`, `-B`, or `-C`)
|
||||
`filename`;;
|
||||
filename prefix (when not using `-h`)
|
||||
`function`;;
|
||||
function name lines (when using `-p`)
|
||||
`linenumber`;;
|
||||
line number prefix (when using `-n`)
|
||||
`match`;;
|
||||
matching text
|
||||
`selected`;;
|
||||
non-matching text in selected lines
|
||||
`separator`;;
|
||||
separators between fields on a line (`:`, `-`, and `=`)
|
||||
and between hunks (`--`)
|
||||
|
|
|
@ -299,12 +299,18 @@ static int grep_config(const char *var, const char *value, void *cb)
|
|||
|
||||
if (!strcmp(var, "color.grep"))
|
||||
opt->color = git_config_colorbool(var, value, -1);
|
||||
else if (!strcmp(var, "color.grep.context"))
|
||||
color = opt->color_context;
|
||||
else if (!strcmp(var, "color.grep.filename"))
|
||||
color = opt->color_filename;
|
||||
else if (!strcmp(var, "color.grep.function"))
|
||||
color = opt->color_function;
|
||||
else if (!strcmp(var, "color.grep.linenumber"))
|
||||
color = opt->color_lineno;
|
||||
else if (!strcmp(var, "color.grep.match"))
|
||||
color = opt->color_match;
|
||||
else if (!strcmp(var, "color.grep.selected"))
|
||||
color = opt->color_selected;
|
||||
else if (!strcmp(var, "color.grep.separator"))
|
||||
color = opt->color_sep;
|
||||
else
|
||||
|
@ -879,9 +885,12 @@ int cmd_grep(int argc, const char **argv, const char *prefix)
|
|||
opt.regflags = REG_NEWLINE;
|
||||
opt.max_depth = -1;
|
||||
|
||||
strcpy(opt.color_context, "");
|
||||
strcpy(opt.color_filename, "");
|
||||
strcpy(opt.color_function, "");
|
||||
strcpy(opt.color_lineno, "");
|
||||
strcpy(opt.color_match, GIT_COLOR_BOLD_RED);
|
||||
strcpy(opt.color_selected, "");
|
||||
strcpy(opt.color_sep, GIT_COLOR_CYAN);
|
||||
opt.color = -1;
|
||||
git_config(grep_config, &opt);
|
||||
|
|
11
grep.c
11
grep.c
|
@ -529,6 +529,7 @@ static void show_line(struct grep_opt *opt, char *bol, char *eol,
|
|||
const char *name, unsigned lno, char sign)
|
||||
{
|
||||
int rest = eol - bol;
|
||||
char *line_color = NULL;
|
||||
|
||||
if (opt->pre_context || opt->post_context) {
|
||||
if (opt->last_shown == 0) {
|
||||
|
@ -560,12 +561,18 @@ static void show_line(struct grep_opt *opt, char *bol, char *eol,
|
|||
int ch = *eol;
|
||||
int eflags = 0;
|
||||
|
||||
if (sign == ':')
|
||||
line_color = opt->color_selected;
|
||||
else if (sign == '-')
|
||||
line_color = opt->color_context;
|
||||
else if (sign == '=')
|
||||
line_color = opt->color_function;
|
||||
*eol = '\0';
|
||||
while (next_match(opt, bol, eol, ctx, &match, eflags)) {
|
||||
if (match.rm_so == match.rm_eo)
|
||||
break;
|
||||
|
||||
opt->output(opt, bol, match.rm_so);
|
||||
output_color(opt, bol, match.rm_so, line_color);
|
||||
output_color(opt, bol + match.rm_so,
|
||||
match.rm_eo - match.rm_so,
|
||||
opt->color_match);
|
||||
|
@ -575,7 +582,7 @@ static void show_line(struct grep_opt *opt, char *bol, char *eol,
|
|||
}
|
||||
*eol = ch;
|
||||
}
|
||||
opt->output(opt, bol, rest);
|
||||
output_color(opt, bol, rest, line_color);
|
||||
opt->output(opt, "\n", 1);
|
||||
}
|
||||
|
||||
|
|
3
grep.h
3
grep.h
|
@ -84,9 +84,12 @@ struct grep_opt {
|
|||
int color;
|
||||
int max_depth;
|
||||
int funcname;
|
||||
char color_context[COLOR_MAXLEN];
|
||||
char color_filename[COLOR_MAXLEN];
|
||||
char color_function[COLOR_MAXLEN];
|
||||
char color_lineno[COLOR_MAXLEN];
|
||||
char color_match[COLOR_MAXLEN];
|
||||
char color_selected[COLOR_MAXLEN];
|
||||
char color_sep[COLOR_MAXLEN];
|
||||
int regflags;
|
||||
unsigned pre_context;
|
||||
|
|
Загрузка…
Ссылка в новой задаче