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> --- This patch is againts Shawn Pearce's "pu" branch. Documentation/config.txt | 17 ++------- git-add--interactive.perl | 78 +++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 76 insertions(+), 19 deletions(-) diff --git a/Documentation/config.txt b/Documentation/config.txt index 99b3817..d06f55f 100644 --- a/Documentation/config.txt +++ b/Documentation/config.txt @@ -390,19 +390,10 @@ color.interactive:: color.interactive.<slot>:: Use customized color for `git add --interactive` - output. `<slot>` may be `prompt`, `header`, or `help`, - for three distinct types of common output from interactive - programs. The values may be a space-delimited combination - of up to three of the following: -+ -(optional attribute, optional foreground color, and optional background) -+ -dark, bold, underline, underscore, blink, reverse, concealed, -black, red, green, yellow, blue, magenta, cyan, white, on_black, -on_red, on_green, on_yellow, on_blue, on_magenta, on_cyan, on_white -+ -Note these are not the same colors/attributes that the rest of -git supports, but are specific to `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 diff --git a/git-add--interactive.perl b/git-add--interactive.perl index 37be4b0..ca1ca28 100755 --- a/git-add--interactive.perl +++ b/git-add--interactive.perl @@ -6,12 +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"; - chomp( $prompt_color = qx(git config --get color.interactive.prompt) ); - chomp( $header_color = qx(git config --get color.interactive.header) ); - chomp( $help_color = qx(git config --get color.interactive.help) ); - $prompt_color ||= "red bold"; - $header_color ||= "bold"; - $help_color ||= "blue 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