aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorIngo Schwarze <schwarze@openbsd.org>2019-07-19 20:27:25 +0000
committerIngo Schwarze <schwarze@openbsd.org>2019-07-19 20:27:25 +0000
commitf3471bbe850e1ceab86fe35bf08aed11dfa7a465 (patch)
treed9c498f4312ec3af42cd8c2ec92a77d8c630814e
parentf5f7a82925842126c44fcb97a8c2e2f4a07d6618 (diff)
downloadmandoc-f3471bbe850e1ceab86fe35bf08aed11dfa7a465.tar.gz
mandoc-f3471bbe850e1ceab86fe35bf08aed11dfa7a465.tar.zst
mandoc-f3471bbe850e1ceab86fe35bf08aed11dfa7a465.zip
If no tags were generated at all, unlink(2) the empty tags file as
soon as the condition can be detected and do not pass it to less(1). This may happen for man(7) pages, for preformatted pages, and for very simple pages like true(1). The main benefit is that :t inside less(1) yields the clearer diagnostic message "No tags file" rather than the mildly confusing "No such tag in tags file": the latter might encourage further, futile attempts to jump to other tags. Improvement suggested by Leah Neukirchen <leah at vuxu dot org> from The Void.
-rw-r--r--main.c4
-rw-r--r--tag.c15
2 files changed, 14 insertions, 5 deletions
diff --git a/main.c b/main.c
index a535023b..b11f7b51 100644
--- a/main.c
+++ b/main.c
@@ -1,4 +1,4 @@
-/* $Id: main.c,v 1.331 2019/07/15 21:41:08 schwarze Exp $ */
+/* $Id: main.c,v 1.332 2019/07/19 20:27:25 schwarze Exp $ */
/*
* Copyright (c) 2008-2012 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2010-2012, 2014-2019 Ingo Schwarze <schwarze@openbsd.org>
@@ -1194,7 +1194,7 @@ spawn_pager(struct tag_files *tag_files)
use_ofn = 1;
#if HAVE_LESS_T
- if ((cmdlen = strlen(argv[0])) >= 4) {
+ if (*tag_files->tfn != '\0' && (cmdlen = strlen(argv[0])) >= 4) {
cp = argv[0] + cmdlen - 4;
if (strcmp(cp, "less") == 0) {
argv[argc++] = mandoc_strdup("-T");
diff --git a/tag.c b/tag.c
index 4ba38241..43571c7f 100644
--- a/tag.c
+++ b/tag.c
@@ -1,4 +1,4 @@
-/* $Id: tag.c,v 1.22 2019/07/10 19:39:01 schwarze Exp $ */
+/* $Id: tag.c,v 1.23 2019/07/19 20:27:25 schwarze Exp $ */
/*
* Copyright (c) 2015, 2016, 2018, 2019 Ingo Schwarze <schwarze@openbsd.org>
*
@@ -225,6 +225,7 @@ tag_write(void)
struct tag_entry *entry;
size_t i;
unsigned int slot;
+ int empty;
if (tag_files.tfd <= 0)
return;
@@ -235,12 +236,16 @@ tag_write(void)
}
if ((stream = fdopen(tag_files.tfd, "w")) == NULL)
mandoc_msg(MANDOCERR_FDOPEN, 0, 0, "%s", strerror(errno));
+ empty = 1;
entry = ohash_first(&tag_data, &slot);
while (entry != NULL) {
- if (stream != NULL && entry->prio >= 0)
- for (i = 0; i < entry->nlines; i++)
+ if (stream != NULL && entry->prio >= 0) {
+ for (i = 0; i < entry->nlines; i++) {
fprintf(stream, "%s %s %zu\n",
entry->s, tag_files.ofn, entry->lines[i]);
+ empty = 0;
+ }
+ }
free(entry->lines);
free(entry);
entry = ohash_next(&tag_data, &slot);
@@ -251,6 +256,10 @@ tag_write(void)
else
close(tag_files.tfd);
tag_files.tfd = -1;
+ if (empty) {
+ unlink(tag_files.tfn);
+ *tag_files.tfn = '\0';
+ }
}
void