Conversation
Two halves of the same gap: a character set the emulator could be told about and then had no way to use. SS2, SS3, LS2 and LS3 (#131). G2 and G3 could be designated and never invoked, so whatever a program put in them printed as ASCII. SO and SI were already the same operation for G1 and G0; the locking shifts join them. The single shifts are held PENDING rather than swapped in, so they expire by being consumed instead of by something remembering to put the old set back, and a shift with no character after it simply never fires. The run-printing fast path is skipped while one is pending, since it prints without translating. The national replacement sets (#132). Nine of them -- French, German, Swedish, Italian, Spanish, Norwegian/Danish, Dutch, Swiss, Finnish -- each remapping a handful of ASCII positions, gated on DECNRCM as the standard requires. Designations are now remembered BY ID, not only as the table they resolved to. A national set means one thing with DECNRCM set and ASCII without it, so a program that designates French and then enables NRC mode expects French -- and it never designates again. Changing the mode re-resolves what is already designated. The DA has advertised feature 9 all along, which is what made this worth implementing rather than removing from the DA: the sets were promised. Verified: G0, G1, LS2 and LS3 all reach the graphics set; SS2 and SS3 shift exactly one character; French reads #@[ with NRC off and the pound, a-grave and degree with it on, in either order of designation and mode. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015XLGxUGrQiUnsqz3yneHsy
Merged
Owner
Author
|
Folded into #141, VTTEST alignment — one PR instead of a stack. Same commits, same content. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #131 and #132 — two halves of the same gap: a character set the emulator could be told about and then had no way to use. Stacked on #134.
Single and locking shifts (#131)
G2 and G3 could be designated and never invoked, so whatever a program put in them printed as ASCII.
HandleEscgainedN,O,n,o:ESC ( 0▒▒▒▒▒▒ESC ) 0+ SO▒▒▒▒▒▒aaa▒▒▒aXX▒XXaaa▒▒▒aXX▒XXSO and SI were already this operation for G1 and G0; the locking shifts join them. The single shifts are held pending rather than swapped in, so they expire by being consumed rather than by something remembering to put the old set back — and a shift with no character after it simply never fires. The run-printing fast path is skipped while one is pending, since it prints without translating.
National replacement sets (#132)
Nine of them — French, German, Swedish, Italian, Spanish, Norwegian/Danish, Dutch, Swiss, Finnish — each remapping a handful of ASCII positions, gated on DECNRCM as the standard requires.
Designations are now remembered by ID, not only as the table they resolved to. That third line is why: a national set means one thing with DECNRCM set and ASCII without it, so a program that designates French and then enables NRC mode expects French — and it never designates again. Changing the mode re-resolves what is already designated.
The primary DA has advertised feature 9 all along, which is what tipped this toward implementing the sets rather than dropping the claim: they were promised.
Verification
2133 passed, 3 skipped, 0 failed. The two skipped tests from #127 for these issues are unskipped here and pass; the probe that originally found both was re-run and is the table above.
Still skipped after this: #123 (DA3, deliberately contested), #124 (DECREQTPARM), #130 (S8C1T).
🤖 Generated with Claude Code
https://claude.ai/code/session_015XLGxUGrQiUnsqz3yneHsy