colors-rewrite #1
Reference in New Issue
Block a user
Delete Branch "colors-rewrite"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Swap the rendering core. The previous backend (vt100 0.16) only stored six attributes — fg/bg color, bold, dim, italic, underline, inverse — and silently dropped everything else when re-emitting the screen. With modern Claude Code that meant losing OSC 8 hyperlinks, strikethrough, fancy underline styles, underline color, and so on. New stack: * wezterm-term::Terminal handles the byte-driven VT emulation. Its cell model preserves the full modern attribute set including hyperlinks and underline color. * termwiz::surface::Surface is used as a "mirror of last emitted state." Each render diffs the terminal's current visible lines against this mirror to compute the minimum change set. * termwiz::render::TerminfoRenderer encodes those Changes as bytes using a TrueColor + hyperlink-capable capability profile. A defensive OSC 8 close is appended to every render to handle the case where the diff ends inside a hyperlinked region (the renderer only emits the close on transition to a non-hyperlinked cell). Both termwiz and wezterm-term are pulled from the wezterm git repo at a pinned rev so the Line types unify across the dep graph. Test results, against the color-preservation harness from the previous commit (run via cargo test color_preservation -- --ignored on master): baseline (vt100): 0 / 5 passing after this commit: 3 / 5 passing (osc8, strikethrough, double underline) The two still-ignored tests (curly underline, underline color) are upstream renderer limitations: termwiz's TerminfoRenderer only emits Single/Double underline and never emits SGR 58. The cell model stores both correctly; only the emit step drops them. Tests are kept #[ignore] with comments calling out the upstream gap. Total: 118 passed, 4 ignored, 0 failed.