Re: Man pages have colors? A deep dive into groff
- From
Ævar Arnfjörð Bjarmason <avarab@gmail.com>
- Date
- May 17, 2021, 16:48 UTC
- Message-ID
- <87tun1qp91.fsf@evledraar.gmail.com>
- In-Reply-To
- <60a046bd83001_f4b0f20861@natae.notmuch>
On Sat, May 15 2021, Felipe Contreras wrote:
Show 49 quoted lines
> Hi,
>
> While I was doing the investigagion for my GNU_ROFF patch [1], I checked
> different versions of all the tools (asciidoc, asciidoctor, docbook, and
> groff).
>
> When I tested my own compiled version of groff I noticed something
> weird: man pages have colors. This did not happen with the version
> shipped by Arch Linux.
>
> I did notice the output generated by docbook stylesheets showed
> \m[blue], but no color showed up.
>
> It turns out Arch Linux disables colors, and so does Debian, by
> disabling a feature called SGR. This happened about 10 years, and the
> rationale was that "it doesn't work correctly".
>
> To enable SGR on these distributions you need to do GROFF_SGR=1, but
> that is not documented anywhere.
>
> groff does check for a variable GROFF_NO_SGR, but it's the other way
> around: SGR is enabled unless that variable is set.
>
> There's other ways your distribution might be screwing up with groff
> (for example Arch Linux converts \' to ', which is not correct), so you
> might want to check your shipped configuration in:
>
> /usr/share/groff/site-tmac/man.local
>
> Unfortunately the colors in man pages leave a lot to be desired.
>
> Here is a simple trick I've been using to show some custom colors:
>
> man() {
> GROFF_NO_SGR=1 \
> LESS_TERMCAP_md=$'\e[1;31m' \
> LESS_TERMCAP_me=$'\e[0m' \
> LESS_TERMCAP_us=$'\e[1;34m' \
> LESS_TERMCAP_ue=$'\e[0m' \
> LESS_TERMCAP_so=$'\e[1;35m' \
> LESS_TERMCAP_se=$'\e[0m' \
> command man "$@"
> }
>
> Hopefully some of you might find this useful.
>
> Cheers.
>
> [1] https://lore.kernel.org/git/20210515115653.922902-2-felipe.contreras@gmail.com/This looks much better.
I wonder a good follow-up (hint, hint! :) would be to have exec_man_man() and exec_man_cmd() in builtin/help.c set this depending on color.ui (so we'd do it by default with "auto").
Then e.g. "git help git" would look prettier than "man git".