Follow-up Comment #6, bug #64466 (group groff):

Revised patch.


diff --git a/ChangeLog b/ChangeLog
index b187d7026..126b06bb2 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,18 @@
+2026-09-03  G. Branden Robinson <[email protected]>
+
+       [ms]: Improve diagnostics involving keeps/diversions.
+
+       * tmac/s.tmac: Introduce new Boolean-valued register in `kp`
+       module, `kp*in-keep`, tracking that element of package state.
+       (pg@super-eject): Enhance diagnostic to supply a hint about why
+       a diversion might still be open when the document ends.
+       (KS, KF): Check `kp*in-keep`; if already true, throw error
+       diagnostic and return early.  Otherwise, make it true.
+       (KE): Make `kp*in-keep` false.  Clarify error diagnostic.
+
+       Fixes <https://savannah.gnu.org/bugs/?64466>.  Thanks to Doug
+       McIlroy for the report.
+
 2026-09-03  G. Branden Robinson <[email protected]>
 
        * configure.ac: Defeat C23/C++23 presumption.  We want to be
diff --git a/tmac/s.tmac b/tmac/s.tmac
index 92a664a9a..98fc11cfb 100644
--- a/tmac/s.tmac
+++ b/tmac/s.tmac
@@ -834,7 +834,8 @@ .de pg*footer
 .de pg@super-eject
 .br
 .if !'\\n(.z'' \{\
-.      ds @msg diversion open while ejecting page\"
+.      ds @msg diversion open while ejecting page;\"
+.      as @msg " possible .KS/.KF/.KE mismatch\"
 .      as @msg " (last file seen: \\*[@last-file-seen])\"
 .      @error-recover \\*[@msg]
 .      rm @msg
@@ -1047,12 +1048,23 @@ .de fn@print-sep
 .\" ******** module kp ********
 .\" ***************************
 .\" Keeps.
+.nr kp*in-keep 0
 .de KS
 .br
+.if \\n[kp*in-keep] \{\
+.      @error ignoring .\\$0: cannot nest keeps
+.      return
+.\}
+.nr kp*in-keep 1
 .di kp@div
 ..
 .de KF
+.if \\n[kp*in-keep] \{\
+.      @error ignoring .\\$0: cannot nest keeps
+.      return
+.\}
 .if !'\\n(.z'' .@error-recover .KF while diversion open
+.nr kp*in-keep 1
 .di kp@fdiv
 .ev k
 .if \\n[@is-initialized] \{\
@@ -1062,9 +1074,10 @@ .de KF
 ..
 .de KE
 .nr kp*did-closure-succeed 0
+.nr kp*in-keep 0
 .if '\\n(.z'kp@div'  .kp*end
 .if '\\n(.z'kp@fdiv' .kp*fend
-.if !\\n[kp*did-closure-succeed] .@error .KE without .KS or .KF
+.if !\\n[kp*did-closure-succeed] .@error .KE without (valid) .KS or .KF
 .rr kp*did-closure-succeed
 ..
 .de @div-end!kp@div




    _______________________________________________________

Reply to this item at:

  <https://savannah.gnu.org/bugs/?64466>

_______________________________________________
Message sent via Savannah
https://savannah.gnu.org/

Attachment: signature.asc
Description: PGP signature

Reply via email to