@@ -12,6 +12,9 @@ struct add_i_state {
12
12
int use_color ;
13
13
char header_color [COLOR_MAXLEN ];
14
14
char help_color [COLOR_MAXLEN ];
15
+ char prompt_color [COLOR_MAXLEN ];
16
+ char error_color [COLOR_MAXLEN ];
17
+ char reset_color [COLOR_MAXLEN ];
15
18
};
16
19
17
20
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)
45
48
46
49
init_color (r , s , "header" , s -> header_color , GIT_COLOR_BOLD );
47
50
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 );
48
54
49
55
return 0 ;
50
56
}
@@ -134,7 +140,8 @@ static ssize_t list_and_choose(struct prefix_item **items, size_t nr,
134
140
135
141
list (items , nr , s , & opts -> list_opts );
136
142
137
- printf ("%s%s" , opts -> prompt , "> " );
143
+ color_fprintf (stdout , s -> prompt_color , "%s" , opts -> prompt );
144
+ fputs ("> " , stdout );
138
145
fflush (stdout );
139
146
140
147
if (strbuf_getline (& input , stdin ) == EOF ) {
@@ -175,7 +182,8 @@ static ssize_t list_and_choose(struct prefix_item **items, size_t nr,
175
182
index = find_unique (p , items , nr );
176
183
177
184
if (index < 0 || index >= nr )
178
- printf (_ ("Huh (%s)?\n" ), p );
185
+ color_fprintf_ln (stdout , s -> error_color ,
186
+ _ ("Huh (%s)?" ), p );
179
187
else {
180
188
res = index ;
181
189
break ;
@@ -421,15 +429,21 @@ static int run_status(struct add_i_state *s, const struct pathspec *ps,
421
429
return 0 ;
422
430
}
423
431
432
+ struct print_command_item_data {
433
+ const char * color , * reset ;
434
+ };
435
+
424
436
static void print_command_item (int i , struct prefix_item * item ,
425
437
void * print_command_item_data )
426
438
{
439
+ struct print_command_item_data * d = print_command_item_data ;
440
+
427
441
if (!item -> prefix_length ||
428
442
!is_valid_prefix (item -> name , item -> prefix_length ))
429
443
printf (" %2d: %s" , i + 1 , item -> name );
430
444
else
431
- printf (" %3d: [% .*s] %s" , i + 1 ,
432
- (int )item -> prefix_length , item -> name ,
445
+ printf (" %2d: %s% .*s%s %s" , i + 1 ,
446
+ d -> color , (int )item -> prefix_length , item -> name , d -> reset ,
433
447
item -> name + item -> prefix_length );
434
448
}
435
449
@@ -454,8 +468,9 @@ static void command_prompt_help(struct add_i_state *s)
454
468
int run_add_i (struct repository * r , const struct pathspec * ps )
455
469
{
456
470
struct add_i_state s = { NULL };
471
+ struct print_command_item_data data ;
457
472
struct list_and_choose_options main_loop_opts = {
458
- { 4 , N_ ("*** Commands ***" ), print_command_item , NULL },
473
+ { 4 , N_ ("*** Commands ***" ), print_command_item , & data },
459
474
N_ ("What now" ), command_prompt_help
460
475
};
461
476
struct command_item
@@ -478,6 +493,18 @@ int run_add_i(struct repository *r, const struct pathspec *ps)
478
493
if (init_add_i_state (r , & s ))
479
494
return error ("could not parse `add -i` config" );
480
495
496
+ /*
497
+ * When color was asked for, use the prompt color for
498
+ * highlighting, otherwise use square brackets.
499
+ */
500
+ if (s .use_color ) {
501
+ data .color = s .prompt_color ;
502
+ data .reset = s .reset_color ;
503
+ } else {
504
+ data .color = "[" ;
505
+ data .reset = "]" ;
506
+ }
507
+
481
508
strbuf_addstr (& header , " " );
482
509
strbuf_addf (& header , print_file_item_data .modified_fmt ,
483
510
_ ("staged" ), _ ("unstaged" ), _ ("path" ));
0 commit comments