Skip to content

设计与语义 ​

一个类型,一套机制 ​

对外只有一个 Style 值类型:颜色、属性、背景色、预设全是同一类公开常量,链式返回新值,text 收尾产出串。没有第二个等价入口,没有数组拼样式,没有字符串拼样式名。

写法顺序(前景 > 背景 > 修饰)是约定,库内部与顺序无关,写反不报错——机器拦序需要多套链式状态类型,复杂度不值。demo 与文档示例统一按规范排列。

转义序列与宽度分家 ​

本包只管序列(生成与收尾),宽度、截断、断行归引用它的库(如 clitable)。strip_ansi 一类的宽度剥离不进本包,避免互相依赖成环。

攒样式与产串分离 ​

链上每步只拷贝一个小记录:前景 4 bit、背景 4 bit、修饰 5 bit 的三个位掩码,真彩色以字符串跟随。攒样式阶段零字符串分配;text 阶段单个缓冲区一遍走完,发射顺序与书写顺序一致(前景、背景、修饰)。hex 在渲染时解析,坏值转 (0,0,0) 黑色降级。

空样式与开关 ​

default 与关闭开关时 text 都原样返回,一字节转义都不输出。set_enabled 返回旧值方便恢复;NO_COLOR / isatty 判定由上层调用方自己决定,本库不读环境。

边界(当前明确不做) ​

  • 嵌套样式(富文本树,内层关闭时重开外层):等 clitable 出现带色单元格截断的实需求再加,届时新增独立组合层,不复用 Style
  • 256 色降级:桌面与管道场景普遍已是 24 bit 终端
  • TTY 自动探测:保持纯函数,多 target 一致