version 1.359, 2021/10/04 20:24:06 |
version 1.360, 2021/10/04 21:29:17 |
Line 1286 spawn_pager(struct outstate *outst, char *tag_target) |
|
Line 1286 spawn_pager(struct outstate *outst, char *tag_target) |
|
char *argv[MAX_PAGER_ARGS]; |
char *argv[MAX_PAGER_ARGS]; |
const char *pager; |
const char *pager; |
char *cp; |
char *cp; |
|
size_t wordlen; |
#if HAVE_LESS_T |
#if HAVE_LESS_T |
size_t cmdlen; |
size_t cmdlen; |
#endif |
#endif |
Line 1300 spawn_pager(struct outstate *outst, char *tag_target) |
|
Line 1301 spawn_pager(struct outstate *outst, char *tag_target) |
|
pager = getenv("PAGER"); |
pager = getenv("PAGER"); |
if (pager == NULL || *pager == '\0') |
if (pager == NULL || *pager == '\0') |
pager = BINM_PAGER; |
pager = BINM_PAGER; |
cp = mandoc_strdup(pager); |
|
|
|
/* |
/* |
* Parse the pager command into words. |
* Parse the pager command into words. |
Line 1308 spawn_pager(struct outstate *outst, char *tag_target) |
|
Line 1308 spawn_pager(struct outstate *outst, char *tag_target) |
|
*/ |
*/ |
|
|
argc = 0; |
argc = 0; |
while (argc + 5 < MAX_PAGER_ARGS) { |
while (*pager != '\0' && argc + 5 < MAX_PAGER_ARGS) { |
argv[argc++] = cp; |
wordlen = strcspn(pager, " "); |
cp = strchr(cp, ' '); |
argv[argc++] = mandoc_strndup(pager, wordlen); |
if (cp == NULL) |
pager += wordlen; |
break; |
while (*pager == ' ') |
*cp++ = '\0'; |
pager++; |
while (*cp == ' ') |
|
cp++; |
|
if (*cp == '\0') |
|
break; |
|
} |
} |
|
|
/* For less(1), use the tag file. */ |
/* For less(1), use the tag file. */ |
Line 1329 spawn_pager(struct outstate *outst, char *tag_target) |
|
Line 1325 spawn_pager(struct outstate *outst, char *tag_target) |
|
cp = argv[0] + cmdlen - 4; |
cp = argv[0] + cmdlen - 4; |
if (strcmp(cp, "less") == 0) { |
if (strcmp(cp, "less") == 0) { |
argv[argc++] = mandoc_strdup("-T"); |
argv[argc++] = mandoc_strdup("-T"); |
argv[argc++] = outst->tag_files->tfn; |
argv[argc++] = mandoc_strdup(outst->tag_files->tfn); |
if (tag_target != NULL) { |
if (tag_target != NULL) { |
argv[argc++] = mandoc_strdup("-t"); |
argv[argc++] = mandoc_strdup("-t"); |
argv[argc++] = tag_target; |
argv[argc++] = mandoc_strdup(tag_target); |
use_ofn = 0; |
use_ofn = 0; |
} |
} |
} |
} |
Line 1343 spawn_pager(struct outstate *outst, char *tag_target) |
|
Line 1339 spawn_pager(struct outstate *outst, char *tag_target) |
|
mandoc_asprintf(&argv[argc], "file://%s#%s", |
mandoc_asprintf(&argv[argc], "file://%s#%s", |
outst->tag_files->ofn, tag_target); |
outst->tag_files->ofn, tag_target); |
else |
else |
argv[argc] = outst->tag_files->ofn; |
argv[argc] = mandoc_strdup(outst->tag_files->ofn); |
argc++; |
argc++; |
} |
} |
argv[argc] = NULL; |
argv[argc] = NULL; |
Line 1355 spawn_pager(struct outstate *outst, char *tag_target) |
|
Line 1351 spawn_pager(struct outstate *outst, char *tag_target) |
|
case 0: |
case 0: |
break; |
break; |
default: |
default: |
|
while (argc > 0) |
|
free(argv[--argc]); |
(void)setpgid(pager_pid, 0); |
(void)setpgid(pager_pid, 0); |
(void)tcsetpgrp(STDOUT_FILENO, pager_pid); |
(void)tcsetpgrp(STDOUT_FILENO, pager_pid); |
#if HAVE_PLEDGE |
#if HAVE_PLEDGE |