On Tue, Apr 12, 2016 at 19:14 +0200, Ingo Schwarze wrote: > [moved to tech@, source-changes is not ideal for discussions] > > Marc Espie wrote on Tue, Apr 12, 2016 at 03:44:34PM +0200: > > On Tue, Apr 12, 2016 at 11:24:40PM +1000, Jonathan Gray wrote: > >> On Tue, Apr 12, 2016 at 02:36:09PM +0200, Marc Espie wrote: > >>> On Tue, Apr 12, 2016 at 08:18:33PM +1000, Jonathan Gray wrote: > >>>> On Tue, Apr 12, 2016 at 03:40:11AM -0600, Marc Espie wrote: > > >>>>> CVSROOT: /cvs > >>>>> Module name: www > >>>>> Changes by: es...@cvs.openbsd.org 2016/04/12 03:40:11 > >>>>> > >>>>> Modified files: > >>>>> faq : faq6.html > >>>>> > >>>>> Log message: > >>>>> pretty sure network doesn't care about carp(3p) > > >>>> This wouldn't be a problem if the perl pages were searched last. > > >>> And why would you want that ? because you care less about the > >>> perl manpages ? > >>> Changing the default will impact other people, even if that patch > >>> would work. > > >> The behaviour was changed at some point. > > True, probably with the switch from the old BSD man(1) to the new > mandoc-based man(1). > > >> For example on an old machine with 5.6 > >> /usr/share/man/man4/re.4 and /usr/share/man/man3p/re.3p both exist > >> man re shows re(4) not re(3p). > >> > >> So I am proposing the default be changed back. When that link > >> was added the search order was correct. > > > I don't know how ingo orders > > We are not talking about order here (which page is shown first when > more than one page is shown with -a; order is always numeric within > trees, like in SEE ALSO sections, and that won't change; try "man > -a chown" vs. "man chown") but about priority (which page is shown > when the user requested one single page only). > > > things these days, but I would tend to think there is just > > plain old alphabetical order in sections ? > > No. The file name inside the respective manual page tree is taken, > for example "man4/re.4" or "man3p/re.3p", the first digit character > is identified, in the above example '4' and '3', respectively, > and then the search priority > > 1 8 6 2 3 5 7 4 9 > > is applied. Suffixes to the section number are ignored. One reason > is that some operating systems use suffixes for almost all their > manuals. For example: > > $ uname -a > SunOS login 5.10 Generic_150400-17 sun4v sparc SUNW,SPARC-Enterprise-T5220 > $ cd /usr/share/man/ > $ ls -d man1* > man1 man1b man1c man1f man1m man1s > $ ls -d man3p* > man3pam man3perl man3picltree man3pool man3project > man3papi man3picl man3plot man3proc > $ ls -d man* | wc -l > 106 > > Then again, i don't mind moving 3p back to the end. The patch appended > below does that for man(1). I'll wait to see whether people want it > before doing the same for man.cgi(8). > > > There used to be a config option in man.conf... > > True, that's one of the things i dropped with the new, simpler > man.conf(5) format because i wasn't sure people actually need it. > > If you want it, i can implement the following man.conf(5) directive: > > sections name name name ... > > That would decide which sections get priority. > > The default could be either of > > 1 8 6 2 3 3p 5 7 4 9 > 1 8 6 2 3 5 7 4 9 3p > > whichever you prefer. > > But unless people speak up and tell me that directive is useful, > i'll assume it is better to not bloat the config file format. > > Yours, > Ingo > >
IMO it's a very bad idea to hardcode "3p/" like that. Aren't there packages using other funny section names? Can we simply prioritize letter-less sections? > Index: main.c > =================================================================== > RCS file: /cvs/src/usr.bin/mandoc/main.c,v > retrieving revision 1.170 > diff -u -p -r1.170 main.c > --- main.c 16 Jan 2016 21:56:32 -0000 1.170 > +++ main.c 12 Apr 2016 16:51:09 -0000 > @@ -112,9 +112,9 @@ main(int argc, char *argv[]) > unsigned char *uc; > struct manpage *res, *resp; > char *conf_file, *defpaths; > - size_t isec, i, sz; > + const char *sec; > + size_t i, sz; > int prio, best_prio; > - char sec; > enum outmode outmode; > int fd; > int show_usage; > @@ -350,7 +350,7 @@ main(int argc, char *argv[]) > > if (outmode == OUTMODE_ONE) { > argc = 1; > - best_prio = 10; > + best_prio = 11; > } else if (outmode == OUTMODE_ALL) > argc = (int)sz; > > @@ -366,11 +366,14 @@ main(int argc, char *argv[]) > res[i].output); > else if (outmode == OUTMODE_ONE) { > /* Search for the best section. */ > - isec = strcspn(res[i].file, "123456789"); > - sec = res[i].file[isec]; > - if ('\0' == sec) > + sec = res[i].file; > + sec += strcspn(sec, "123456789"); > + if (*sec == '\0') > continue; > - prio = sec_prios[sec - '1']; > + if (strncmp(sec, "3p/", 3) == 0) > + prio = 10; > + else > + prio = sec_prios[sec[0] - '1']; > if (prio >= best_prio) > continue; > best_prio = prio; > @@ -636,7 +639,7 @@ fs_search(const struct mansearch *cfg, c > int argc, char **argv, struct manpage **res, size_t *ressz) > { > const char *const sections[] = > - {"1", "8", "6", "2", "3", "3p", "5", "7", "4", "9"}; > + {"1", "8", "6", "2", "3", "5", "7", "4", "9", "3p"}; I'd definitely move 4 and 5 closer like so (if you want to keep games this high): > + {"1", "8", "6", "5", "7", "4", "2", "3", "9", "3p"}; .7 man pages are closer to config files (.5) and other "sysop" stuff. > const size_t nsec = sizeof(sections)/sizeof(sections[0]); > > size_t ipath, isec, lastsz;