linux-man.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "G. Branden Robinson" <g.branden.robinson@gmail.com>
To: Dirk Gouders <dirk@gouders.net>
Cc: Alejandro Colomar <alx.manpages@gmail.com>,
	Eli Zaretskii <eliz@gnu.org>,
	linux-man@vger.kernel.org, help-texinfo@gnu.org,
	groff <groff@gnu.org>
Subject: Re: reformatting man pages at SIGWINCH
Date: Mon, 10 Apr 2023 15:24:22 -0500	[thread overview]
Message-ID: <20230410202422.s4xdqcdxzsgdge7v@illithid> (raw)
In-Reply-To: <ghsfd7k16z.fsf@gouders.net>

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

Hi Dirk,

At 2023-04-10T21:05:24+0200, Dirk Gouders wrote:
> This relies on the assumption that horizontal resizes don't create or
> delete emty lines and it still has the weakness that manual pages
> (e.g. bash(1)) contain large areas without empty lines but it's
> definitely better than just staying at the position as it was before.

I think this assumption should hold for man and mdoc documents rendered
by a *roff--I'm not sure about mandoc(1), but it probably will for
reasons I'll elaborate below.

Vertical space in *roff documents might get reduced at page breaks, but
not to zero, except at page breaks.

There are a few reasons that I think reinforce the assumption holding:

1.  man(7) and mdoc(7) don't offer macros for just sticking an arbitrary
amount of vertical space into a document.  If you want that, you'll need
to go down to formatter requests, which is seldom done by human man page
authors, but a bit more frequently by automated generators of man(7) or
mdoc(7) from other formats.

2.  Even in traditional *roff, if you issued an ".sp 6" request
(demanding 6 blank lines), then if you were within 6 lines of a "trap"
(usually a page footer trap or the actual bottom of the page), the
result would be that you'd get blank lines until the trap sprung, and
any excess would be thrown away.  So if there were only 4 lines of
distance to the page footer, the leftover two would be discarded and
_not_ appear after the header of the next page.[1]

3.  mandoc(1) and groff's man(7) and mdoc(7) macro packages both
implement "continuous rendering" for terminal output.  This means that
they contrive to arrange for an effectively infinite page length, so
there are no page breaks.  (Except when you render multiple man pages at
a time, a use case groff 1.23.0 will support.) Since pager programs are
applicable only to terminal output in the first place, this should
address your use case.  (You _can_ turn off continuous rendering in
groff, and see man pages as they would have formatted for Western
Electric Teletype machines, which printed to long spools of paper with
66 lines to the nominal page.)

4.  A habit has grown up among man(1) programs and pagers to call for
and support, respectively, a "blank line squeezing" feature: any runs of
more than one blank line are condensed to 1 blank line each.  In groff
1.23.0, this will no longer be necessary when continuously rendering.
(Historically, this squeezing feature was used to "tighten up" vertical
space after the page header, prior to the "NAME" section heading of the
document.)  In my opinion, pager programs should perform as few
transformations as possible on the output of grotty(1), the groff output
driver that supports terminal devices.  The long-time author and
maintainer of less(1) does not agree, so you have to call that program
with its "-R" flag to view grotty(1) output as groff intends it.  (To
see what those intentions are, format the document without paging it.)

> If it turns out to still be too weak, I could count all words between
> two empty lines and set that in relation to the words from the
> preceeding empty line.

You might do this only as a fallback, if there were no blank lines on
the screen at the old window size when the resizing event happened.

> But perhaps, I now learn that empty lines are by no means that
> constant value that I assume...

In my opinion, the presence or absence of a single blank line in
formatted output is important.  groff 1.23.0 will feature some bug fixes
with respect to their handling within and adjacent to tbl(1) input.[2]

Since I flogged groff 1.23.0 three times in this email, I suppose I
should point people to where they can get the 1.23.0.rc3 release
candidate source archive.  Feedback would be appreciated.

https://alpha.gnu.org/gnu/groff/

Regards,
Branden

[1] For example, give the following input to "nroff | cat -n".

--snip--
.pl 10v
.nf
The page length is set to 10 vees.
2
3
4
5
Asking for 6 vees of space now.
.sp 6
How many appeared?
--end snip--

[2] https://savannah.gnu.org/bugs/?57665
    https://savannah.gnu.org/bugs/?49390

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

  parent reply	other threads:[~2023-04-10 20:24 UTC|newest]

Thread overview: 73+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-03-25 20:37 Playground pager lsp(1) Dirk Gouders
2023-03-25 20:47 ` Dirk Gouders
2023-04-04 23:45   ` Alejandro Colomar
2023-04-05  5:35     ` Eli Zaretskii
2023-04-06  1:10       ` Alejandro Colomar
2023-04-06  8:11         ` Eli Zaretskii
2023-04-06  8:48           ` Gavin Smith
2023-04-07 22:01           ` Alejandro Colomar
2023-04-08  7:05             ` Eli Zaretskii
2023-04-08 13:02               ` Accessibility of man pages (was: Playground pager lsp(1)) Alejandro Colomar
2023-04-08 13:42                 ` Eli Zaretskii
2023-04-08 16:06                   ` Alejandro Colomar
2023-04-08 13:47                 ` Colin Watson
2023-04-08 15:42                   ` Alejandro Colomar
2023-04-08 19:48                   ` Accessibility of man pages Dirk Gouders
2023-04-08 20:02                     ` Eli Zaretskii
2023-04-08 20:46                       ` Dirk Gouders
2023-04-08 21:53                         ` Alejandro Colomar
2023-04-08 22:33                           ` Alejandro Colomar
2023-04-09 10:28                       ` Ralph Corderoy
2023-04-08 20:31                     ` Ingo Schwarze
2023-04-08 20:59                       ` Dirk Gouders
2023-04-08 22:39                         ` Ingo Schwarze
2023-04-09  9:50                           ` Dirk Gouders
2023-04-09 10:35                             ` Dirk Gouders
     [not found]                 ` <87a5zhwntt.fsf@ada>
2023-04-09 12:05                   ` Compressed man pages (was: Accessibility of man pages (was: Playground pager lsp(1))) Alejandro Colomar
2023-04-09 12:17                     ` Alejandro Colomar
2023-04-09 18:55                       ` G. Branden Robinson
2023-04-09 12:29                     ` Colin Watson
2023-04-09 13:36                       ` Alejandro Colomar
2023-04-09 13:47                         ` Compressed man pages Ralph Corderoy
2023-04-12  8:13                     ` Compressed man pages (was: Accessibility of man pages (was: Playground pager lsp(1))) Sam James
2023-04-12  8:32                       ` Compressed man pages Ralph Corderoy
2023-04-12 10:35                         ` Mingye Wang
2023-04-12 10:55                           ` Ralph Corderoy
2023-04-12 13:04                       ` Compressed man pages (was: Accessibility of man pages (was: Playground pager lsp(1))) Kerin Millar
2023-04-12 14:24                         ` Alejandro Colomar
2023-04-12 18:52                           ` Mingye Wang
2023-04-12 20:23                             ` Compressed man pages Alejandro Colomar
2023-04-13 10:09                             ` Ralph Corderoy
2023-04-07  2:18         ` Playground pager lsp(1) G. Branden Robinson
2023-04-07  6:36           ` Eli Zaretskii
2023-04-07 11:03             ` Gavin Smith
2023-04-07 14:43             ` man page rendering speed (was: Playground pager lsp(1)) G. Branden Robinson
2023-04-07 15:06               ` Eli Zaretskii
2023-04-07 15:08                 ` Larry McVoy
2023-04-07 17:07                 ` man page rendering speed Ingo Schwarze
2023-04-07 19:04                 ` man page rendering speed (was: Playground pager lsp(1)) Alejandro Colomar
2023-04-07 19:28                   ` Gavin Smith
2023-04-07 20:43                     ` Alejandro Colomar
2023-04-07 16:08               ` Colin Watson
2023-04-08 11:24               ` Ralph Corderoy
2023-04-07 21:26           ` reformatting man pages at SIGWINCH " Alejandro Colomar
2023-04-07 22:09             ` reformatting man pages at SIGWINCH Dirk Gouders
2023-04-07 22:16               ` Alejandro Colomar
2023-04-10 19:05                 ` Dirk Gouders
2023-04-10 19:57                   ` Alejandro Colomar
2023-04-10 20:24                   ` G. Branden Robinson [this message]
2023-04-11  9:20                     ` Ralph Corderoy
2023-04-11  9:39                     ` Dirk Gouders
2023-04-17  6:23                       ` G. Branden Robinson
2023-04-08 11:40               ` Ralph Corderoy
2023-04-05 10:02     ` Playground pager lsp(1) Dirk Gouders
2023-04-05 14:19       ` Arsen Arsenović
2023-04-05 18:01         ` Dirk Gouders
2023-04-05 19:07           ` Eli Zaretskii
2023-04-05 19:56             ` Dirk Gouders
2023-04-05 20:38             ` A less presumptive .info? (was: Re: Playground pager lsp(1)) Arsen Arsenović
2023-04-06  8:14               ` Eli Zaretskii
2023-04-06  8:56                 ` Gavin Smith
2023-04-07 13:14                 ` Arsen Arsenović
2023-04-06  1:31       ` Playground pager lsp(1) Alejandro Colomar
2023-04-06  6:01         ` Dirk Gouders

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=20230410202422.s4xdqcdxzsgdge7v@illithid \
    --to=g.branden.robinson@gmail.com \
    --cc=alx.manpages@gmail.com \
    --cc=dirk@gouders.net \
    --cc=eliz@gnu.org \
    --cc=groff@gnu.org \
    --cc=help-texinfo@gnu.org \
    --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;
as well as URLs for NNTP newsgroup(s).