Linux Manual Pages development
 help / color / mirror / Atom feed
From: Alejandro Colomar <alx@kernel.org>
To: "G. Branden Robinson" <g.branden.robinson@gmail.com>
Cc: Hugo Buddelmeijer <hugo@buddelmeijer.nl>, linux-man@vger.kernel.org
Subject: Re: table layout in console_codes.4 (was: `make -R check` fails due to futex_waitv.2 and console_codes.4 being too wide)
Date: Mon, 19 Oct 2026 18:55:32 +0200	[thread overview]
Message-ID: <atZJ7QGljZ4K50wD@debian> (raw)
In-Reply-To: <20261019130235.ehdncu4zh4mm2h3o@illithid>

[-- Attachment #1: Type: text/plain, Size: 13577 bytes --]

Hi Branden,

> Date: 2026-10-19 08:02:35-0500
> From: "G. Branden Robinson" <g.branden.robinson@gmail.com>
>
> Hi Alex & Hugo,
> 
> At 2026-10-19T08:20:29+0200, Alejandro Colomar wrote:
> > > Date: 2026-10-17 21:19:22+0200
> > > From: Hugo Buddelmeijer <hugo@buddelmeijer.nl>
> > > Running `make -R check` fails because the text in futex_waitv.2 and
> > > console_codes.4 is too wide.
> [...]
> 
> I observe that the failure doesn't tell you why the "check" target is
> failing.  It simply says "GREP" and then the output of grep itself.  We
> are not informed what grep was looking for.
> 
> I also observe that setting `V=1` is useless to get these Makefiles to
> tell us what they're actually doing.

Hmmm, this gave me a good idea.  I don't like this V variable, since
it's unclear what it should do in each project, but I've played with
this patch:

	diff --git i/GNUmakefile w/GNUmakefile
	index 9f3ced6f461b..9b480fe5e52c 100644
	--- i/GNUmakefile
	+++ w/GNUmakefile
	@@ -16,6 +16,7 @@ endif
	 MAKEFLAGS += --no-builtin-rules
	 MAKEFLAGS += --no-builtin-variables
	 MAKEFLAGS += --warn-undefined-variables
	+MAKEFLAGS += --silent
	 
	 
	 ifndef srcdir
	@@ -66,5 +67,4 @@ help:
	 
	 
	 .DELETE_ON_ERROR:
	-.SILENT:
	 FORCE:

and it seems to work.  If you use --no-silent on the command line, it
overrides the default.  I'll check better before committing.

> While attempting to reproduce Hugo's results, I also noticed the
> following messages on stderr.
> 
> TBL             .tmp/man/man3/matherr.3.eqn
> tbl:".tmp/man/man3/matherr.3:204: warning: ignoring excess table entry at row 5, column 6: "\" retval is 0.0/0.0"
> tbl:".tmp/man/man3/matherr.3:205: warning: ignoring excess table entry at row 6, column 6: "\" retval is 0.0/0.0"
> tbl:".tmp/man/man3/matherr.3:206: warning: ignoring excess table entry at row 7, column 6: "\" retval is x/0.0"
> tbl:".tmp/man/man3/matherr.3:241: warning: ignoring excess table entry at row 42, column 6: "\" different from log()"
> tbl:".tmp/man/man3/matherr.3:242: warning: ignoring excess table entry at row 43, column 6: "\" different from log()"
> tbl:".tmp/man/man3/matherr.3:249: warning: ignoring excess table entry at row 50, column 6: "\" +0 and -0"
> tbl:".tmp/man/man3/matherr.3:257: warning: ignoring excess table entry at row 58, column 6: "\" retval is 0.0/0.0"
> 
> (These diagnostic messages are new to the forthcoming groff 1.25.)
> 
> Inspecting the file:
> 
> $ sed -n 194,205p man/man3/matherr.3
> .\" Details below from glibc 2.8's sysdeps/ieee754/k_standard.c
> .\" A subset of cases were test by experimental programs.
> .TS
> lB lB lB cB lB
> l l l c l.
> Function        Type    Result  Msg?    errno
> acos(|x|>1)     DOMAIN  HUGE    y       EDOM
> asin(|x|>1)     DOMAIN  HUGE    y       EDOM
> atan2(0,0)      DOMAIN  HUGE    y       EDOM
> acosh(x<1)      DOMAIN  NAN     y       EDOM    \" retval is 0.0/0.0
> atanh(|x|>1)    DOMAIN  NAN     y       EDOM    \" retval is 0.0/0.0
> atanh(|x|==1)   SING    (x>0.0)?        y       EDOM    \" retval is x/0.0
> 
> This seems like a straightforward case of someone forgetting to update
> the table format--much easier to neglect before I added the new tbl
> diagnostic.  In lieu of a formal patch, here are some replacement lines.

I'd love a formal patch, especially with a good commit message.  :)

> lB lB lB cB lB l
> l  l  l  c  l  l.
> Function	Type	Result	Msg?	errno	\&
> 
> (In the meantime, I'll try and see if the leading double quote before
> the file name in tbl(1)'s diagnostic is due to groff 1.24/1.25 version
> skew in my environment, or a bug in 1.25 I need to fix before final
> release.  It looks like the former.
> 
> $ ~/groff-HEAD/bin/groff -tz -man -T utf8 man/man3/matherr.3
> tbl:man/man3/matherr.3:204: warning: ignoring excess table entry at row 5, column 6: "\" retval is 0.0/0.0"
> tbl:man/man3/matherr.3:205: warning: ignoring excess table entry at row 6, column 6: "\" retval is 0.0/0.0"
> tbl:man/man3/matherr.3:206: warning: ignoring excess table entry at row 7, column 6: "\" retval is x/0.0"
> tbl:man/man3/matherr.3:241: warning: ignoring excess table entry at row 42, column 6: "\" different from log()"
> tbl:man/man3/matherr.3:242: warning: ignoring excess table entry at row 43, column 6: "\" different from log()"
> tbl:man/man3/matherr.3:249: warning: ignoring excess table entry at row 50, column 6: "\" +0 and -0"
> tbl:man/man3/matherr.3:257: warning: ignoring excess table entry at row 58, column 6: "\" retval is 0.0/0.0"
> )
> 
> > > Maybe you could device a better patch though, in particular for
> > > console_codes.  The affected table is much narrower than similar
> > > tables, so some lines that have to be truncated, would easily fit in
> > > one of the other tables.  But I couldn't easily figure out what
> > > determines the column widths, so I didn't fix that.
> > 
> > I think Branden might be better at that; I've added him to CC.
> 
> Here's the table as formatted using groff 1.25 defaults (same as 1.24),
> with the preceding paragraph for context and to make the location of the
> right margin clear.
> 
>      It accepts ESC ] (OSC) for the setting of certain resources.   In  addition
>      to  the ECMA‐48 string terminator (ST), xterm(1) accepts a BEL to terminate
>      an OSC string.  These are a few of the OSC control sequences recognized  by
>      xterm(1):
> 
>      ESC ] 0 ; txt ST           Set icon name and window title to txt.
>      ESC ] 1 ; txt ST           Set icon name to txt.
>      ESC ] 2 ; txt ST           Set window title to txt.
>      ESC ] 4 ; num ; txt ST     Set color num (0‐255) to txt.
>      ESC ] 5 ; 0 ; txt ST       Set the color for bold substitution to txt.
>      ESC ] 5 ; 1 ; txt ST       Set the color for underline substitution to txt.
>      ESC ] 5 ; 2 ; txt ST       Set the color for blinking substitution to txt.
>      ESC ] 5 ; 3 ; txt ST       Set the color for reverse substitution to txt.
>      ESC ] 5 ; 4 ; txt ST       Set the color for italic substitution to txt.
>      ESC ] 6 ; 0 ; val ST       Toggle bold rendition: 0=bold, 1=substitute by color.
>      ESC ] 6 ; 1 ; val ST       Toggle underscore rendition: 0=underscore, 1=color.
>      ESC ] 6 ; 2 ; val ST       Toggle blinking rendition: 0=blinking, 1=color.
>      ESC ] 6 ; 3 ; val ST       Toggle reverse rendition: 0=reverse, 1=color.
>      ESC ] 6 ; 4 ; val ST       Toggle italic rendition: 0=italic, 1=color.
>      ESC ] 10 ; txt ST          Set the foreground text color to txt.
>      ESC ] 11 ; txt ST          Set the background color to txt.
>      ESC ] 12 ; txt ST          Set the text cursor color to txt.
>      ESC ] 13 ; txt ST          Set the mouse cursor foreground color to txt.
>      ESC ] 14 ; txt ST          Set the mouse cursor background color to txt.
>      ESC ] 15 ; txt ST          Set the Tektronix foreground color to txt.
>      ESC ] 16 ; txt ST          Set the Tektronix background color to txt.
>      ESC ] 17 ; txt ST          Set  the  background  text color for highlighted (se‐
>                                 lected) text to txt.
>      ESC ] 18 ; txt ST          Set the Tektronix cursor color to txt.
>      ESC ] 19 ; txt ST          Set the foreground text color  for  highlighted  (se‐
>                                 lected) text to txt.
>      ESC ] 46 ; name ST         Change  log file to name (normally disabled by a com‐
>                                 pile‐time option).
>      ESC ] 50 ; fn ST           Set font to fn (the escape code is normally disabled;
>                                 see "allowFontOps" in xterm(1)).
>      ESC ] 104 ; num ST         Reset color for mode 4;num
>      ESC ] 105 ; num ST         Reset color for mode 5;num
>      ESC ] 106 ; num ; val ST   Exactly equal to 6;num;val.  (no "reset" logic)
>      ESC ] 110 ST               Reset color for mode 10.  Codes 111‐119 map to reset‐
>                                 ting modes 11‐19, respectively.
>      ESC ] mode ; ? ST          Query  the  respective  property/color/etc.    (modes
>                                 4,5,10‐19,50)
> 
> We can see that this line is troublesome:
> 
>      ESC ] 6 ; 0 ; val ST       Toggle bold rendition: 0=bold, 1=substitute by color.
> 
> My hunch is that the rightmost column is not set in a text block when it
> should be.  What's a text block, you ask?
> 
> tbl(1):
>    Text blocks
>      An ordinary table entry’s contents can make a column, and therefore
>      the table, too wide; the table then exceeds the line length of the
>      page, and becomes ugly or is exposed to truncation by the output
>      device.  When a table entry requires more conventional typesetting,
>      breaking across more than one output line (and thereby increasing
>      the height of its row), it can be placed within a text block.
> 
>      tbl interprets a table entry of “T{” at the end of an input line
>      specially, as a token starting a text block.  Similarly, an entry
>      “T}” at the start of an input line ends a text block.  Text block
>      tokens can share an input line with other table data (preceding T{
>      and following T}).  Input lines between these tokens are formatted
>      in a diversion by troff.  Text blocks cannot be nested.  Multiple
>      text blocks can occur in a table row.
> ...
> 
> So let's check the page source.
> 
> $ sed -n 748,762p man/man4/console_codes.4
> .TS
> l l.
> ESC ] 0 ; \f[I]txt\f[] ST       T{
> Set icon name and window title to
> .IR txt .
> T}
> ESC ] 1 ; \f[I]txt\f[] ST       Set icon name to \f[I]txt\f[].
> ESC ] 2 ; \f[I]txt\f[] ST       Set window title to \f[I]txt\f[].
> ESC ] 4 ; \f[I]num\f[] ; \f[I]txt\f[] ST        Set color \f[I]num\f[] (0-255) to \f[I]txt\f[].
> ESC ] 5 ; 0 ; \f[I]txt\f[] ST   Set the color for bold substitution to \f[I]txt\f[].
> ESC ] 5 ; 1 ; \f[I]txt\f[] ST   Set the color for underline substitution to \f[I]txt\f[].
> ESC ] 5 ; 2 ; \f[I]txt\f[] ST   Set the color for blinking substitution to \f[I]txt\f[].
> ESC ] 5 ; 3 ; \f[I]txt\f[] ST   Set the color for reverse substitution to \f[I]txt\f[].
> ESC ] 5 ; 4 ; \f[I]txt\f[] ST   Set the color for italic substitution to \f[I]txt\f[].
> ESC ] 6 ; 0 ; \f[I]val\f[] ST   Toggle bold rendition: 0=bold, 1=substitute by color.
> 
> Yup.
> 
> The fix is straightforward: put the table cell in a text block.  But
> there is one other entry in this table that is too wide.
> 
> $ diff -u man/man4/console_codes.4{.old,}

No git-diff(1)?  :D

> --- man/man4/console_codes.4.old        2026-10-19 07:40:06.562768271 -0500
> +++ man/man4/console_codes.4    2026-10-19 07:44:11.729514217 -0500
> @@ -759,8 +759,12 @@
>  ESC ] 5 ; 2 ; \f[I]txt\f[] ST  Set the color for blinking substitution to \f[I]txt\f[].
>  ESC ] 5 ; 3 ; \f[I]txt\f[] ST  Set the color for reverse substitution to \f[I]txt\f[].
>  ESC ] 5 ; 4 ; \f[I]txt\f[] ST  Set the color for italic substitution to \f[I]txt\f[].
> -ESC ] 6 ; 0 ; \f[I]val\f[] ST  Toggle bold rendition: 0=bold, 1=substitute by color.
> -ESC ] 6 ; 1 ; \f[I]val\f[] ST  Toggle underscore rendition: 0=underscore, 1=color.
> +ESC ] 6 ; 0 ; \f[I]val\f[] ST  T{
> +Toggle bold rendition: 0=bold, 1=substitute by color.
> +T}
> +ESC ] 6 ; 1 ; \f[I]val\f[] ST  T{
> +Toggle underscore rendition: 0=underscore, 1=color.
> +T}
>  ESC ] 6 ; 2 ; \f[I]val\f[] ST  Toggle blinking rendition: 0=blinking, 1=color.
>  ESC ] 6 ; 3 ; \f[I]val\f[] ST  Toggle reverse rendition: 0=reverse, 1=color.
>  ESC ] 6 ; 4 ; \f[I]val\f[] ST  Toggle italic rendition: 0=italic, 1=color.
> 
> I still got the warning about the table being too wide, spuriously.
> That appears to be due a workaround for old bugs in GNU tbl.[1]
> 
> $ git grep NROFF_LINE_LENGTH
> share/mk/configure/build-depends/groff-base/nroff.mk:ifndef NROFF_LINE_LENGTH
> share/mk/configure/build-depends/groff-base/nroff.mk:NROFF_LINE_LENGTH    ::= $(shell $(EXPR) $(MANWIDTH) - 2)
> share/mk/configure/build-depends/groff-base/nroff.mk:   -rLL=$(NROFF_LINE_LENGTH)n \
> 
> I was able to get a complete, successful check with the following
> command.
> 
> $ make -R check NROFF_LINE_LENGTH=80 NROFFFLAGS=-Wstyle

Thanks!  Would you mind sending a formal patch set?  =)

> I needed to override `NROFFFLAGS` because of a new warning category in
> the forthcoming groff 1.25.
> 
> groff NEWS:
> *  The formatter supports a new warning category, "style".  It is used
>    to diagnose input that is non-idiomatic or likely to produce an
>    unexpected result (or none at all), but is not invalid.
> 
> One of the things it warns about is failure to break an input line after
> the end of a sentence is detected.  The Linux man-pages may want to
> disable that warning category by default until those have been cleaned
> up.  Enabling it will, of course, permit machine-driven identification
> of sites requiring such cleanup, which has to date been tedious,
> requiring manual inspection or application of regexes that can be
> thwarted by the *roff language's context-dependent grammar.

We'll see when it arrives.  :)


Have a lovely night!
Alex

> 
> Regards,
> Branden
> 
> [1] https://savannah.gnu.org/bugs/?63749
>     https://savannah.gnu.org/bugs/?63640
>     https://savannah.gnu.org/bugs/?62471



-- 
<https://www.alejandro-colomar.es>

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

  reply	other threads:[~2026-10-19 16:55 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-10-17 19:19 `make -R check` fails due to futex_waitv.2 and console_codes.4 being too wide Hugo Buddelmeijer
2026-10-19  6:20 ` Alejandro Colomar
2026-10-19 13:02   ` table layout in console_codes.4 (was: `make -R check` fails due to futex_waitv.2 and console_codes.4 being too wide) G. Branden Robinson
2026-10-19 16:55     ` Alejandro Colomar [this message]
2026-10-19 18:32     ` table layout in console_codes.4 Hugo Buddelmeijer
2026-10-19 22:41       ` table layout in console_codes.4 (was: `make -R check` fails due to futex_waitv.2 and console_codes.4 being too wide) G. Branden Robinson

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=atZJ7QGljZ4K50wD@debian \
    --to=alx@kernel.org \
    --cc=g.branden.robinson@gmail.com \
    --cc=hugo@buddelmeijer.nl \
    --cc=linux-man@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox