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
  • 622
  • 3
  • 10
  • 23
mmacaulay
  • 683
  • 2
  • 7
  • 9
  • 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

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.

Luke Schlather
  • 333
  • 1
  • 2
  • 7
richq
  • 1,130
  • 11
  • 17
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
Brandon Bodnar
  • 261
  • 1
  • 4
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
  • 3
  • 8
  • 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
  • 1
    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 '14 at 00:17
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
  • 1
  • 2
2

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

hg diff | cdiff
Good Person
  • 155
  • 1
  • 9
1

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

[defaults] diff = --color always

user612789
  • 21
  • 1
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
  • 131
  • 1
  • 5