[1.2.5] - 2026-03-05
Added
-
[font] suppress_boldconfig option:
When the installed Nerd Font lacks a Bold face, the OS font-fallback
substitutes a non-Nerd-Font Bold face for PUA code points, causing
Powerline separators and icons to render incorrectly. Setting
suppress_bold = truetells wtmux never to emit SGR 1 (Bold), keeping
all glyphs in the Regular face that contains the PUA glyphs. -
--vt-traceflag: records every raw byte received from the PTY
to%LOCALAPPDATA%\wtmux\vt_trace.login hex-dump + UTF-8 annotation
format. Useful for diagnosing prompt and colour rendering issues. -
VtParser::feed_char(): new method that routes decoded Unicode
characters through the parser state machine. Prevents multi-byte UTF-8
characters from bypassing string-body states (DCS, APC, …) and being
written directly to the screen buffer.
Fixed
-
SGR 7 (Reverse Video) ignored by renderer — root cause of Powerline
colour rendering failure:
oh-my-posh draws every Powerline separator arrow withESC[7m(Reverse
Video).AttrFlags::INVERSEwas set correctly by the parser but
apply_attrs_with_selection()never emitted it. Fixed by passing
ESC[7mplus the original FG/BG colours through to the host terminal,
letting the host perform the colour swap using its own background colour
(theme-dependent; cannot be computed inside wtmux). -
Font config breaking Powerline rendering when
familyis set:
Windows Terminal implements OSC 50 and switches to the named font when
received. If that font lacks Nerd Font / Powerline glyphs the arrows and
icons break.apply_font_config()no longer emits OSC 50. Font must be
configured in Windows Terminal'ssettings.jsonusing a Nerd Font variant. -
DCS / APC / SOS / PM string sequences not consumed by VT parser:
ESC P(DCS),ESC _(APC),ESC X(SOS), andESC ^(PM) had no
handling; the parser fell through to Ground and wrote the body bytes as
visible characters. AddedDcsString,ApcString,SosString, and
PmStringstates that consume content until ST (ESC 0x5C) or BEL. -
Multi-byte UTF-8 characters bypassing parser state machine:
session::feed_bytes()decoded multi-byte sequences and called
put_char()directly, skipping the parser. Characters inside DCS/APC
bodies were therefore rendered on screen instead of being discarded.
All characters now go throughVtParser::feed_char(). -
PUA glyph cell-width tracking (
unicode_widthreturns 0 for PUA):
Characters in U+E000–U+F8FF were treated as combining characters (width 0)
and merged into the previous cell. PUA range is now always treated as
width 1, matching Windows Terminal behaviour. -
Per-drift-cell
MoveToanchor for PUA glyphs:
When the host terminal renders a PUA glyph wider than the internal
tracking width, subsequent cells drift right. Cells containing a PUA
codepoint now flush their run, emitMoveTo(col_idx), write the glyph,
and start a fresh run — resetting drift at every PUA glyph boundary.