Recently there was some talk of color for git-add--interactive, but the
person who said he already had a patch didn't produce it.
-Reads configuration from git-config (using a new key,
color.add-interactive), respects "auto" if called from a script
-Uses the library Term::ANSIColor, which is included with modern
versions of perl.
There is one problem--a block is commented out, because adding the
"--color" option to git-diff-files somehow breaks git-add--interactive,
and I would love some help from someone who knows a little more about
the rest of the script than I do. Also, this is the first perl I have
written, and criticism is welcome. A gzipped patch is attached, in case
thunderbird mangles the tabs. Feel free to replace the colors that I
chose with something that better conforms to the "git style", if there
is such a thing.
diff --git a/git-add--interactive.perl b/git-add--interactive.perl
index be68814..f55d787 100755
--- a/git-add--interactive.perl
+++ b/git-add--interactive.perl
@@ -2,6 +2,18 @@
use strict;
+my $use_color;
+my $color_config = qx(git config --get color.add-interactive);
+if ($color_config=~"true" || -t STDOUT && $color_config=~"auto") {
+ $use_color = "true";
+ require Term::ANSIColor;
+}
+sub print_ansi_color {
+ if ($use_color) {
+ print Term::ANSIColor::color($_[0]);
+ }
+}
+
sub run_cmd_pipe {
if ($^O eq 'MSWin32') {
my @invalid = grep {m/[":*]/} @_;
@@ -175,7 +187,9 @@ sub list_and_choose {
if (!$opts->{LIST_FLAT}) {
print " ";
}
+ print_ansi_color "bold";
print "$opts->{HEADER}\n";
+ print_ansi_color "clear";
}
for ($i = 0; $i < @stuff; $i++) {
my $chosen = $chosen[$i] ? '*' : ' ';
@@ -205,7 +219,9 @@ sub list_and_choose {
return if ($opts->{LIST_ONLY});
+ print_ansi_color "bold blue";
print $opts->{PROMPT};
+ print_ansi_color "reset";
if ($opts->{SINGLETON}) {
print "> ";
}
@@ -338,6 +354,16 @@ sub add_untracked_cmd {
sub parse_diff {
my ($path) = @_;
+ # FIXME: the following breaks git, and I'm not sure why. When
+ # the following is uncommented, git no longer asks whether we
+ # want to add given hunks.
+ #my @diff;
+ #if ($use_color) {
+ # #@diff = run_cmd_pipe(qw(git diff-files --color -p --), $path);
+ #}
+ #else {
+ # #@diff = run_cmd_pipe(qw(git diff-files -p --), $path);
+ #}
my @diff = run_cmd_pipe(qw(git diff-files -p --), $path);
my (@hunk) = { TEXT => [] };
@@ -544,6 +570,7 @@ sub coalesce_overlapping_hunks {
}
sub help_patch_cmd {
+ print_ansi_color "blue";
print <<\EOF ;
y - stage this hunk
n - do not stage this hunk
@@ -555,6 +582,7 @@ k - leave this hunk undecided, see previous
undecided hunk
K - leave this hunk undecided, see previous hunk
s - split the current hunk into smaller hunks
EOF
+ print_ansi_color "clear";
}
sub patch_update_cmd {
@@ -619,7 +647,9 @@ sub patch_update_cmd {
for (@{$hunk[$ix]{TEXT}}) {
print;
}
+ print_ansi_color "bold";
print "Stage this hunk [y/n/a/d$other/?]? ";
+ print_ansi_color "reset";
my $line = <STDIN>;
if ($line) {
if ($line =~ /^y/i) {
--
1.5.3.4.207.gc0ee
Dan Zwell| monstr | [PATCH 26/60] microblaze_v4: time support |
| Jon Smirl | Re: 463 kernel developers missing! |
| Andrew Morton | Re: x86: 4kstacks default |
| Greg KH | [GIT PATCH] driver core patches against 2.6.24 |
git: | |
| Gerrit Renker | [PATCH 15/37] dccp: Set per-connection CCIDs via socket options |
| Jarek Poplawski | [PATCH] pkt_sched: Destroy gen estimators under rtnl_lock(). |
| David Miller | Re: [GIT]: Networking |
| Jiri Olsa | [PATCHv5 0/2] net: fix race in the receive/select |
