DECDHL double-height (box drawing) characters missing in vttest test case #23905

Open
opened 2026-01-31 08:55:41 +00:00 by claunia · 2 comments
Owner

Originally created by @christianparpart on GitHub (Dec 28, 2025).

Windows Terminal version

1.23.13503.0

Windows build number

10.0.22631.0

Other Software

VT100 test program, version 2.7 (20230201)

Steps to reproduce

run vttest, go to menu number 4, press CR a couple of times until the the page is shown yuou'll see in the screenshot that I attached.

Expected Behavior

full box is drawn, for reference, KDE konsole and xterm both show it correctly

Actual Behavior

on the right hand side, some box drawing characters are missing
Image

See also

https://github.com/microsoft/terminal/issues/7865

Originally created by @christianparpart on GitHub (Dec 28, 2025). ### Windows Terminal version 1.23.13503.0 ### Windows build number 10.0.22631.0 ### Other Software VT100 test program, version 2.7 (20230201) ### Steps to reproduce run `vttest`, go to menu number `4`, press CR a couple of times until the the page is shown yuou'll see in the screenshot that I attached. ### Expected Behavior full box is drawn, for reference, KDE konsole and xterm both show it correctly ### Actual Behavior on the right hand side, some box drawing characters are missing <img width="1003" height="769" alt="Image" src="https://github.com/user-attachments/assets/7f0945f4-bcb8-40ba-a43b-7642f26cd0ba" /> ### See also https://github.com/microsoft/terminal/issues/7865
claunia added the Needs-TriageIssue-Bug labels 2026-01-31 08:55:41 +00:00
Author
Owner

@christianparpart commented on GitHub (Dec 28, 2025):

Seems like it is related to HT sequence. I'm guessing that double-width line characters after sequence of HTs is not properly aligned:

vttest 4 - trace excerpt of box drawing fragment
...
        CSI ? 3 l            ; DECRM              ; Reset DEC-mode
        CSI 2 J              ; ED                 ; Erase in Display
        ESC ( 0              ; SCS_G0_SPECIAL     ; Set G0 to DEC Special Character and Line Drawing Set
        ESC ) B              ; SCS_G1_USASCII     ; Set G1 to USASCII
        SI                   ; LS0                ; Shift In; Maps G0 into GL (the default).
        CSI 8;1 H            ; CUP                ; Move cursor to position
        ESC # 3              ; DECDHL_Top         ; Double-Height Line (Top Half)
        'l'
        'q'
        'q'
        'q'
        'q'
        'q'
        'q'
        'q'
        'q'
        'q'
        'q'
        'q'
        'q'
        'q'
        'q'
        'q'
        'q'
        'q'
        'q'
        'q'
        'q'
        'q'
        'q'
        'q'
        'q'
        'q'
        'q'
        'q'
        'q'
        'q'
        'q'
        'q'
        'q'
        'q'
        'q'
        'q'
        'q'
        'q'
        'q'
        'k'
        CSI 9;1 H            ; CUP                ; Move cursor to position
        ESC # 4              ; DECDHL_Bottom      ; Double-Height Line (Bottom Half)
        'l'
        'q'
        'q'
        'q'
        'q'
        'q'
        'q'
        'q'
        'q'
        'q'
        'q'
        'q'
        'q'
        'q'
        'q'
        'q'
        'q'
        'q'
        'q'
        'q'
        'q'
        'q'
        'q'
        'q'
        'q'
        'q'
        'q'
        'q'
        'q'
        'q'
        'q'
        'q'
        'q'
        'q'
        'q'
        'q'
        'q'
        'q'
        'q'
        'k'
        CSI 10;1 H           ; CUP                ; Move cursor to position
        ESC # 3              ; DECDHL_Top         ; Double-Height Line (Top Half)
        'x'
        HT                   ; TAB                ; Tab
        HT                   ; TAB                ; Tab
        HT                   ; TAB                ; Tab
        HT                   ; TAB                ; Tab
        HT                   ; TAB                ; Tab
        'x'
        CSI 11;1 H           ; CUP                ; Move cursor to position
        ESC # 4              ; DECDHL_Bottom      ; Double-Height Line (Bottom Half)
        'x'
        HT                   ; TAB                ; Tab
        HT                   ; TAB                ; Tab
        HT                   ; TAB                ; Tab
        HT                   ; TAB                ; Tab
        HT                   ; TAB                ; Tab
        'x'
        CSI 12;1 H           ; CUP                ; Move cursor to position
        ESC # 3              ; DECDHL_Top         ; Double-Height Line (Top Half)
        'x'
        HT                   ; TAB                ; Tab
        HT                   ; TAB                ; Tab
        HT                   ; TAB                ; Tab
        HT                   ; TAB                ; Tab
        HT                   ; TAB                ; Tab
        'x'
        CSI 13;1 H           ; CUP                ; Move cursor to position
        ESC # 4              ; DECDHL_Bottom      ; Double-Height Line (Bottom Half)
        'x'
        HT                   ; TAB                ; Tab
        HT                   ; TAB                ; Tab
        HT                   ; TAB                ; Tab
        HT                   ; TAB                ; Tab
        HT                   ; TAB                ; Tab
        'x'
...
@christianparpart commented on GitHub (Dec 28, 2025): Seems like it is related to HT sequence. I'm guessing that double-width line characters after sequence of HTs is not properly aligned: <details open> <summary> vttest 4 - trace excerpt of box drawing fragment </summary> ``` ... CSI ? 3 l ; DECRM ; Reset DEC-mode CSI 2 J ; ED ; Erase in Display ESC ( 0 ; SCS_G0_SPECIAL ; Set G0 to DEC Special Character and Line Drawing Set ESC ) B ; SCS_G1_USASCII ; Set G1 to USASCII SI ; LS0 ; Shift In; Maps G0 into GL (the default). CSI 8;1 H ; CUP ; Move cursor to position ESC # 3 ; DECDHL_Top ; Double-Height Line (Top Half) 'l' 'q' 'q' 'q' 'q' 'q' 'q' 'q' 'q' 'q' 'q' 'q' 'q' 'q' 'q' 'q' 'q' 'q' 'q' 'q' 'q' 'q' 'q' 'q' 'q' 'q' 'q' 'q' 'q' 'q' 'q' 'q' 'q' 'q' 'q' 'q' 'q' 'q' 'q' 'k' CSI 9;1 H ; CUP ; Move cursor to position ESC # 4 ; DECDHL_Bottom ; Double-Height Line (Bottom Half) 'l' 'q' 'q' 'q' 'q' 'q' 'q' 'q' 'q' 'q' 'q' 'q' 'q' 'q' 'q' 'q' 'q' 'q' 'q' 'q' 'q' 'q' 'q' 'q' 'q' 'q' 'q' 'q' 'q' 'q' 'q' 'q' 'q' 'q' 'q' 'q' 'q' 'q' 'q' 'k' CSI 10;1 H ; CUP ; Move cursor to position ESC # 3 ; DECDHL_Top ; Double-Height Line (Top Half) 'x' HT ; TAB ; Tab HT ; TAB ; Tab HT ; TAB ; Tab HT ; TAB ; Tab HT ; TAB ; Tab 'x' CSI 11;1 H ; CUP ; Move cursor to position ESC # 4 ; DECDHL_Bottom ; Double-Height Line (Bottom Half) 'x' HT ; TAB ; Tab HT ; TAB ; Tab HT ; TAB ; Tab HT ; TAB ; Tab HT ; TAB ; Tab 'x' CSI 12;1 H ; CUP ; Move cursor to position ESC # 3 ; DECDHL_Top ; Double-Height Line (Top Half) 'x' HT ; TAB ; Tab HT ; TAB ; Tab HT ; TAB ; Tab HT ; TAB ; Tab HT ; TAB ; Tab 'x' CSI 13;1 H ; CUP ; Move cursor to position ESC # 4 ; DECDHL_Bottom ; Double-Height Line (Bottom Half) 'x' HT ; TAB ; Tab HT ; TAB ; Tab HT ; TAB ; Tab HT ; TAB ; Tab HT ; TAB ; Tab 'x' ... ``` </details>
Author
Owner

@j4james commented on GitHub (Dec 28, 2025):

Thanks for raising this. The cause of the problem is the screen resizing that occurs when that test switches from 132 column mode back to 80 columns. The resizing happens in a separate thread which results in the internal state being temporarily out of sync with the actual window size. So when it's rendering that test, it thinks the screen is still 132 columns, which results in those border characters being placed off screen.

You'll get better result by opening a second tab, which will prevent the terminal from resizing. The 132 column tests won't work, but they don't work properly with this bug anyway.

I actually brought this up before in the resizing PR (https://github.com/microsoft/terminal/pull/17721#issuecomment-2291856257), but I don't think anyone created a follow up issue for it.

@j4james commented on GitHub (Dec 28, 2025): Thanks for raising this. The cause of the problem is the screen resizing that occurs when that test switches from 132 column mode back to 80 columns. The resizing happens in a separate thread which results in the internal state being temporarily out of sync with the actual window size. So when it's rendering that test, it thinks the screen is still 132 columns, which results in those border characters being placed off screen. You'll get better result by opening a second tab, which will prevent the terminal from resizing. The 132 column tests won't work, but they don't work properly with this bug anyway. I actually brought this up before in the resizing PR (https://github.com/microsoft/terminal/pull/17721#issuecomment-2291856257), but I don't think anyone created a follow up issue for it.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: starred/terminal#23905