Re: reformatting man pages at SIGWINCH

Alejandro Colomar
2023-04-10T19:57:50Z

[-- Attachment #1.1: Type: text/plain, Size: 2282 bytes --]

Hi Dirk,

On 4/10/23 21:05, Dirk Gouders wrote:
>> For something simpler, you could just count words since the start of the
>> section divided by total words in the section. That should be fast, and
>> I expect, also quite precise. Hyphenating might work against you on
>> this, but on average it shouldn't move you too much.
>
> very pragmatic -- very effective, thanks for that suggestion. I
> started with implementing a simpler version of that (no counting of all
> words in the section):
>
> - Backwards count words until we reach an empty line, the section
> header or the beginning of the document
>
> Stop if it was the section header or beginning of the document
>
> Continue and just count empty lines until we reach the
> section header or the beginning of the document

Hmmmm, good idea.

$ man gcc 2>/dev/null | grep "^$" | wc -l
5462
$ man gcc 2>/dev/null | grep "^$" | wc -l
5462
$ man gcc 2>/dev/null | grep "^$" | wc -l
5464

$ man tzset 2>/dev/null | grep "^$" | wc -l
41
$ man tzset 2>/dev/null | grep "^$" | wc -l
41
$ man tzset 2>/dev/null | grep "^$" | wc -l
41

$ man bash 2>/dev/null | grep "^$" | wc -l
657
$ man bash 2>/dev/null | grep "^$" | wc -l
657
$ man bash 2>/dev/null | grep "^$" | wc -l
658

Of course there were important resizes between those invocations.

>
> 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.

That should give you a quite precise idea of where you were.

>
> 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.
>
> But perhaps, I now learn that empty lines are by no means that constant
> value that I assume...

They seem to be constant. Only with the shortest terminal size I can
have, that number changes, and only by one or two per entire page.

>
> Dirk

Cheers,
Alex

--
<http://www.alejandro-colomar.es/>
GPG key fingerprint: A9348594CE31283A826FBDD8D57633D441E25BB5

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