summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIngo Schwarze <schwarze@cvs.openbsd.org>2018-11-19 19:27:30 +0000
committerIngo Schwarze <schwarze@cvs.openbsd.org>2018-11-19 19:27:30 +0000
commit1c30573774ed2f29be306e344aeb4dd21a1c21ef (patch)
tree153042d7546060cd0c6bd9770d2c8910747ec0bc
parentfd8856b4c3298aeafc2766dc60c782e3c5257d94 (diff)
Improve POSIX compliance by making case-insensitive extended
regular expressions the default in man(1) -k searches, also matching what the man-db package used by many Linux distributions does. Originally requested by Wolfram Schneider <wosch at FreeBSD> via Yuri Pankov <yuripv at FreeBSD>. Feedback and OK cheloha@, and no objections when shown on tech@. Thanks to cheloha@ for pointing out that POSIX requires this behaviour and for the suggestion to explicitly say that *extended* regular expressions are used here. While here, unify spelling of case-[in]sensitive, fix a typo, update the EXAMPLES, and add a STANDARDS section.
-rw-r--r--usr.bin/mandoc/apropos.141
-rw-r--r--usr.bin/mandoc/mansearch.c9
2 files changed, 34 insertions, 16 deletions
diff --git a/usr.bin/mandoc/apropos.1 b/usr.bin/mandoc/apropos.1
index 4452881e781..77eebfd8f80 100644
--- a/usr.bin/mandoc/apropos.1
+++ b/usr.bin/mandoc/apropos.1
@@ -1,7 +1,7 @@
-.\" $OpenBSD: apropos.1,v 1.39 2018/02/23 18:53:49 schwarze Exp $
+.\" $OpenBSD: apropos.1,v 1.40 2018/11/19 19:27:29 schwarze Exp $
.\"
.\" Copyright (c) 2011, 2012 Kristaps Dzonsons <kristaps@bsd.lv>
-.\" Copyright (c) 2011, 2012, 2014, 2017 Ingo Schwarze <schwarze@openbsd.org>
+.\" Copyright (c) 2011,2012,2014,2017,2018 Ingo Schwarze <schwarze@openbsd.org>
.\"
.\" Permission to use, copy, modify, and distribute this software for any
.\" purpose with or without fee is hereby granted, provided that the above
@@ -15,7 +15,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: February 23 2018 $
+.Dd $Mdocdate: November 19 2018 $
.Dt APROPOS 1
.Os
.Sh NAME
@@ -51,8 +51,7 @@ searches for
.Xr makewhatis 8
databases in the default paths stipulated by
.Xr man 1
-and uses case-insensitive substring matching
-.Pq the Cm = No operator
+and uses case-insensitive extended regular expression matching
over manual names and descriptions
.Pq the Li \&Nm No and Li \&Nd No macro keys .
Multiple terms imply pairwise
@@ -93,7 +92,7 @@ format.
Search for all words in
.Ar expression
in manual page names only.
-The search is case insensitive and matches whole words only.
+The search is case-insensitive and matches whole words only.
In this mode, macro keys, comparison operators, and logical operators
are not available.
.It Fl k
@@ -123,7 +122,7 @@ Restrict the search to pages for the specified
.Xr machine 1
architecture.
.Ar arch
-is case insensitive.
+is case-insensitive.
By default, pages for all architectures are shown.
.It Fl s Ar section
Restrict the search to the specified section of the manual.
@@ -199,7 +198,7 @@ Operator
.Cm =
evaluates a substring, while
.Cm \(ti
-evaluates a regular expression.
+evaluates a case-sensitive extended regular expression.
.It Fl i Ar term
If
.Ar term
@@ -339,7 +338,7 @@ function arguments appearing on
.Ic \&Fn
lines
.It Li \&Fn
-fuction names marked up with
+function names marked up with
.Ic \&Fo
macros
.It Li \&In
@@ -407,7 +406,7 @@ Search for
.Qq .cf
as a substring of manual names and descriptions:
.Pp
-.Dl $ apropos .cf
+.Dl $ apropos =.cf
.Pp
Include matches for
.Qq .cnf
@@ -415,9 +414,9 @@ and
.Qq .conf
as well:
.Pp
-.Dl $ apropos .cf .cnf .conf
+.Dl $ apropos =.cf =.cnf =.conf
.Pp
-Search in names and descriptions using a regular expression:
+Search in names and descriptions using a case-sensitive regular expression:
.Pp
.Dl $ apropos \(aq\(tiset.?[ug]id\(aq
.Pp
@@ -448,6 +447,24 @@ The following two invocations are equivalent:
.Xr man 1 ,
.Xr re_format 7 ,
.Xr makewhatis 8
+.Sh STANDARDS
+The
+.Nm
+utility is compliant with the
+.St -p1003.1-2008
+specification of
+.Xr man 1
+.Fl k .
+.Pp
+All options, the
+.Nm whatis
+command, support for logical operators, macro keys,
+substring matching, sorting of results, the environment variables
+.Ev MANPAGER
+and
+.Ev MANPATH ,
+the database format, and the configuration file
+are extensions to that specification.
.Sh HISTORY
Part of the functionality of
.Nm whatis
diff --git a/usr.bin/mandoc/mansearch.c b/usr.bin/mandoc/mansearch.c
index 8d599877b3d..bbb2b664939 100644
--- a/usr.bin/mandoc/mansearch.c
+++ b/usr.bin/mandoc/mansearch.c
@@ -1,7 +1,7 @@
-/* $OpenBSD: mansearch.c,v 1.60 2017/08/22 17:50:02 schwarze Exp $ */
+/* $OpenBSD: mansearch.c,v 1.61 2018/11/19 19:27:29 schwarze Exp $ */
/*
* Copyright (c) 2012 Kristaps Dzonsons <kristaps@bsd.lv>
- * Copyright (c) 2013-2017 Ingo Schwarze <schwarze@openbsd.org>
+ * Copyright (c) 2013-2018 Ingo Schwarze <schwarze@openbsd.org>
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -764,8 +764,9 @@ exprterm(const struct mansearch *search, int argc, char *argv[], int *argi)
cs = 0;
} else if ((val = strpbrk(argv[*argi], "=~")) == NULL) {
e->bits = TYPE_Nm | TYPE_Nd;
- e->match.type = DBM_SUB;
- e->match.str = argv[*argi];
+ e->match.type = DBM_REGEX;
+ val = argv[*argi];
+ cs = 0;
} else {
if (val == argv[*argi])
e->bits = TYPE_Nm | TYPE_Nd;