]> git.cameronkatri.com Git - mandoc.git/commitdiff
Improve POSIX compliance by making case-insensitive extended
authorIngo Schwarze <schwarze@openbsd.org>
Mon, 19 Nov 2018 19:27:37 +0000 (19:27 +0000)
committerIngo Schwarze <schwarze@openbsd.org>
Mon, 19 Nov 2018 19:27:37 +0000 (19:27 +0000)
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.

apropos.1
mansearch.c

index c0895a87e4c32fd135ff059ea0b3bb5b839a87b7..10f787737ce060942d2e5d2e4d1c3405bd22141b 100644 (file)
--- a/apropos.1
+++ b/apropos.1
@@ -1,7 +1,7 @@
-.\"    $Id: apropos.1,v 1.47 2018/02/23 18:54:02 schwarze Exp $
+.\"    $Id: apropos.1,v 1.48 2018/11/19 19:27:37 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
index 784c17bee714759682bb4092a9100d8c665f2c1f..9cfd64a2a2db7addaa9a89d190787f343419b72e 100644 (file)
@@ -1,7 +1,7 @@
-/*     $Id: mansearch.c,v 1.77 2017/08/22 17:50:11 schwarze Exp $ */
+/*     $Id: mansearch.c,v 1.78 2018/11/19 19:27:37 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
@@ -774,8 +774,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;