summaryrefslogtreecommitdiffstats
path: root/main.c
diff options
context:
space:
mode:
authorIngo Schwarze <schwarze@openbsd.org>2018-11-22 11:30:23 +0000
committerIngo Schwarze <schwarze@openbsd.org>2018-11-22 11:30:23 +0000
commit22da865402a78266a769c6c501dbecec806fc0d3 (patch)
treebce636bf50fd51354f227706a2d28e974948df56 /main.c
parent556fbe5dbb473b7fd0ad6ba9a1ad36a105cffd66 (diff)
downloadmandoc-22da865402a78266a769c6c501dbecec806fc0d3.tar.gz
In -T locale (the default), -T ascii, and -T utf8 mode, provide a new
output option -O tag[=term] to move right to the definition of "term" when opening the manual page in a pager, effectively porting the -T html fragment name feature - https://man.openbsd.org/ksh#ulimit - to the terminal. Try: $ man -O tag uvm_sysctl $ man -O tag=ulimit ksh $ man -O tag 3 compress Feature development triggered by a question from kn@. Klemens also tested, provided feedback that resulted in improvements, and provided an OK.
Diffstat (limited to 'main.c')
-rw-r--r--main.c20
1 files changed, 16 insertions, 4 deletions
diff --git a/main.c b/main.c
index 8db0b585..ad85efd6 100644
--- a/main.c
+++ b/main.c
@@ -518,8 +518,13 @@ main(int argc, char *argv[])
fd = mparse_open(curp.mp, resp != NULL ? resp->file : *argv);
if (fd != -1) {
if (use_pager) {
- tag_files = tag_init();
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;
}
if (resp == NULL)
@@ -1180,7 +1185,7 @@ spawn_pager(struct tag_files *tag_files)
const char *pager;
char *cp;
size_t cmdlen;
- int argc;
+ int argc, use_ofn;
pid_t pager_pid;
pager = getenv("MANPAGER");
@@ -1196,7 +1201,7 @@ spawn_pager(struct tag_files *tag_files)
*/
argc = 0;
- while (argc + 4 < MAX_PAGER_ARGS) {
+ while (argc + 5 < MAX_PAGER_ARGS) {
argv[argc++] = cp;
cp = strchr(cp, ' ');
if (cp == NULL)
@@ -1210,14 +1215,21 @@ spawn_pager(struct tag_files *tag_files)
/* For less(1), use the tag file. */
+ use_ofn = 1;
if ((cmdlen = strlen(argv[0])) >= 4) {
cp = argv[0] + cmdlen - 4;
if (strcmp(cp, "less") == 0) {
argv[argc++] = mandoc_strdup("-T");
argv[argc++] = tag_files->tfn;
+ if (tag_files->tagname != NULL) {
+ argv[argc++] = mandoc_strdup("-t");
+ argv[argc++] = tag_files->tagname;
+ use_ofn = 0;
+ }
}
}
- argv[argc++] = tag_files->ofn;
+ if (use_ofn)
+ argv[argc++] = tag_files->ofn;
argv[argc] = NULL;
switch (pager_pid = fork()) {