Mercurial. Colour output piped to less

Operating system: Mac OS 10.6.2

I'd like to be able to see colour output when piping certain commands through less.

Two examples:

I've got ls aliased to ls --color=auto, so I'd like to be able to see colour when I do this:

ls -l | less

I've also got the color extension turned on in Mercurial, so I'd like to see colour output from:

hg diff | less

and

hg st | less

After some googling, it seems like some versions of less support either -r or -R to make this work, but no dice for me. I can't see anything in the man page that looks like what I need. (-r or -R SEEM to be the right options, but again, they don't seem to work)


Solution 1:

For mercurial, you should use the pager extension rather than piping explicitly to less. This will play nicely with the colored output options of other hg commands.

Solution 2:

I believe you have to use --color=always for ls if you want it to do colors even when not going to stdout. Then use -r on the less command

ls --color=always -l | less -r

Solution 3:

Do:

$ hg diff --color always | less -R

I would alias "less -R" to less. I'm not sure if there's a way to provide default options to mercurial's commands so that you don't have to remember to type --color always for hg diff all the time.

Solution 4:

In your ~/.hgrc put:

[extensions]
color =
pager =

[pager]
pager = LESS='FRSXQ' less
quiet = True
attend = outgoing,incoming,diff,status,log,qdiff,blame,annotate,pdiff,glog

Solution 5:

If you don't want to use the Pager Extension for mercurial you can use the following command:

hg diff | cdiff