vttest menu 11 → 2 → 3, "Page Format Tests", judges these itself — it fills the page and reports how much of what it asked for it got:
DECSCPP: Screen should be filled (80 of 80 columns) ok
Screen should be filled (80 of 132 columns) <-- asked 132, got 80
DECSLPP: Screen should be filled (24 of 24 rows) ok
Screen should be filled (24 of 25 rows) <-- asked 25, got 24
Screen should be filled (24 of 36 rows)
Screen should be filled (24 of 48 rows)
Confirmed from the raw stream that the requests are actually sent: DECSCPP requests: ['', '80', '80', '132', ''], and no DECCOLM anywhere in that test — so this is DECSCPP on its own, not the 132-column path that already works.
Cause
DECSCPP (CSI Ps $ |) has no entry in the CSI identifier table — grep '$|' over CommandExtensions.cs returns nothing, so the sequence is parsed and dropped.
DECSLPP (CSI Ps t, Ps ≥ 24) reaches the window-operation switch, which handles up to case 23 (pop titles) and has nothing above it. CSI 25 t therefore falls through silently.
Expected
Both set the page size, and the emulator already knows how to resize itself — SetColumnMode does exactly this for DECCOLM, gated on Allow80To132.
One difference is worth getting right rather than reusing DECCOLM wholesale: DECCOLM clears the screen and DECSCPP does not. They are different controls with different side effects, and vttest's page-format test fills the screen and then checks it, so a clear would be visible as a failure of a different kind.
CSI Ps t is shared between DECSLPP and the dtterm window operations, and Ps ≥ 24 is the split — worth a comment where the switch grows the case, since the overlap is the sort of thing that gets "tidied" later.
Reproduction
wsl vttest
11 # Non-VT100 tests
2 # VT320 features
3 # page-format controls
1 # DECSCPP (or 2 for DECSLPP)
vttest menu 11 → 2 → 3, "Page Format Tests", judges these itself — it fills the page and reports how much of what it asked for it got:
Confirmed from the raw stream that the requests are actually sent:
DECSCPP requests: ['', '80', '80', '132', ''], and no DECCOLM anywhere in that test — so this is DECSCPP on its own, not the 132-column path that already works.Cause
DECSCPP (
CSI Ps $ |) has no entry in the CSI identifier table —grep '$|'overCommandExtensions.csreturns nothing, so the sequence is parsed and dropped.DECSLPP (
CSI Ps t, Ps ≥ 24) reaches the window-operation switch, which handles up tocase 23(pop titles) and has nothing above it.CSI 25 ttherefore falls through silently.Expected
Both set the page size, and the emulator already knows how to resize itself —
SetColumnModedoes exactly this for DECCOLM, gated on Allow80To132.One difference is worth getting right rather than reusing DECCOLM wholesale: DECCOLM clears the screen and DECSCPP does not. They are different controls with different side effects, and vttest's page-format test fills the screen and then checks it, so a clear would be visible as a failure of a different kind.
CSI Ps tis shared between DECSLPP and the dtterm window operations, and Ps ≥ 24 is the split — worth a comment where the switch grows the case, since the overlap is the sort of thing that gets "tidied" later.Reproduction