动态

OpenTUI终端主题检测bug修复,避免误判和Ghostty兼容问题

OpenTUI终端主题检测bug修复,避免误判和Ghostty兼容问题
kmdr
最近被OpenCode闪到了?没错,就是我。事情是这样的:OpenCode/OpenTUI通过查询OSC 10/11获取终端前景/背景色来检测主题模式(亮色或暗色)。OpenTUI还启用了DEC私有模式2031以接收主题变更通知。启用该模式后,终端可在系统主题变更时发送CSI 997。OpenTUI将997负载视为权威,并覆盖了OSC 10/11的推导结果。但这在有些终端上是错误的:997可能报告亮色,而查询的终端颜色明显是暗色,导致闪屏。修复方法很简单:不再信任997负载,仅将其作为重新查询OSC 10/11的触发条件。但OpenTUI最近开始使用OSC 11设置终端默认背景色,导致查询时读到的是自己的覆盖值。解决方法:先用OSC 111重置终端背景,查询OSC 10/11,再恢复渲染背景。然而Ghostty存在bug:一旦使用该路径,后续OSC 11背景报告会卡住,导致推导错误。目前解决方案:不使用OSC 11设置终端背景色。TL;DR:OpenTUI必须将CSI 997仅作为提示,依赖OSC 10/11颜色查询检测主题,并避免通过OSC 11/111修改终端背景,以防在Ghostty等终端上出错。
动态kmdr2026-04-25原文

相关内容