diff options
author | Ingo Schwarze <schwarze@openbsd.org> | 2013-12-31 03:41:14 +0000 |
---|---|---|
committer | Ingo Schwarze <schwarze@openbsd.org> | 2013-12-31 03:41:14 +0000 |
commit | a23935eaa0bc6038f06a3c8b59454d4282f1d1a0 (patch) | |
tree | ffc24c2145b821e2be31df4b8b5c37f91f93b149 /apropos.c | |
parent | 05e81e9e4124ecfe3c1b096c9edebf065f703d8d (diff) | |
download | mandoc-a23935eaa0bc6038f06a3c8b59454d4282f1d1a0.tar.gz mandoc-a23935eaa0bc6038f06a3c8b59454d4282f1d1a0.tar.zst mandoc-a23935eaa0bc6038f06a3c8b59454d4282f1d1a0.zip |
Experimental feature to let apropos(1) show different keys than .Nd.
This really takes us beyond what grep -R /usr/*/man/ can do
because now you can search for pages by *one* criterion and then
display the contents of *another* macro from those pages, like in
$ apropos -O Ox Fa~wchar
to get an impression how long wide character handling is available.
Diffstat (limited to 'apropos.c')
-rw-r--r-- | apropos.c | 18 |
1 files changed, 14 insertions, 4 deletions
@@ -1,6 +1,7 @@ -/* $Id: apropos.c,v 1.35 2013/12/27 18:51:25 schwarze Exp $ */ +/* $Id: apropos.c,v 1.36 2013/12/31 03:41:14 schwarze Exp $ */ /* * Copyright (c) 2012 Kristaps Dzonsons <kristaps@bsd.lv> + * Copyright (c) 2013 Ingo Schwarze <schwarze@openbsd.org> * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -41,6 +42,7 @@ main(int argc, char *argv[]) char *defpaths, *auxpaths; char *conf_file; char *progname; + char *outkey; extern char *optarg; extern int optind; @@ -57,8 +59,9 @@ main(int argc, char *argv[]) auxpaths = defpaths = NULL; conf_file = NULL; + outkey = NULL; - while (-1 != (ch = getopt(argc, argv, "C:M:m:S:s:"))) + while (-1 != (ch = getopt(argc, argv, "C:M:m:O:S:s:"))) switch (ch) { case ('C'): conf_file = optarg; @@ -69,6 +72,9 @@ main(int argc, char *argv[]) case ('m'): auxpaths = optarg; break; + case ('O'): + outkey = optarg; + break; case ('S'): search.arch = optarg; break; @@ -89,23 +95,27 @@ main(int argc, char *argv[]) search.flags = whatis ? MANSEARCH_WHATIS : 0; manpath_parse(&paths, conf_file, defpaths, auxpaths); - ch = mansearch(&search, &paths, argc, argv, &res, &sz); + ch = mansearch(&search, &paths, argc, argv, outkey, &res, &sz); manpath_free(&paths); if (0 == ch) goto usage; for (i = 0; i < sz; i++) { - printf("%s - %s\n", res[i].names, res[i].desc); + printf("%s - %s\n", res[i].names, + NULL == outkey ? res[i].desc : + NULL == res[i].output ? "" : res[i].output); free(res[i].file); free(res[i].names); free(res[i].desc); + free(res[i].output); } free(res); return(sz ? EXIT_SUCCESS : EXIT_FAILURE); usage: fprintf(stderr, "usage: %s [-C file] [-M path] [-m path] " + "[-O outkey] " "[-S arch] [-s section]%s ...\n", progname, whatis ? " name" : "\n expression"); return(EXIT_FAILURE); |