Hi, currently, when you call apropos(1) in the default mode without explicitly specifying '=' for substring search or '~' for regular expression search, page names and one-line descriptions are searched case-insensitively for the substring specified.
It appears that traditionally, FreeBSD apropos used to treat the argument as a regular expression in this mode, and so does the apropos contained in the man-db package which is common on Linux; see: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=223556 Yuri Pankov suggests an "#ifdef __FreeBSD__" stunt in portable mandoc, but i think switching to regular expressions by default would be beneficial for OpenBSD as well: more powerful, and closer to what other systems do. It is quite rare that one wants to search for words including regular expression special characters. After the change, it will still be possible by either escaping them, as in $ apropos 'c\+\+' $ apropos '\|x\|' # yields trunc(3) $ apropos '\$\[' # yields arybase(3p) or by explicitly requesting substring search with the already existing and already documented '=' operator, as in $ apropos =c++ $ apropos '=|x|' $ apropos =$[ Any concerns about committing the patch below? Note that i am *not* proposing to change the behaviour with respect to case sensitivity. Default behaviour will remain case insensitive, substring search will remain always case insensitive. The explicit '~' operator will remain case-sensitive, unless the already existing and documented option -i is specified. Yours, Ingo Index: apropos.1 =================================================================== RCS file: /cvs/src/usr.bin/mandoc/apropos.1,v retrieving revision 1.39 diff -u -p -r1.39 apropos.1 --- apropos.1 23 Feb 2018 18:53:49 -0000 1.39 +++ apropos.1 18 Nov 2018 00:33:47 -0000 @@ -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 regular expression matching over manual names and descriptions .Pq the Li \&Nm No and Li \&Nd No macro keys . Multiple terms imply pairwise Index: mansearch.c =================================================================== RCS file: /cvs/src/usr.bin/mandoc/mansearch.c,v retrieving revision 1.60 diff -u -p -r1.60 mansearch.c --- mansearch.c 22 Aug 2017 17:50:02 -0000 1.60 +++ mansearch.c 18 Nov 2018 00:33:47 -0000 @@ -764,8 +764,9 @@ exprterm(const struct mansearch *search, 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;
