Hi Niklas, Thanks for the proposal!
The current behavior is intentional. The columns are generated independently, interleaved, and as each line is available it's output, updating orig-st. Updating orig-st with the result of each column would break the row/col numbers. What you propose instead is not updating the full state, but just the non-standard properties. I tend to think these should not persist beyond their columns, but did you have a particular use case in mind that wasn't behaving as expected? -- Alex On Wed, Jan 14, 2026 at 11:07 PM Niklas Böhm via Chicken-hackers < [email protected]> wrote: > Hello everybody, hello Alex, > > I noticed that when using `columnar` that changes to the format state > get swallowed. Digging into this, it's due to the copying of the state > before creating partial output from the following lines (fmt-column.scm, > l. 82f): > > ;; gen threads through it's own state, ignore result > (gen (fmt-set-writer! (copy-fmt-state st) output*)) > > All of the changes to `st` within the gen function will then ignored. > Now I am not exactly sure which changes we want to preserve, but I > believe that at least the `properties` should be kept, as they might > contain meaningful information (which is how I discovered this bug). > Would it make sense to preserve more information from the copied state > or should we leave it at that? Currently my fix (also attached) looks > like: > > ;; gen threads through it's own state, copy over properties > (let ([st (gen (fmt-set-writer! (copy-fmt-state st) output*))]) > (fmt-set-properties! orig-st (fmt-properties st))) > > > Let me know what you think, would be happy to see this included. > > Cheers > Nik >
