diff options
author | Ingo Schwarze <schwarze@openbsd.org> | 2020-02-10 13:49:15 +0000 |
---|---|---|
committer | Ingo Schwarze <schwarze@openbsd.org> | 2020-02-10 13:49:15 +0000 |
commit | 6e9c375c1368d601e8a793fe2fe464face97bc31 (patch) | |
tree | 07413b511374a1603055262f9ff3e20d0b0dc0f1 /main.c | |
parent | badee0bcdf3b1ff3208bcfee76231f24236f79e0 (diff) | |
download | mandoc-6e9c375c1368d601e8a793fe2fe464face97bc31.tar.gz |
For compatibility with the man(1) implementations of the man-1.6
and man-db packages, print the manpath if the -w option is given
without a following name argument.
This quirk has been in man-1.6 since at least man-1.5e (1998)
and in man-db since 2012.
Using this feature in portable software is a dubious idea because the
internal organization of manual page directories varies in about a
dozen respects among operating systems, so even if you get the answer,
there is no portable way to use it for looking up anything inside.
However, Matej Cepl <mcepl at suse dot cz> made me aware that some
software, for example the manual viewing functionality in the newest
editors/neovim code, unwisely relies on this feature anyway.
No objections were raised when this patch was shown on tech@.
Diffstat (limited to 'main.c')
-rw-r--r-- | main.c | 16 |
1 files changed, 14 insertions, 2 deletions
@@ -448,8 +448,20 @@ main(int argc, char *argv[]) /* man(1): Resolve each name individually. */ if (search.argmode == ARG_NAME) { - if (argc < 1) - usage(ARG_NAME); + if (argc < 1) { + if (outmode != OUTMODE_FLN) + usage(ARG_NAME); + if (conf.manpath.sz == 0) { + warnx("The manpath is empty."); + mandoc_msg_setrc(MANDOCLEVEL_BADARG); + } else { + for (i = 0; i + 1 < conf.manpath.sz; i++) + printf("%s:", conf.manpath.paths[i]); + printf("%s\n", conf.manpath.paths[i]); + } + manconf_free(&conf); + return (int)mandoc_msg_getrc(); + } for (res = NULL, ressz = 0; argc > 0; argc--, argv++) { (void)mansearch(&search, &conf.manpath, 1, argv, &resn, &resnsz); |