Skip to content

v2.3.6

Latest

Choose a tag to compare

@github-actions github-actions released this 05 Oct 23:27
· 1 commit to master since this release

v2.3.6

用户报「不支持传递图形协议」:img2sixel / kitty +kitten icat / imgcat 在本复用器里什么都不出现。原因是这一层把未知序列丢掉,而图形协议(sixel 的 DCS、kitty 的 APC、iTerm2 的 OSC 1337)正好是「未知」的三种。现在解析线程旁边挂一个小判定认出它们、整段原样收下,在主线程发完本帧差分之后按宿主坐标写出去 —— 实时直通,不进历史(滚动或缩放之后图像消失是可接受的口径)。Windows 侧另加 PSEUDOCONSOLE_PASSTHROUGH_MODE(0x8):不加它,in-box conhost 会自己把 sixel 与 kitty 剔掉(微软那边是 issue #1173,至今没放行),我们转发得再干净也到不了宿主;该位只在 Win11 22H2(build 22621)以上存在,所以「带位试建、失败立刻退回不带位」。

# 内容
1 src/vt.c:图形序列采集状态机(三种协议、ST/BEL 两种收尾、File= 锚定判定、graphics_max 上限、中途出错整段丢弃)+ 每窗格 16 条的转发队列
2 src/render.c:锁内取出队列并按「本帧该窗格的首行/首列」换算宿主坐标,帧尾统一 host_write;不在实时视图(正在回看)就不发
3 [general] graphics / graphics_max / conpty_passthrough 三个 ini 键(读得进来、save_config() 也写回去),行为页第 7 个开关直接切 graphics
4 src/conpty_loader.c:RtlGetVersion 取 build 号 + conpty_passthrough_wanted() / conpty_passthrough_tri_from_text() 两个纯函数(进 make verify-loader 的单测),带位失败自动退回
5 判据:make gfx-posix(采集状态机 33 条定点断言,无外部依赖)+ verify_pane_palette.py T18a-T18f(真 pty 查宿主原始字节流;T18a 拿 v2.3.5 的发布档跑是红的)

三个坑都是「静默什么都不发生」型的,靠定点单测才当场抓到:① kitty 的载荷态跳到一个 switch 里不存在的状态号(走 default 被清态);② File= 的模式串写成大写开头、与统一小写后的输入永远配不上(原来靠「4KB 内没认到才丢」兜住,改成锚定判定后立刻暴露);③ iTerm2 用 ESC \ 收尾时忘了把 \ 一起收进缓冲 ⇒ 发出去的是没有结尾的 OSC,宿主的解析器会停在半截上、把之后每行文字都当载荷吃掉。