Thread (7 messages) flat view 7 messages, 4 authors, 2016-06-15

Re: Adding color to git diff output.

From: sean <hidden>
Date: 2016-06-15 22:42:23

Possibly related (same subject, not in this thread)

On Tue, 11 Apr 2006 17:34:10 -0700 (PDT)
Linus Torvalds [off-list ref] wrote:
On Tue, 11 Apr 2006, Junio C Hamano wrote:
quoted
sean [off-list ref] writes:
quoted
Linus posted a colorize program a while back[1] but it wasn't taken into git.  
The patch below takes a different approach, adding a GIT_DIFF_PAGER variable.
You can use it by assigning a filter to the environment variable, like so:

export GIT_DIFF_PAGER="colordiff | less -RS"
Sounds like a nice idea, even maybe suitable in a FAQ.
Unfortunately colordiff does not seem to grok diff --cc output,
but that is fine ;-).
Well, the real problem - at least as far as my usage is concerned - is 
that I'd want colorization to be more integrated so that it can be turned 
off when not appropriate.

Think "colorized 'ls'", where if you enable colorization by default, it 
only colorizes when the output is a tty, so that you can still script 
things and output things to a file or so, without it getting colorized. 

Because most "patch" programs (git-apply included) do not want to see 
colorization ;)

So I'd suggest that the "git diff" script at a minimum first check whether 
the output is to a tty before it decides to use GIT_DIFF_PAGER. With 
perhaps an option to _force_ colorization if you want to.

Now, I don't actually enable ls-colorization by default, and I probably 
wouldn't do it for git diff either, but at least for diffs I _might_. But 
I'd definitely want it to be turned off automatically so that I can do

	git diff .. > ~/patch-file

without having to remember to turn it off explicitly.
What I have is a script ~/bin/gitcdiff:

#!/bin/sh
tty -s <&1 || exec cat
colordiff | less -RS

And then setting GIT_DIFF_PAGER="~/bin/gitcdiff".  When piping to a file 
it just uses cat, but when the output is a terminal device it uses the 
colordiff.

I thought about integrating that logic into git-diff.sh, but i'm not sure
it's always appropriate.

Sean
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help