diff options
author | Ingo Schwarze <schwarze@cvs.openbsd.org> | 2018-11-19 19:27:30 +0000 |
---|---|---|
committer | Ingo Schwarze <schwarze@cvs.openbsd.org> | 2018-11-19 19:27:30 +0000 |
commit | 1c30573774ed2f29be306e344aeb4dd21a1c21ef (patch) | |
tree | 153042d7546060cd0c6bd9770d2c8910747ec0bc | |
parent | fd8856b4c3298aeafc2766dc60c782e3c5257d94 (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.1 | 41 | ||||
-rw-r--r-- | usr.bin/mandoc/mansearch.c | 9 |
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; |