@@ -12,6 +12,9 @@ struct add_i_state {
1212 int use_color ;
1313 char header_color [COLOR_MAXLEN ];
1414 char help_color [COLOR_MAXLEN ];
15+ char prompt_color [COLOR_MAXLEN ];
16+ char error_color [COLOR_MAXLEN ];
17+ char reset_color [COLOR_MAXLEN ];
1518};
1619
1720static 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)
4548
4649 init_color (r , s , "header" , s -> header_color , GIT_COLOR_BOLD );
4750 init_color (r , s , "help" , s -> help_color , GIT_COLOR_BOLD_RED );
51+ init_color (r , s , "prompt" , s -> prompt_color , GIT_COLOR_BOLD_BLUE );
52+ init_color (r , s , "error" , s -> error_color , GIT_COLOR_BOLD_RED );
53+ init_color (r , s , "reset" , s -> reset_color , GIT_COLOR_RESET );
4854}
4955
5056/*
@@ -240,7 +246,8 @@ static ssize_t list_and_choose(struct add_i_state *s,
240246
241247 list (s , & items -> items , & opts -> list_opts );
242248
243- printf ("%s%s" , opts -> prompt , "> " );
249+ color_fprintf (stdout , s -> prompt_color , "%s" , opts -> prompt );
250+ fputs ("> " , stdout );
244251 fflush (stdout );
245252
246253 if (strbuf_getline (& input , stdin ) == EOF ) {
@@ -283,7 +290,8 @@ static ssize_t list_and_choose(struct add_i_state *s,
283290 index = find_unique (p , items );
284291
285292 if (index < 0 || index >= items -> items .nr )
286- printf (_ ("Huh (%s)?\n" ), p );
293+ color_fprintf_ln (stdout , s -> error_color ,
294+ _ ("Huh (%s)?" ), p );
287295 else {
288296 res = index ;
289297 break ;
@@ -509,18 +517,23 @@ struct command_item {
509517 command_t command ;
510518};
511519
520+ struct print_command_item_data {
521+ const char * color , * reset ;
522+ };
523+
512524static void print_command_item (int i , struct string_list_item * item ,
513525 void * print_command_item_data )
514526{
527+ struct print_command_item_data * d = print_command_item_data ;
515528 struct command_item * util = item -> util ;
516529
517530 if (!util -> prefix_length ||
518531 !is_valid_prefix (item -> string , util -> prefix_length ))
519532 printf (" %2d: %s" , i + 1 , item -> string );
520533 else
521- printf (" %2d: [% .*s] %s" , i + 1 ,
522- (int )util -> prefix_length , item -> string ,
523- item -> string + util -> prefix_length );
534+ printf (" %2d: %s% .*s%s %s" , i + 1 ,
535+ d -> color , (int )util -> prefix_length , item -> string ,
536+ d -> reset , item -> string + util -> prefix_length );
524537}
525538
526539static void command_prompt_help (struct add_i_state * s )
@@ -538,8 +551,9 @@ static void command_prompt_help(struct add_i_state *s)
538551int run_add_i (struct repository * r , const struct pathspec * ps )
539552{
540553 struct add_i_state s = { NULL };
554+ struct print_command_item_data data = { "[" , "]" };
541555 struct list_and_choose_options main_loop_opts = {
542- { 4 , N_ ("*** Commands ***" ), print_command_item , NULL },
556+ { 4 , N_ ("*** Commands ***" ), print_command_item , & data },
543557 N_ ("What now" ), command_prompt_help
544558 };
545559 struct {
@@ -570,6 +584,15 @@ int run_add_i(struct repository *r, const struct pathspec *ps)
570584
571585 init_add_i_state (& s , r );
572586
587+ /*
588+ * When color was asked for, use the prompt color for
589+ * highlighting, otherwise use square brackets.
590+ */
591+ if (s .use_color ) {
592+ data .color = s .prompt_color ;
593+ data .reset = s .reset_color ;
594+ }
595+
573596 strbuf_addstr (& header , " " );
574597 strbuf_addf (& header , print_file_item_data .modified_fmt ,
575598 _ ("staged" ), _ ("unstaged" ), _ ("path" ));
0 commit comments