summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIngo Schwarze <schwarze@openbsd.org>2019-01-01 08:18:11 +0000
committerIngo Schwarze <schwarze@openbsd.org>2019-01-01 08:18:11 +0000
commit296e5bf4695364984a7f038bb773183a4b86de57 (patch)
treeb72d5507eec65120f4478aad984f726fcf89d706
parent7b077be2dfd7b4594ea92b54cadae2663aa621ab (diff)
downloadmandoc-296e5bf4695364984a7f038bb773183a4b86de57.tar.gz
Support taking the -O tag value from apropos(1) key=value search terms;
feature improvement suggested by kn@. While here, also make "-O value" work from standard input. OK kn@
-rw-r--r--main.c23
-rw-r--r--mandoc.112
2 files changed, 26 insertions, 9 deletions
diff --git a/main.c b/main.c
index d916864d..a0878099 100644
--- a/main.c
+++ b/main.c
@@ -123,7 +123,7 @@ main(int argc, char *argv[])
struct manpage *res, *resp;
const char *progname, *sec, *thisarg;
char *conf_file, *defpaths, *auxpaths;
- char *oarg;
+ char *oarg, *tagarg;
unsigned char *uc;
size_t i, sz;
int prio, best_prio;
@@ -368,6 +368,17 @@ main(int argc, char *argv[])
#endif
}
+ /*
+ * Use the first argument for -O tag in addition to
+ * using it as a search term for man(1) or apropos(1).
+ */
+
+ if (conf.output.tag != NULL && *conf.output.tag == '\0') {
+ tagarg = argc > 0 && search.argmode == ARG_EXPR ?
+ strchr(*argv, '=') : NULL;
+ conf.output.tag = tagarg == NULL ? *argv : tagarg + 1;
+ }
+
/* man(1), whatis(1), apropos(1) */
if (search.argmode != ARG_FILE) {
@@ -480,8 +491,10 @@ main(int argc, char *argv[])
curp.mp = mparse_alloc(options, curp.os_e, curp.os_s);
if (argc < 1) {
- if (use_pager)
+ if (use_pager) {
tag_files = tag_init();
+ tag_files->tagname = conf.output.tag;
+ }
thisarg = "<stdin>";
mandoc_msg_setinfilename(thisarg);
parse(&curp, STDIN_FILENO, thisarg);
@@ -518,11 +531,7 @@ main(int argc, char *argv[])
if (use_pager) {
use_pager = 0;
tag_files = tag_init();
- if (conf.output.tag != NULL &&
- tag_files->tagname == NULL)
- tag_files->tagname =
- *conf.output.tag != '\0' ?
- conf.output.tag : *argv;
+ tag_files->tagname = conf.output.tag;
}
mandoc_msg_setinfilename(thisarg);
diff --git a/mandoc.1 b/mandoc.1
index 8c47c1c7..7db089fa 100644
--- a/mandoc.1
+++ b/mandoc.1
@@ -307,8 +307,16 @@ If no
is specified, reuse the first command line argument that is not a
.Ar section
number.
-This is useful when it is the name of a manual page,
-in particular the name of a library function.
+If that argument is in
+.Xr apropos 1
+.Ar key Ns = Ns Ar val
+format, only the
+.Ar val
+is used rather than the argument as a whole.
+This is useful for commands like
+.Ql man -akO tag Ic=ulimit
+to search for a keyword and jump right to its definition
+in the matching manual pages.
.It Cm width Ns = Ns Ar width
The output width is set to
.Ar width