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 Đukić <slawica92@hotmail.com> Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:

committed by
Junio C Hamano

parent
68db1cbf8e
commit
3d965c7674
@ -12,6 +12,9 @@ struct add_i_state {
|
|||||||
int use_color;
|
int use_color;
|
||||||
char header_color[COLOR_MAXLEN];
|
char header_color[COLOR_MAXLEN];
|
||||||
char help_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,
|
static void init_color(struct repository *r, struct add_i_state *s,
|
||||||
@ -45,6 +48,9 @@ static void init_add_i_state(struct add_i_state *s, struct repository *r)
|
|||||||
|
|
||||||
init_color(r, s, "header", s->header_color, GIT_COLOR_BOLD);
|
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, "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);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -240,7 +246,8 @@ static ssize_t list_and_choose(struct add_i_state *s,
|
|||||||
|
|
||||||
list(s, &items->items, &opts->list_opts);
|
list(s, &items->items, &opts->list_opts);
|
||||||
|
|
||||||
printf("%s%s", opts->prompt, "> ");
|
color_fprintf(stdout, s->prompt_color, "%s", opts->prompt);
|
||||||
|
fputs("> ", stdout);
|
||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
|
|
||||||
if (strbuf_getline(&input, stdin) == EOF) {
|
if (strbuf_getline(&input, stdin) == EOF) {
|
||||||
@ -283,7 +290,8 @@ static ssize_t list_and_choose(struct add_i_state *s,
|
|||||||
index = find_unique(p, items);
|
index = find_unique(p, items);
|
||||||
|
|
||||||
if (index < 0 || index >= items->items.nr)
|
if (index < 0 || index >= items->items.nr)
|
||||||
printf(_("Huh (%s)?\n"), p);
|
color_fprintf_ln(stdout, s->error_color,
|
||||||
|
_("Huh (%s)?"), p);
|
||||||
else {
|
else {
|
||||||
res = index;
|
res = index;
|
||||||
break;
|
break;
|
||||||
@ -509,18 +517,23 @@ struct command_item {
|
|||||||
command_t command;
|
command_t command;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct print_command_item_data {
|
||||||
|
const char *color, *reset;
|
||||||
|
};
|
||||||
|
|
||||||
static void print_command_item(int i, struct string_list_item *item,
|
static void print_command_item(int i, struct string_list_item *item,
|
||||||
void *print_command_item_data)
|
void *print_command_item_data)
|
||||||
{
|
{
|
||||||
|
struct print_command_item_data *d = print_command_item_data;
|
||||||
struct command_item *util = item->util;
|
struct command_item *util = item->util;
|
||||||
|
|
||||||
if (!util->prefix_length ||
|
if (!util->prefix_length ||
|
||||||
!is_valid_prefix(item->string, util->prefix_length))
|
!is_valid_prefix(item->string, util->prefix_length))
|
||||||
printf(" %2d: %s", i + 1, item->string);
|
printf(" %2d: %s", i + 1, item->string);
|
||||||
else
|
else
|
||||||
printf(" %2d: [%.*s]%s", i + 1,
|
printf(" %2d: %s%.*s%s%s", i + 1,
|
||||||
(int)util->prefix_length, item->string,
|
d->color, (int)util->prefix_length, item->string,
|
||||||
item->string + util->prefix_length);
|
d->reset, item->string + util->prefix_length);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void command_prompt_help(struct add_i_state *s)
|
static void command_prompt_help(struct add_i_state *s)
|
||||||
@ -538,8 +551,9 @@ static void command_prompt_help(struct add_i_state *s)
|
|||||||
int run_add_i(struct repository *r, const struct pathspec *ps)
|
int run_add_i(struct repository *r, const struct pathspec *ps)
|
||||||
{
|
{
|
||||||
struct add_i_state s = { NULL };
|
struct add_i_state s = { NULL };
|
||||||
|
struct print_command_item_data data = { "[", "]" };
|
||||||
struct list_and_choose_options main_loop_opts = {
|
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
|
N_("What now"), command_prompt_help
|
||||||
};
|
};
|
||||||
struct {
|
struct {
|
||||||
@ -570,6 +584,15 @@ int run_add_i(struct repository *r, const struct pathspec *ps)
|
|||||||
|
|
||||||
init_add_i_state(&s, r);
|
init_add_i_state(&s, r);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 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;
|
||||||
|
}
|
||||||
|
|
||||||
strbuf_addstr(&header, " ");
|
strbuf_addstr(&header, " ");
|
||||||
strbuf_addf(&header, print_file_item_data.modified_fmt,
|
strbuf_addf(&header, print_file_item_data.modified_fmt,
|
||||||
_("staged"), _("unstaged"), _("path"));
|
_("staged"), _("unstaged"), _("path"));
|
||||||
|
Reference in New Issue
Block a user