bug-bash
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH 16/18] doc/bash.1: fix latent formatting problem


From: G. Branden Robinson
Subject: [PATCH 16/18] doc/bash.1: fix latent formatting problem
Date: Wed, 31 Jan 2024 02:43:31 -0600

Dialing up groff 1.23.0 man(7)'s "CHECKSTYLE" warning feature provoked
the following diagnostic.

an.tmac:doc/bash.1:8043: style: 1 leading space(s) on input line

Leading spaces are warned about because they cause the line to break,
which is often a surprise to man page authors when text is filled.

Here, it doesn't matter because this is a paragraph tag and a break has
just happened anyway.  The reason this is termed a leading space
nevertheless when there appears to be stuff preceding it on the line
demands explanation, and offers an illustrative example of why macro
package features should be preferred over formatter ones where possible.

groff's Texinfo manual explains:
     '\f' is not tokenized when GNU 'troff' reads its input; it instead
     updates the environment.

On historical troffs, the tokenization of whatever is at the beginning
of an input line is coupled with the bit of parser state that decides
whether it is "at the beginning of the line".  Therefore, on these
troffs, the formatter thinks it is still at the beginning of the input
line after it processes any number of `\f` escape sequences there (along
with `\s`, `\H`, `\S`, and groff's `\F`, `\m`, `\M`, and `\R`).[1]  This
isn't troff's greatest hit, which is why GNU troff doesn't couple these.
But it must be kept in mind for AT&T-compatible troffs.  (GNU troff's
"compatibility mode" respects this quirk, so it applies to groff
installations on Solaris 10/11, where the formatter is configured to
operate in compatibility mode by default.)

Here's the rendered result fix, with diff annotation:
-      .  filename [arguments]
+     .  filename [arguments]
      source filename [arguments]

[1] Now that I've enumerated these, forget you ever saw them for the
    purpose of man page composition; they are either not portable or do
    nothing on a terminal anyway.  Try to forget `\f`, too.  ;-)
---
 doc/bash.1 | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/doc/bash.1 b/doc/bash.1
index ec1f8ce1..61e9b758 100644
--- a/doc/bash.1
+++ b/doc/bash.1
@@ -8049,7 +8049,7 @@ .SH "SHELL BUILTIN COMMANDS"
 redirections.
 The return status is zero.
 .TP
-\fB .\| \fP \fIfilename\fP [\fIarguments\fP]
+\fB\&.\| \fP \fIfilename\fP [\fIarguments\fP]
 .PD 0
 .TP
 \fBsource\fP \fIfilename\fP [\fIarguments\fP]
-- 
2.30.2

Attachment: signature.asc
Description: PGP signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]