Take the 2-minute tour ×
Super User is a question and answer site for computer enthusiasts and power users. It's 100% free, no registration required.

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)

share|improve this question

migrated from stackoverflow.com Mar 27 '10 at 21:01

This question came from our site for professional and enthusiast programmers.

1  
It looks like the color extension is always disabled when piped. Try these commands to see what I mean: ls --color=always | ls -R and hg diff --config color.mode=ansi | less -R –  Harvey Aug 10 '10 at 17:34

6 Answers 6

up vote 21 down vote accepted

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.

share|improve this answer
    
Thanks, I think this is exactly what I was looking for. –  mmacaulay Apr 1 '10 at 16:43
    
The pager extension is very nice. –  anddam Jul 6 at 9:46

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
share|improve this answer

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.

share|improve this answer
1  
Or use $ hg diff --color always | less -FRSXQ for better less options. It will silently quit if diff fits the screen, for example. –  jpbochi Jul 28 '12 at 15:08
    
You can setup LESS="-R" alternatively to aliasing "less" itself. –  blueyed Sep 27 '12 at 10:45
    
-F is to keep reading file as it's being produced, -S is to not line-wrap, -X something obscure, -Q avoids ringing terminal bell. –  Evgeni Sergeev Jan 23 at 0:17

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
share|improve this answer

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

hg diff | cdiff
share|improve this answer

ls --color=auto means you get colour output when it's not being piped to something. Try ls --colour=auto | cat and you'll see what I mean.

I expect hg makes similar assumptions.

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.