When you normally execute, say
man 3 printf,
man simply does the job of looking up and fetching the particular manpage. The actual
act of displaying it, is done by a pager.
The default pager that
less, is in essence a simple TUI program that allows for easy navigation of a particular text
buffer (scrolling, searching, etc… all using vi-like keybindings). It can output stylized text (bolds, underlines, etc…) which it does
by default for manpages.
less is not found on the system,
man falls back to pure
A specific pager can be chosen by setting the
--pager option, or by using the
PAGER environment variables (the former of
which has priority).
Colorization in manpages is possible when using
less by setting
LESS_TERMCAP_* environment variables (see here
for info and a bit of history).
Those strings represent ANSI escape sequences that
less outputs in certain situations. For example,
LESS_TERMCAP_md is the sequence
less will output whenever it’s instructed to bold a specific part of the text.
The strings have quite cryptic names as they’re artifacts of an old library (
termcap) that less used to access the terminal back in the day,
but that were kept for compatibility reasons. These variables also aren’t mentioned anywhere in less’ documentation.
Below is a fish function that I use to achieve colorization in manpages. It exports a set of these
LESS_TERMCAP_* variables to my preference,
and then simply runs
man, which in turn runs
1function man --description "manpages using the less pager but with 8bit colors" 2 set -x LESS_TERMCAP_md (echo -e '\e[01;31m') 3 set -x LESS_TERMCAP_me (echo -e '\e[0m') 4 set -x LESS_TERMCAP_se (echo -e '\e[0m') 5 set -x LESS_TERMCAP_so (echo -e '\e[01;44;33m') 6 set -x LESS_TERMCAP_ue (echo -e '\e[0m') 7 set -x LESS_TERMCAP_us (echo -e '\e[01;32m') 8 9 command man $argv 10end