=================================================================== RCS file: /cvs/mandoc/main.c,v retrieving revision 1.307 retrieving revision 1.310 diff -u -p -r1.307 -r1.310 --- mandoc/main.c 2018/08/09 17:30:36 1.307 +++ mandoc/main.c 2018/11/22 12:01:46 1.310 @@ -1,4 +1,4 @@ -/* $Id: main.c,v 1.307 2018/08/09 17:30:36 schwarze Exp $ */ +/* $Id: main.c,v 1.310 2018/11/22 12:01:46 schwarze Exp $ */ /* * Copyright (c) 2008-2012 Kristaps Dzonsons * Copyright (c) 2010-2012, 2014-2018 Ingo Schwarze @@ -405,7 +405,6 @@ main(int argc, char *argv[]) res[sz].names = NULL; res[sz].output = NULL; res[sz].ipath = SIZE_MAX; - res[sz].bits = 0; res[sz].sec = 10; res[sz].form = FORM_SRC; sz++; @@ -486,12 +485,6 @@ main(int argc, char *argv[]) curp.mp = mparse_alloc(options, curp.mmin, mmsg, curp.os_e, curp.os_s); - /* - * Conditionally start up the lookaside buffer before parsing. - */ - if (OUTT_MAN == curp.outtype) - mparse_keep(curp.mp); - if (argc < 1) { if (use_pager) tag_files = tag_init(); @@ -524,8 +517,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) @@ -755,7 +753,6 @@ found: page->names = NULL; page->output = NULL; page->ipath = ipath; - page->bits = NAME_FILE & NAME_MASK; page->sec = (*sec >= '1' && *sec <= '9') ? *sec - '1' + 1 : 10; page->form = form; return 1; @@ -878,7 +875,7 @@ parse(struct curparse *curp, int fd, const char *file) tree_man(curp->outdata, man); break; case OUTT_MAN: - man_man(curp->outdata, man); + mparse_copy(curp->mp); break; case OUTT_PDF: case OUTT_ASCII: @@ -1186,7 +1183,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"); @@ -1202,7 +1199,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) @@ -1216,14 +1213,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()) {