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