Update of bug#65189 (group groff):
Status: None => Confirmed
Assigned to: None => gbranden
_______________________________________________________
Follow-up Comment #1:
Hi Dirk,
Thanks for the report.
And thank you _very_ much for trimming the page down to make a simpler
reproducing case!
I note that the `-s` and `-Tutf8` options don't seem to matter. (One has to
select _some_ terminal output device, but `-Tascii` works--or fails--just as
well.)
You could therefore simplify your command-line recipe.
$ nroff -t -man lsp-help.broken.1
-verabtim-
...in case you aim to write a regression test around this.
I can further verify that this problem affects _groff_ 1.22.3, 1.22.4, 1.23.0,
and Git HEAD.
This appears to be the same bug that afflicts the _ascii_(7) document in the
Linux man-pages project; in other words, I've seen it before.
I also observe that while the "non-broken" lsp-help.1 specimen does not
provoke a warning from _grotty_, it doesn't format correctly, either.[1]
+verbatim+
$ groff -rLL=65n -Tascii -t -man lsp-help.1
lsp-help(1) lsp online help lsp-help(1)
General Information
lsp lists file content in pages; the content can come from
files on disk and from standard input, e.g. manual pages.
Interacting with lsp
General keys
-----------------+-----------------------------------------------
Keyboard / Mouse | Action
-----------------+-----------------------------------------------
q | - Quit lsp.
| - Quit TOC mode.
| - Close this help.
-----------------+-----------------------------------------------
h | Show this online help.
-----------------+-----------------------------------------------
Handling manual pages
-----------------+-----------------------------------------------
Keyboard / Mouse | Action
-----------------+-----------------------------------------------
TAB | go to next valid reference in the manual page
-----------------+-----------------------------------------------
Shift-TAB | go to previous valid reference
-----------------+-----------------------------------------------
ENTER | open current reference
-----------------+-----------------------------------------------
a | show apropos(1) buffer of all manual pages on
| the system
| (The above commands can then be used to visit
| those references.)
-----------------+-----------------------------------------------
m | open another manual page
-----------------+-----------------------------------------------
T | TOC mode: toggle through three levels of a
| TOC (or folding) mode:
| 1) Only content starting in column 1 is
| shown.
| 2) Additionaly, content starting in column 4
| is shown.
| 3) Add content starting in column 8, but only
| if it is followed by a line with deeper in-
| dentation.
| This mode is left by pressing 'q' or ENTER to
| jump to the highlighted entry.
-----------------+-----------------------------------------------
Movement in files
-----------------------------------------------------------------
Keyboard / Mouse Action
-----------------------------------------------------------------
b
Page up backward one page
-----------------------------------------------------------------
Key up backward one line
-----------------------------------------------------------------
ENTER
Key down forward one line
-----------------------------------------------------------------
f
Page down
SPACE forward one page
-----------------------------------------------------------------
< backward to first page
-----------------------------------------------------------------
> forward to last page
-----------------------------------------------------------------
C-l In a search: bring the current match to the
top of the page
-----------------+-----------------------------------------------
| Searching in files
-----------------+-----------------------------------------------
Keyboard / Mouse | Action
-----------------+-----------------------------------------------
/ | search forward for regular expression
-----------------+-----------------------------------------------
? | search backward for regular expression
-----------------+-----------------------------------------------
n | find next match
-----------------+-----------------------------------------------
p | find previous match
-----------------+-----------------------------------------------
| Switching open files
-----------------+-----------------------------------------------
Keyboard / Mouse | Action
-----------------+-----------------------------------------------
B | show list of open files for selection
-----------------+-----------------------------------------------
ENTER | switch to selected file
-----------------+-----------------------------------------------
c | kill (close) active file
-----------------+-----------------------------------------------
| Toggling options
-----------------+-----------------------------------------------
Keyboard / Mouse | Action
-----------------+-----------------------------------------------
-c | toggle chopping of lines that do not fit the
| current width of the screen.
-----------------+-----------------------------------------------
<ESC> |
-h | toggle highlighting of search matches
-----------------+-----------------------------------------------
-i | toggle case sensitivity in searches
-----------------+-----------------------------------------------
-n | toggle line numbering
-----------------+-----------------------------------------------
-V | toggle verification of references
-----------------+-----------------------------------------------
|
| 03/24/2023 lsp-help(1)
|
|
|
|
|
|
|
1. The vertical rule that should lie between the columns in the "Movement in
files" section of the table is missing; and
2. the vertical rule in the final section of the table is senselessly
overdrawn below.
I *believe*, but am not certain because I haven't proven the fix I have in
mind yet, that these both arise from the same underlying issue, that being the
trick that _groff_'s _man_ and _mdoc_ macro packages employ to implement
"continuous rendering mode". I observe that if I add the line
.pl 99999v
after the `TH` macro call in either page, both problems go away.
If you'd like to assume I'll get the problem fixed for _groff_ 1.24.0 (and I
would), you can add the following workaround after the `TH` line in your
production page.
.if \n(.g \{\
. \" Work around Savannah #65189.
. if n .do if \n[cR] .do if ((\n[.x] = 1) & (\n[.y] < 24)) .pl 99999v
.\}
What this does is set the page length to 99,999 "vees" or lines...but only
if:
1. _groff_ (or an implementation claiming compatibility with it) is the
formatter;
2. the formatter is in "_nroff_ mode" (preparing output for a terminal);
3. continuous rendering mode is enabled (the default in _nroff mode, but can
be changed); and
4. the version number of _groff_ is less than 1.24.
The foregoing assumes your man page will not grow beyond 100,000 lines. Let
me know if you expect that to be a problem, and I can prescribe something more
complicated to achieve the same goal.
Regards,
Branden
[1] I have made the man page artificially narrow for ergonomic purposes in
this Savannah ticket. That in turn provokes a legitimate warning from the
document.
lsp-help.1:29: warning: table wider than line length minus indentation
You can ignore this unless you want your page to be portable to _nroff_ output
on System V Unix, where the default line length for _man_ pages was 65n (65
characters)--but from what I've seen, that line of _tbl_ development had
pretty awful problems with tables on terminal devices anyway.
On GNU/Linux systems, historically a line length of 78n was used--no one ever
seemed to document why, but my surmise is that this was a convention developed
to work around undocumented/unreported bugs in GNU _tbl_. In _groff_ 1.23.0,
some of those bugs were fixed and you can use 79n. In _groff_ 1.24.0, you
will be able use the full 80n of quasi-standard terminals. Of course you can
always overset a line on purpose by turning off fill mode and not breaking a
long line yourself. But GNU _tbl_ will warn about overlong table lines.
_______________________________________________________
Reply to this item at:
<https://savannah.gnu.org/bugs/?65189>
_______________________________________________
Message sent via Savannah
https://savannah.gnu.org/