El 14/10/2007, a las 10:44, Tom Tobin escribió:
After banging my head against parsing colorized output of git-add-
files,
I gave up and implemented internal colorization keying off of the
color.diff configuration.
Great!
+sub parse_color {
You could simplify the manual escape sequence construction that
you're doing here by using Term::ANSIColor like the other patches
did. I see that git-send-email.perl uses that module too, so I guess
depending on that module is ok.
I also wonder whether the config code should be using the git.pm
module like git-send-email.perl and a couple others do (although it
would be slower than slurping in all the config in one shot like you
do; perhaps there's justification for a new function in git.pm that
wraps git-config --get-regexp...).
+sub colorize_head_line {
+ my $line = shift @_;
+ if ($use_color) {
+ # git doesn't colorize these by default, soooo
+ # if ($line =~ /^\+/) {
+ # return parse_color($colorconfig{'color.diff.new'}) . "$line\e
[m";
+ # }
+ # if ($line =~ /^-/) {
+ # return parse_color($colorconfig{'color.diff.old'}) . "$line\e
[m";
+ # }
+ return parse_color($colorconfig{'color.diff.meta'}) . "$line\e[m";
+ }
+ return $line;
+}
+
+sub colorize_hunk_line {
+ my $line = shift @_;
+ if ($use_color) {
+ if ($line =~ /^\+/) {
+ return parse_color($colorconfig{'color.diff.new'}) . "$line\e[m";
+ }
+ if ($line =~ /^-/) {
+ return parse_color($colorconfig{'color.diff.old'}) . "$line\e[m";
+ }
+ if ($line =~ /^@@ /) {
+ return parse_color($colorconfig{'color.diff.frag'}) . "$line\e[m";
+ }
+ }
+ return $line;
+}
This is a good start but to completely match the colorized output
produced by diff it will need some additional logic; for example,
highlighting spurious whitespace. Search for
need_highlight_leading_space in diff.c and you'll see that the test
is basically for any space which precedes a tab in the leading
whitespace on newly inserted lines. In this case the spaces are
highlighted using the whitespace color (normally red background).
I don't know when color.diff.commit is ever used in diff output, but
perhaps that would need to be handled as well.
Cheers,
Wincent
-
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