git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: Jeff King <peff@peff.net>
To: Dan Zwell <dzwell@gmail.com>
Cc: Git Mailing List <git@vger.kernel.org>,
	Jonathan del Strother <maillist@steelskies.com>,
	"Johannes Schindelin <Johannes.Schindelin@gmx.de>Wincent
	Colaiuta"  <win@wincent.com>
Subject: Re: [PATCH] Color support added to git-add--interactive.
Date: Sat, 13 Oct 2007 04:12:06 -0400	[thread overview]
Message-ID: <20071013081205.GB27533@coredump.intra.peff.net> (raw)
In-Reply-To: <471045DA.5050902@gmail.com>

On Fri, Oct 12, 2007 at 11:13:14PM -0500, Dan Zwell wrote:

> 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.

Neat, thanks for working on this.

> 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 

I believe it's because add--interactive parses the output of
git-diff-files, so it expects unadorned diffs. I think you may be stuck
re-coloring the diffs yourself, which is a little ugly.

> 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.

Two suggestions:
  - every color should be configurable (e.g., see diff color options)
  - where possible, use existing color config (e.g., for diffs)

You will never come up with a color scheme that satisfies everyone
(e.g., white text on black background versus black text on white
background), so configurability is a good idea (not to mention that
nobody will ever agree on what looks "good").

> +if ($color_config=~"true" || -t STDOUT && $color_config=~"auto") {

Shouldn't these just be 'eq' instead of a regex?

> +			print_ansi_color "bold";
>  			print "$opts->{HEADER}\n";
> +			print_ansi_color "clear";

ISTR some terminals had issues with leaving ANSI attributes set across a
newline. That was the reason for the color_fprintf_ln business in
color.[ch]. You might replace this with something like:

  print_color_ln 'bold', $opts->{HEADER};

where "print_color_ln" turns off the attribute before the newline.

> +	# 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);

See how we are pulling the diff into lines? Look a few lines below and
you will see that we start parsing without regard to the color.

Unfortunately, that parsed form ends up being output to the user, so we
will have to do colorization at that point (fortunately, diff
colorization with regexes isn't _that_ hard).

> +	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";

Hrm, splitting this with print_color_ln as I mentioned above would be a
little painful. Maybe something like this (totally untested):

# Turn on ansi attributes at the beginning of the string and at
# the beginning of each line, but then turn them off before each
# newline. This should give the effect of covering the whole string
# with the attribute, but not have attributes cross newline boundaries.
sub color_print {
  my $attr = shift;
  local $_ = shift;
  if ($use_color) {
    s/^/Term::ANSIColor::color($attr)/mge;
    s/\n/Term::ANSIColor::color('reset') . $&/ge;
  }
  print $_;
}

-Peff

  reply	other threads:[~2007-10-13  8:12 UTC|newest]

Thread overview: 86+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-10-13  4:13 [PATCH] Color support added to git-add--interactive Dan Zwell
2007-10-13  8:12 ` Jeff King [this message]
2007-10-13 12:49   ` Frank Lichtenheld
2007-10-13 12:25 ` Johannes Schindelin
2007-10-13 14:45 ` Wincent Colaiuta
2007-10-13 16:38   ` Jean-Luc Herren
2007-10-13 17:14     ` Wincent Colaiuta
2007-10-13 18:31     ` Andreas Ericsson
2007-10-13 16:38   ` Johannes Schindelin
2007-10-13 17:27   ` Jeff King
2007-10-13 17:51     ` Jeff King
2007-10-13 20:03       ` Dan Zwell
2007-10-13 20:36         ` Wincent Colaiuta
2007-10-13 21:50           ` Dan Z
2007-10-13 22:23             ` Jean-Luc Herren
2007-10-15  3:43         ` Jeff King
2007-10-17  0:47           ` revised: " Dan Zwell
2007-10-17  1:51             ` Shawn O. Pearce
2007-10-17  7:57               ` Dan Zwell
2007-10-17  8:11                 ` Shawn O. Pearce
2007-10-22 21:32               ` [PATCH 1/2] Added basic color support to git add --interactive Dan Zwell
2007-10-23  2:11                 ` [PATCH] resend of git-add--interactive color patch against spearce/pu Dan Zwell
2007-10-23  2:19                 ` [PATCH] Let git-add--interactive read "git colors" from git-config Dan Zwell
2007-10-23  4:29                   ` Jeff King
2007-10-23  4:40                     ` Shawn O. Pearce
2007-10-23  4:03                 ` [PATCH 1/2] Added basic color support to git add --interactive Jeff King
2007-10-23  6:28                   ` Wincent Colaiuta
2007-10-23  6:41                     ` Jeff King
2007-10-23  7:44                       ` Wincent Colaiuta
2007-10-22 21:40               ` [PATCH 2/2] Let git-add--interactive read colors from git-config Dan Zwell
2007-10-23  4:27                 ` Jeff King
2007-10-23  8:52                   ` Dan Zwell
2007-11-03  3:41                     ` [PATCH 1/2] Added basic color support to git add --interactive Dan Zwell
2007-11-04  4:57                       ` Jeff King
2007-11-04  5:36                         ` Junio C Hamano
2007-11-04  5:43                           ` Jeff King
2007-11-11  0:01                             ` [PATCH 0/3] Adding colors to git-add--interactive Dan Zwell
2007-11-11  7:54                               ` Jeff King
2007-11-11  8:23                                 ` Junio C Hamano
2007-11-11  8:39                                   ` Dan Zwell
2007-11-22 10:54                               ` [PATCH 0/5] Colors for git-add--interactive Dan Zwell
2007-11-22 11:57                                 ` Jeff King
2007-11-22 19:20                                 ` Junio C Hamano
2007-11-22 10:54                               ` [PATCH 1/5] Added basic color support to git add --interactive Dan Zwell
2007-11-22 10:55                               ` [PATCH 2/5] Don't return 'undef' in case called in a vector context Dan Zwell
2007-11-22 12:06                                 ` Jeff King
2007-11-22 21:17                                 ` Junio C Hamano
2007-11-23  4:15                                   ` Dan Zwell
2007-11-22 10:55                               ` [PATCH 3/5] Added config_default($key, $default) to Git.pm Dan Zwell
2007-11-22 12:14                                 ` Jeff King
2007-11-22 10:56                               ` [PATCH 4/5] Let git-add--interactive read colors from configuration Dan Zwell
2007-11-22 12:18                                 ` Jeff King
2007-11-22 21:28                                   ` Junio C Hamano
2007-11-22 22:30                                     ` Jeff King
2007-11-23  5:32                                       ` Dan Zwell
2007-11-23  9:09                                         ` Jeff King
2007-11-23  9:17                                           ` Junio C Hamano
2007-11-22 10:56                               ` [PATCH 5/5] Added diff hunk coloring to git-add--interactive Dan Zwell
2007-11-22 12:25                                 ` Jeff King
2007-11-22 21:37                                   ` Junio C Hamano
2007-11-23 10:21                                     ` Jeff King
2007-11-22 22:35                                   ` Junio C Hamano
2007-11-11  0:01                             ` [PATCH 1/3] Added basic color support to git add --interactive Dan Zwell
2007-11-11  0:02                             ` [PATCH 2/3] Let git-add--interactive read colors from .gitconfig Dan Zwell
2007-11-11  0:03                             ` [PATCH 3/3] Added diff hunk coloring to git-add--interactive Dan Zwell
2007-11-11 10:00                               ` Junio C Hamano
2007-11-11  2:21                             ` [PATCH 0/3] Adding colors " Dan Zwell
2007-11-11  2:23                             ` Subject: [PATCH 1/3] Added basic color support to git add --interactive Dan Zwell
2007-11-11 19:56                               ` Junio C Hamano
2007-11-11  2:23                             ` Subject: [PATCH 2/3] Let git-add--interactive read colors from .gitconfig Dan Zwell
2007-11-11  9:53                               ` Junio C Hamano
2007-11-11 10:34                                 ` Junio C Hamano
2007-11-13  1:39                                 ` Dan Zwell
2007-11-13  2:32                                   ` Junio C Hamano
2007-11-13  2:55                                     ` Dan Zwell
2007-11-13  7:26                                       ` Jeff King
2007-11-13  7:29                                       ` Junio C Hamano
2007-11-13  8:25                                         ` Dan Zwell
2007-11-13  9:46                                           ` Jakub Narebski
2007-11-03  3:41                     ` [PATCH 2/2] " Dan Zwell
2007-11-03  5:06                       ` *[PATCH " Junio C Hamano
2007-11-03  7:26                         ` Dan Zwell
2007-11-03 18:11                           ` Junio C Hamano
2007-10-15  4:12   ` [PATCH] Color support added to git-add--interactive Jeff King
2007-10-13 20:21 ` Tom Tobin
2007-10-13 20:26   ` Tom Tobin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: http://vger.kernel.org/majordomo-info.html

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20071013081205.GB27533@coredump.intra.peff.net \
    --to=peff@peff.net \
    --cc=dzwell@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=maillist@steelskies.com \
    --cc=win@wincent.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).