mirror of
https://github.com/git-for-windows/git.git
synced 2026-03-22 15:12:00 -05:00
built-in add -i: use color in the main loop
The error messages as well as the unique prefixes are colored in `git add -i` by default; We need to do the same in the built-in version. Signed-off-by: Slavica Djukic <slawica92@hotmail.com> Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
This commit is contained in:
committed by
Johannes Schindelin
parent
112e56778a
commit
39fe35d631
@@ -12,6 +12,9 @@ struct add_i_state {
|
||||
int use_color;
|
||||
char header_color[COLOR_MAXLEN];
|
||||
char help_color[COLOR_MAXLEN];
|
||||
char prompt_color[COLOR_MAXLEN];
|
||||
char error_color[COLOR_MAXLEN];
|
||||
char reset_color[COLOR_MAXLEN];
|
||||
};
|
||||
|
||||
static void init_color(struct repository *r, struct add_i_state *s,
|
||||
@@ -45,6 +48,9 @@ static int init_add_i_state(struct repository *r, struct add_i_state *s)
|
||||
|
||||
init_color(r, s, "header", s->header_color, GIT_COLOR_BOLD);
|
||||
init_color(r, s, "help", s->help_color, GIT_COLOR_BOLD_RED);
|
||||
init_color(r, s, "prompt", s->prompt_color, GIT_COLOR_BOLD_BLUE);
|
||||
init_color(r, s, "error", s->error_color, GIT_COLOR_BOLD_RED);
|
||||
init_color(r, s, "reset", s->reset_color, GIT_COLOR_RESET);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -134,7 +140,8 @@ static ssize_t list_and_choose(struct prefix_item **items, size_t nr,
|
||||
|
||||
list(items, nr, s, &opts->list_opts);
|
||||
|
||||
printf("%s%s", opts->prompt, "> ");
|
||||
color_fprintf(stdout, s->prompt_color, "%s", opts->prompt);
|
||||
fputs("> ", stdout);
|
||||
fflush(stdout);
|
||||
|
||||
if (strbuf_getline(&input, stdin) == EOF) {
|
||||
@@ -175,7 +182,8 @@ static ssize_t list_and_choose(struct prefix_item **items, size_t nr,
|
||||
index = find_unique(p, items, nr);
|
||||
|
||||
if (index < 0 || index >= nr)
|
||||
printf(_("Huh (%s)?\n"), p);
|
||||
color_fprintf_ln(stdout, s->error_color,
|
||||
_("Huh (%s)?"), p);
|
||||
else {
|
||||
res = index;
|
||||
break;
|
||||
@@ -420,15 +428,21 @@ static int run_status(struct add_i_state *s, const struct pathspec *ps,
|
||||
return 0;
|
||||
}
|
||||
|
||||
struct print_command_item_data {
|
||||
const char *color, *reset;
|
||||
};
|
||||
|
||||
static void print_command_item(int i, struct prefix_item *item,
|
||||
void *print_command_item_data)
|
||||
{
|
||||
struct print_command_item_data *d = print_command_item_data;
|
||||
|
||||
if (!item->prefix_length ||
|
||||
!is_valid_prefix(item->name, item->prefix_length))
|
||||
printf(" %2d: %s", i + 1, item->name);
|
||||
else
|
||||
printf(" %3d: [%.*s]%s", i + 1,
|
||||
(int)item->prefix_length, item->name,
|
||||
printf(" %2d: %s%.*s%s%s", i + 1,
|
||||
d->color, (int)item->prefix_length, item->name, d->reset,
|
||||
item->name + item->prefix_length);
|
||||
}
|
||||
|
||||
@@ -453,8 +467,9 @@ static void command_prompt_help(struct add_i_state *s)
|
||||
int run_add_i(struct repository *r, const struct pathspec *ps)
|
||||
{
|
||||
struct add_i_state s = { NULL };
|
||||
struct print_command_item_data data;
|
||||
struct list_and_choose_options main_loop_opts = {
|
||||
{ 4, N_("*** Commands ***"), print_command_item, NULL },
|
||||
{ 4, N_("*** Commands ***"), print_command_item, &data },
|
||||
N_("What now"), command_prompt_help
|
||||
};
|
||||
struct command_item
|
||||
@@ -477,6 +492,18 @@ int run_add_i(struct repository *r, const struct pathspec *ps)
|
||||
if (init_add_i_state(r, &s))
|
||||
return error("could not parse `add -i` config");
|
||||
|
||||
/*
|
||||
* When color was asked for, use the prompt color for
|
||||
* highlighting, otherwise use square brackets.
|
||||
*/
|
||||
if (s.use_color) {
|
||||
data.color = s.prompt_color;
|
||||
data.reset = s.reset_color;
|
||||
} else {
|
||||
data.color = "[";
|
||||
data.reset = "]";
|
||||
}
|
||||
|
||||
strbuf_addstr(&header, " ");
|
||||
strbuf_addf(&header, print_file_item_data.modified_fmt,
|
||||
_("staged"), _("unstaged"), _("path"));
|
||||
|
||||
Reference in New Issue
Block a user