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: [email protected] 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;