Colors are specified in color.interactive.{prompt,header,help}. They are specified as git color strings as described in the documentation, then parsed into perl color strings (slightly different). Ugly but visible defaults are still used. Signed-off-by: Dan Zwell <dzwell@xxxxxxxxx> --- Note: the code to parse git-style color strings to perl-style color strings should eventually be added to Git.pm so that other (perl) parts of git can be configured to read colors from .gitconfig in a nicer way. A git-style string is "ul red black", while perl likes strings like "underline red on_black". Documentation/config.txt | 7 ++++ git-add--interactive.perl | 76 ++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 79 insertions(+), 4 deletions(-) diff --git a/Documentation/config.txt b/Documentation/config.txt index c795a35..75a976a 100644 --- a/Documentation/config.txt +++ b/Documentation/config.txt @@ -387,6 +387,13 @@ color.interactive:: `auto`, use colors only when the output is to the terminal. Defaults to false. +color.interactive.<slot>:: + Use customized color for `git add --interactive` + output. `<slot>` may be `prompt`, `header`, or `help`, for + three distinct types of normal output from interactive + programs. The values of these variables may be specified as + in color.branch.<slot>. + color.pager:: A boolean to enable/disable colored output when the pager is in use (default is true). diff --git a/git-add--interactive.perl b/git-add--interactive.perl index c66ed4d..d85ec92 100755 --- a/git-add--interactive.perl +++ b/git-add--interactive.perl @@ -6,10 +6,78 @@ my ($use_color, $prompt_color, $header_color, $help_color); my $color_config = qx(git config --get color.interactive); if ($color_config=~/true|always/ || -t STDOUT && $color_config=~/auto/) { $use_color = "true"; - # Sane (visible) defaults: - $prompt_color = "blue bold"; - $header_color = "bold"; - $help_color = "red bold"; + # Grab the 3 main colors in git color string format: + my @git_prompt_color = + split(/\s+/, qx(git config --get color.interactive.prompt)); + my @git_header_color = + split(/\s+/, qx(git config --get color.interactive.header)); + my @git_help_color = + split(/\s+/, qx(git config --get color.interactive.help)); + + # Sane (visible) defaults: + if (! @git_prompt_color) { + @git_prompt_color = ("blue", "bold"); + } + if (! @git_header_color) { + @git_header_color = ("bold"); + } + if (! @git_help_color) { + @git_help_color = ("red", "bold"); + } + + # Parse the git colors into perl colors: + my %attrib_mappings = ( + "bold" => "bold", + "ul" => "underline", + "blink" => "blink", + # not supported: + #"dim" => "", + "reverse" => "reverse" + ); + + my @tmp_perl_colors; + my $color_list; + # Loop over the array of (arrays of) git-style colors + foreach $color_list ([@git_prompt_color], [@git_header_color], + [@git_help_color]) { + my $fg_done; + my @perl_attribs; + my $word; + foreach $word (@{$color_list}) { + if ($word =~ /normal/) { + $fg_done = "true"; + } + elsif ($word =~ /black|red|green|yellow/ || + $word =~ /blue|magenta|cyan|white/) { + # is a color. + if ($fg_done) { + # this is the background + push @perl_attribs, "on_" . $word; + } + else { + # this is foreground + $fg_done = "true"; + push @perl_attribs, $word; + } + } + else { + # this is an attribute, not a color. + if ($attrib_mappings{$word}) { + push(@perl_attribs, + $attrib_mappings{$word}); + } + } + } + if (@perl_attribs) { + push @tmp_perl_colors, join(" ", @perl_attribs); + } + else { + #@perl_attribs is empty, need a placeholder + push @tmp_perl_colors, "reset"; + } + } + ($prompt_color, $header_color, $help_color) = + @tmp_perl_colors; require Term::ANSIColor; } -- 1.5.3.4.207.gc0ee - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html