Extend functionality MANPATH in man(1) to followup with apropos(1) from

mandoc.

If MANPATH begins with a colon, it is appended to the default list; if it ends
with a colon, it is prepended to the default list; or if it contains two
adjacent colons, the standard search path is inserted between the colons.  If
none of these conditions are met, it overrides the standard search path.

Import the MANPATH description from mandoc into the man(1) man page

Reported by:	kargl
MFC after:	1 week
This commit is contained in:
Baptiste Daroussin 2017-03-11 06:24:49 +00:00
parent 61d5f2d162
commit b2394e73fc
2 changed files with 41 additions and 9 deletions

View File

@ -25,7 +25,7 @@
.\"
.\" $FreeBSD$
.\"
.Dd January 28, 2017
.Dd March 11, 2017
.Dt MAN 1
.Os
.Sh NAME
@ -295,13 +295,22 @@ Corresponds to the
.Fl m
option.
.It Ev MANPATH
Used to find the location of the manual files.
See
.Xr manpath 1
for additional information.
Corresponds to the
.Fl M
option.
The standard search path used by
.Xr man 1
may be changed by specifying a path in the
.Ev MANPATH
environment variable.
Invalid paths, or paths without manual databases, are ignored.
Overridden by
.Fl M .
If
.Ev MANPATH
begins with a colon, it is appended to the default list;
if it ends with a colon, it is prepended to the default list;
or if it contains two adjacent colons,
the standard search path is inserted between the colons.
If none of these conditions are met, it overrides the
standard search path.
.It Ev MANROFFSEQ
Used to determine the preprocessors for the manual source before running
.Xr nroff 1

View File

@ -68,7 +68,23 @@ build_manpath() {
# If the user has set a manpath, who are we to argue.
if [ -n "$MANPATH" ]; then
return
case "$MANPATH" in
*:) PREPEND_MANPATH=${MANPATH} ;;
:*) APPEND_MANPATH=${MANPATH} ;;
*::*)
PREPEND_MANPATH=${MANPATH%%::*}
APPEND_MANPATH=${MANPATH#*::}
;;
*) return ;;
esac
fi
if [ -n "$PREPEND_MANPATH" ]; then
IFS=:
for path in $PREPEND_MANPATH; do
add_to_manpath "$path"
done
unset IFS
fi
search_path
@ -82,6 +98,13 @@ build_manpath() {
parse_configs
if [ -n "$APPEND_MANPATH" ]; then
IFS=:
for path in $APPEND_MANPATH; do
add_to_manpath "$path"
done
unset IFS
fi
# Trim leading colon
MANPATH=${manpath#:}