aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorKristaps Dzonsons <kristaps@bsd.lv>2011-12-24 22:37:16 +0000
committerKristaps Dzonsons <kristaps@bsd.lv>2011-12-24 22:37:16 +0000
commit586d9c5122c9adb8da1eac27d93045e4851ccf60 (patch)
tree471e094e47e0d4a881a9cdb2e5655182eb7edfdf
parent028a2f531d2c69747d239102a16dc0a9044afea1 (diff)
downloadmandoc-586d9c5122c9adb8da1eac27d93045e4851ccf60.tar.gz
mandoc-586d9c5122c9adb8da1eac27d93045e4851ccf60.tar.zst
mandoc-586d9c5122c9adb8da1eac27d93045e4851ccf60.zip
Support leading, trailing and double colons in MANPATH to prepend,
append or insert the man.conf(5) default path; compatible with GNU manpath(1), implementation by kristaps@, heavily tweaked by schwarze@. Updates to MANPATH documentation applied to whatis.1, apropos.1, and catman.8 also.
-rw-r--r--apropos.117
-rw-r--r--catman.817
-rw-r--r--manpath.c53
-rw-r--r--whatis.117
4 files changed, 88 insertions, 16 deletions
diff --git a/apropos.1 b/apropos.1
index f958f4f2..bff583df 100644
--- a/apropos.1
+++ b/apropos.1
@@ -1,4 +1,4 @@
-.\" $Id: apropos.1,v 1.13 2011/12/12 02:00:49 schwarze Exp $
+.\" $Id: apropos.1,v 1.14 2011/12/24 22:37:16 kristaps Exp $
.\"
.\" Copyright (c) 2011 Kristaps Dzonsons <kristaps@bsd.lv>
.\"
@@ -14,7 +14,7 @@
.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
.\"
-.Dd $Mdocdate: December 12 2011 $
+.Dd $Mdocdate: December 24 2011 $
.Dt APROPOS 1
.Os
.Sh NAME
@@ -239,11 +239,22 @@ Text production:
.Sh ENVIRONMENT
.Bl -tag -width Ds
.It Ev MANPATH
-Colon-separated paths overriding the default list of paths searched for
+Colon-separated paths modifying the default list of paths searched for
manual databases.
Invalid paths, or paths without manual databases, are ignored.
Overridden by
.Fl M .
+If
+.Ev MANPATH
+begins with a
+.Sq \&: ,
+it is appended to the default list;
+else if it ends with
+.Sq \&: ,
+it is prepended to the default list; else if it contains
+.Sq \&:: ,
+the default list is inserted between the colons.
+If none of these conditions are met, it overrides the default list.
.El
.Sh FILES
.Bl -tag -width "/etc/man.conf" -compact
diff --git a/catman.8 b/catman.8
index af7353ac..fdd4cc9d 100644
--- a/catman.8
+++ b/catman.8
@@ -1,4 +1,4 @@
-.\" $Id: catman.8,v 1.3 2011/12/18 18:51:01 kristaps Exp $
+.\" $Id: catman.8,v 1.4 2011/12/24 22:37:16 kristaps Exp $
.\"
.\" Copyright (c) 2011 Kristaps Dzonsons <kristaps@bsd.lv>
.\"
@@ -14,7 +14,7 @@
.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
.\"
-.Dd $Mdocdate: December 18 2011 $
+.Dd $Mdocdate: December 24 2011 $
.Dt CATMAN 8
.Os
.Sh NAME
@@ -80,11 +80,22 @@ is specified, all files are updated.
.Sh ENVIRONMENT
.Bl -tag -width Ds
.It Ev MANPATH
-Colon-separated paths overriding the default list of paths searched for
+Colon-separated paths modifying the default list of paths searched for
manual databases.
Invalid paths, or paths without manual databases, are ignored.
Overridden by
.Fl M .
+If
+.Ev MANPATH
+begins with a
+.Sq \&: ,
+it is appended to the default list;
+else if it ends with
+.Sq \&: ,
+it is prepended to the default list; else if it contains
+.Sq \&:: ,
+the default list is inserted between the colons.
+If none of these conditions are met, it overrides the default list.
.El
.Sh EXIT STATUS
.Ex -std
diff --git a/manpath.c b/manpath.c
index 3a12496d..b6d9574e 100644
--- a/manpath.c
+++ b/manpath.c
@@ -1,4 +1,4 @@
-/* $Id: manpath.c,v 1.7 2011/12/13 21:09:01 kristaps Exp $ */
+/* $Id: manpath.c,v 1.8 2011/12/24 22:37:16 kristaps Exp $ */
/*
* Copyright (c) 2011 Ingo Schwarze <schwarze@openbsd.org>
* Copyright (c) 2011 Kristaps Dzonsons <kristaps@bsd.lv>
@@ -87,15 +87,54 @@ manpath_parse(struct manpaths *dirs, const char *file,
free(buf);
pclose(stream);
#else
- manpath_parseline(dirs, auxp);
+ char *insert;
- if (NULL == defp)
- defp = getenv("MANPATH");
+ /* Always prepend -m. */
+ manpath_parseline(dirs, auxp);
+
+ /* If -M is given, it overrides everything else. */
+ if (NULL != defp) {
+ manpath_parseline(dirs, defp);
+ return;
+ }
+
+ /* MANPATH and man.conf(5) cooperate. */
+ defp = getenv("MANPATH");
+ if (NULL == file)
+ file = MAN_CONF_FILE;
+
+ /* No MANPATH; use man.conf(5) only. */
+ if (NULL == defp || '\0' == defp[0]) {
+ manpath_manconf(dirs, file);
+ return;
+ }
+
+ /* Prepend man.conf(5) to MANPATH. */
+ if (':' == defp[0]) {
+ manpath_manconf(dirs, file);
+ manpath_parseline(dirs, defp);
+ return;
+ }
- if (NULL == defp)
- manpath_manconf(dirs, file ? file : MAN_CONF_FILE);
- else
+ /* Append man.conf(5) to MANPATH. */
+ if (':' == defp[(int)strlen(defp) - 1]) {
manpath_parseline(dirs, defp);
+ manpath_manconf(dirs, file);
+ return;
+ }
+
+ /* Insert man.conf(5) into MANPATH. */
+ insert = strstr(defp, "::");
+ if (NULL != insert) {
+ *insert++ = '\0';
+ manpath_parseline(dirs, defp);
+ manpath_manconf(dirs, file);
+ manpath_parseline(dirs, insert + 1);
+ return;
+ }
+
+ /* MANPATH overrides man.conf(5) completely. */
+ manpath_parseline(dirs, defp);
#endif
}
diff --git a/whatis.1 b/whatis.1
index 8ade7f45..5afba2a6 100644
--- a/whatis.1
+++ b/whatis.1
@@ -1,4 +1,4 @@
-.\" $Id: whatis.1,v 1.4 2011/12/12 02:00:49 schwarze Exp $
+.\" $Id: whatis.1,v 1.5 2011/12/24 22:37:16 kristaps Exp $
.\"
.\" Copyright (c) 2011 Kristaps Dzonsons <kristaps@bsd.lv>
.\"
@@ -14,7 +14,7 @@
.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
.\"
-.Dd $Mdocdate: December 12 2011 $
+.Dd $Mdocdate: December 24 2011 $
.Dt WHATIS 1
.Os
.Sh NAME
@@ -111,11 +111,22 @@ as follows:
.Sh ENVIRONMENT
.Bl -tag -width Ds
.It Ev MANPATH
-Colon-separated paths overriding the default list of paths searched for
+Colon-separated paths modifying the default list of paths searched for
manual databases.
Invalid paths, or paths without manual databases, are ignored.
Overridden by
.Fl M .
+If
+.Ev MANPATH
+begins with a
+.Sq \&: ,
+it is appended to the default list;
+else if it ends with
+.Sq \&: ,
+it is prepended to the default list; else if it contains
+.Sq \&:: ,
+the default list is inserted between the colons.
+If none of these conditions are met, it overrides the default list.
.El
.Sh FILES
.Bl -tag -width "/etc/man.conf" -compact