When MANCOLOR environment variable is set, enable ANSI color escapes

in grotty(1).  This makes it possible to view colorized manpages in
color.

When MANPAGER environment variable is set, use it instead of PAGER.

Why another environment variable, one might ask?  With color output
enabled, both a terminal and a pager should support the ANSI color
escapes.  On a supporting terminal, less(1) with option -R would be
such a pager, while "more -s" (the current default pager for man(1))
will show garbage.  It means a different default pager is needed when
color output is enabled, but many people have PAGER set customary,
and it's unlikely to support ANSI color escapes, so introducing yet
another variable (MANPAGER) seemed like a good option to me:

- if MANPAGER is set, use that unconditionally;

- if you disable color support (it is by default), and don't set
  MANPAGER, you get an old behavior: -P pager, $PAGER, "more -s",
  in that order;

- if you enable color support (by setting MANCOLOR), and don't set
  MANPAGER, we ignore PAGER which is unlikely to support ANSI color
  escapes, and you get: -P pager, "less -Rs", in that order;

- you might have good reasons for different man(1) and general
  purpose pagers;

- later versions of GNU man(1) support MANPAGER.
This commit is contained in:
Ruslan Ermilov 2011-06-03 14:34:38 +00:00
parent 0330cb3bf7
commit a6a3e8561d
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=222653
2 changed files with 39 additions and 13 deletions

View File

@ -25,7 +25,7 @@
.\"
.\" $FreeBSD$
.\"
.Dd June 2, 2011
.Dd June 3, 2011
.Dt MAN 1
.Os
.Sh NAME
@ -73,8 +73,12 @@ environment variable.
.It Fl P Ar pager
Use specified pager.
Defaults to
.Ic "less -sR"
if color support is enabled, or
.Ic "more -s" .
Overrides the
.Ev MANPAGER
environment variable, which in turn overrides the
.Ev PAGER
environment variable.
.It Fl S Ar mansect
@ -289,9 +293,19 @@ Otherwise, if set to a special value
.Dq Li tty ,
and output is to a terminal,
the pages may be displayed over the whole width of the screen.
.It Ev PAGER
.It Ev MANCOLOR
If set, enables color support.
.It Ev MANPAGER
Program used to display files.
If unset,
.Pp
If unset, and color support is enabled,
.Ic "less -sR"
is used.
.Pp
If unset, and color support is disabled, then
.Ev PAGER
is used.
If that has no value either,
.Ic "more -s"
is used.
.El

View File

@ -294,10 +294,10 @@ man_display_page() {
ret=0
else
if [ $debug -gt 0 ]; then
decho "Command: $cattool $catpage | $PAGER"
decho "Command: $cattool $catpage | $MANPAGER"
ret=0
else
eval "$cattool $catpage | $PAGER"
eval "$cattool $catpage | $MANPAGER"
ret=$?
fi
fi
@ -356,6 +356,10 @@ man_display_page() {
;;
esac
if [ -z "$MANCOLOR" ]; then
NROFF="$NROFF -P-c"
fi
if [ -n "${use_width}" ]; then
NROFF="$NROFF -rLL=${use_width}n -rLT=${use_width}n"
fi
@ -382,7 +386,7 @@ man_display_page() {
if [ -n "$tflag" ]; then
pipeline="$pipeline | $TROFF"
else
pipeline="$pipeline | $NROFF | $PAGER"
pipeline="$pipeline | $NROFF | $MANPAGER"
fi
if [ $debug -gt 0 ]; then
@ -484,7 +488,7 @@ man_parse_args() {
while getopts 'M:P:S:adfhkm:op:tw' cmd_arg; do
case "${cmd_arg}" in
M) MANPATH=$OPTARG ;;
P) PAGER=$OPTARG ;;
P) MANPAGER=$OPTARG ;;
S) MANSECT=$OPTARG ;;
a) aflag=aflag ;;
d) debug=$(( $debug + 1 )) ;;
@ -808,7 +812,7 @@ search_whatis() {
bad=${bad#\\n}
if [ -n "$good" ]; then
echo -e "$good" | $PAGER
echo -e "$good" | $MANPAGER
fi
if [ -n "$bad" ]; then
@ -832,13 +836,21 @@ setup_cattool() {
}
# Usage: setup_pager
# Correctly sets $PAGER
# Correctly sets $MANPAGER
setup_pager() {
# Setup pager.
if [ -z "$PAGER" ]; then
PAGER="more -s"
if [ -z "$MANPAGER" ]; then
if [ -n "$MANCOLOR" ]; then
MANPAGER="less -sR"
else
if [ -n "$PAGER" ]; then
MANPAGER="$PAGER"
else
MANPAGER="more -s"
fi
fi
fi
decho "Using pager: $PAGER"
decho "Using pager: $MANPAGER"
}
# Usage: trim string
@ -921,7 +933,7 @@ do_whatis() {
# User's PATH setting decides on the groff-suite to pick up.
EQN=eqn
NROFF='groff -S -P-ch -Wall -mtty-char -man'
NROFF='groff -S -P-h -Wall -mtty-char -man'
PIC=pic
REFER=refer
TBL=tbl