37

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)

ifconfig
  • 697
mmacaulay
  • 683

7 Answers7

30

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.

richq
  • 1,130
13

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
13

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.

stantonk
  • 280
13

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
Joe HG
  • 131
2

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

hg diff | cdiff
1

https://www.mercurial-scm.org/wiki/Defaults

[defaults] diff = --color always

0

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.

keturn
  • 130