=46rom 29b34bb32846921c9432bf1b74c93d06a0667a44 Mon Sep 17 00:00:00 2001
From: Dan Zwell <dzwell@zwell.net>
Date: Mon, 22 Oct 2007 15:55:20 -0500
Subject: [PATCH] Added basic color support to git add --interactive
Added function "print_colored" that prints text with a color that
is passed in. Converted many calls to "print" to being calls to
"print_colored".
The prompt, the header, and the help output are the 3 types of
colorized output, and each has its own color.
Colorization is done through Term::ANSIColor, which is included
with modern versions of perl. This is optional, and should not
need to be present if color.interactive is not turned on.
Signed-off-by: Dan Zwell <dzwell@zwell.net>
---
I believe this version takes care of the complaints people had
with this patch. I hope this is helpful.
Documentation/config.txt | 6 ++++++
git-add--interactive.perl | 42 ++++++++++++++++++++++++++++++++++++------
2 files changed, 42 insertions(+), 6 deletions(-)
diff --git a/Documentation/config.txt b/Documentation/config.txt
index edf50cd..2fd783f 100644
--- a/Documentation/config.txt
+++ b/Documentation/config.txt
@@ -382,6 +382,12 @@ color.diff.<slot>::
whitespace). The values of these variables may be specified as
in color.branch.<slot>.
=20
+color.interactive::
+ When true (or `always`), always use colors in `git add
+ --interactive`. When false (or `never`), never. When set to
+ `auto`, use colors only when the output is to the
+ terminal. Defaults to false.
+
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 ac598f8..16dc7b0 100755
--- a/git-add--interactive.perl
+++ b/git-add--interactive.perl
@@ -2,6 +2,36 @@
=20
use strict;
=20
+my ($use_color, $prompt_color, $header_color, $help_color, $normal_color);
+my $color_config =3D qx(git config --get color.interactive);
+if ($color_config=3D~/true|always/ || -t STDOUT && $color_config=3D~/auto/=
) {
+ require Term::ANSIColor;
+
+ $use_color =3D "true";
+ # Sane (visible) defaults:
+ $prompt_color =3D Term::ANSIColor::color("blue bold");
+ $header_color =3D Term::ANSIColor::color("bold");
+ $help_color =3D Term::ANSIColor::color("red bold");
+ $normal_color =3D Term::ANSIColor::color("reset");
+}
+
+sub print_colored {
+ my $color =3D shift;
+ my $string =3D join("", @_);
+
+ if ($use_color) {
+ # Put a color code at the beginning of each line, a reset at the end
+ # color after newlines that are not at the end of the string
+ $string =3D~ s/(\n+)(.)/$1$color$2/g;
+ # reset before newlines
+ $string =3D~ s/(\n+)/$normal_color$1/g;
+ # codes at beginning and end (if necessary):
+ $string =3D~ s/^/$color/;
+ $string =3D~ s/$/$normal_color/ unless $string =3D~ /\n$/;
+ }
+ print $string;
+}
+
sub run_cmd_pipe {
if ($^O eq 'MSWin32') {
my @invalid =3D grep {m/[":*]/} @_;
@@ -175,7 +205,7 @@ sub list_and_choose {
if (!$opts->{LIST_FLAT}) {
print " ";
}
- print "$opts->{HEADER}\n";
+ print_colored $header_color, "$opts->{HEADER}\n";
}
for ($i =3D 0; $i < @stuff; $i++) {
my $chosen =3D $chosen[$i] ? '*' : ' ';
@@ -205,7 +235,7 @@ sub list_and_choose {
=20
return if ($opts->{LIST_ONLY});
=20
- print $opts->{PROMPT};
+ print_colored $prompt_color, $opts->{PROMPT};
if ($opts->{SINGLETON}) {
print "> ";
}
@@ -544,7 +574,7 @@ sub coalesce_overlapping_hunks {
}
=20
sub help_patch_cmd {
- print <<\EOF ;
+ print_colored $help_color, <<\EOF ;
y - stage this hunk
n - do not stage this hunk
a - stage this and all the remaining hunks
@@ -619,7 +649,7 @@ sub patch_update_cmd {
for (@{$hunk[$ix]{TEXT}}) {
print;
}
- print "Stage this hunk [y/n/a/d$other/?]? ";
+ print_colored $prompt_color, "Stage this hunk [y/n/a/d$other/?]? ";
my $line =3D <STDIN>;
if ($line) {
if ($line =3D~ /^y/i) {
@@ -673,7 +703,7 @@ sub patch_update_cmd {
elsif ($other =3D~ /s/ && $line =3D~ /^s/) {
my @split =3D split_hunk($hunk[$ix]{TEXT});
if (1 < @split) {
- print "Split into ",
+ print_colored $header_color, "Split into ",
scalar(@split), " hunks.\n";
}
splice(@hunk, $ix, 1,
@@ -766,7 +796,7 @@ sub quit_cmd {
}
=20
sub help_cmd {
- print <<\EOF ;
+ print_colored $help_color, <<\EOF ;
status - show paths with changes
update - add working tree state to the staged set of changes
revert - revert staged set of changes back to the HEAD version
--=20
1.5.3.5.474.g3e4bb
| Linus Torvalds | Linux 2.6.27-rc5 |
| Linus Torvalds | Linux 2.6.27-rc8 |
| Tomasz Kłoczko | Is it time for remove (crap) ALSA from kernel tree ? |
| Linus Torvalds | Linux v2.6.27-rc1 |
git: | |
| Pierre Habouzit | git push (mis ?)behavior |
| Linus Torvalds | Re: Something is broken in repack |
| Michael J Gruber | gitignore: negating path patterns |
| Steven Grimm | StGIT vs. guilt: What's the difference? |
| Markus Wernig | host to host ipsec link |
| Richard Stallman | Re: Real men don't attack straw men |
| Kevin Neff | Patching a SSH 'Weakness' |
| Jeffrey 'jf' Lim | "VIA Announces Strategic Open Source Driver Development Initiative" |
| Denys Fedoryshchenko | panic 2.6.27-rc3-git2, qdisc_dequeue_head |
| Evgeniy Polyakov | [resend take 2 4/4] DST Makefile/Kconfig files. |
| Volker Armin Hemmann | build error with 2.6.27.6+reiser4+ehci-hub patch. ERROR: "mii_ethtool_gset" [drive... |
| Arkadiusz Miskiewicz | htb and UDP packages bigger than 1500 |
| USB statistics | 54 minutes ago | Linux kernel |
| Block Sub System query | 5 hours ago | Linux kernel |
| kernel module to intercept socket creation | 6 hours ago | Linux kernel |
| Image size changing during each build | 6 hours ago | Linux kernel |
| Soft lock bug | 11 hours ago | Linux kernel |
| sysctl - dynamic registration problem | 17 hours ago | Linux kernel |
| Question on swap as ramdisk partition | 19 hours ago | Linux kernel |
| serial driver xmit problem | 1 day ago | Linux kernel |
| Generic Netlink subsytem | 1 day ago | Linux kernel |
| 'Report spam filter error' page broken | 1 day ago | KernelTrap Suggestions and Feedback |
