主要观点:0.40.0 版本新增协议,可让终端以不同大小显示文本,解决字符宽度确定问题,且向后兼容。
关键信息:
- 协议使用单个
OSC转义码\e\]66;metadata;text<terminator\>,metadata为键值对列表,text为编码后的 UTF-8 文本,最长 4096 字节。 - 有多个元数据键,如
s(整体缩放)、w(宽度)、n(分子)、d(分母)、v(垂直对齐)、h(水平对齐)。 - 工作原理是让客户端告知终端在多个单元格中渲染文本,通过
s、w、n、d控制渲染空间,s和w最重要。 - 支持分数缩放,可实现如半行空白、上标、下标等效果,
w键可指定渲染文本的单元格数。 - 可解决终端生态中字符宽度问题,客户端负责处理字符分段并告知终端
w值。 - 涉及包裹和覆盖行为规则,终端会根据情况丢弃或绘制多单元格字符。
- 可通过
CPR转义码检测终端是否支持该协议。 - 与其他终端控制交互时,光标移动不受影响,编辑控制操作时多单元格字符按特定规则处理。
重要细节: - 例如
printf "\\e\]66;s=2;Double sized text\\a\\n\\n"可显示双倍大小文本,w=1可控制文本宽度。 - 分数缩放时,
n和d用于指定分数,v和h用于垂直和水平对齐。 - 终端可根据情况截断或调整字体大小以适应空间,
s是相对基字体大小的缩放。 - 检测协议支持时,通过发送特定
CPR并观察终端响应位置判断。 - 编辑控制操作时,插入、删除、擦除等操作会根据规则处理多单元格字符。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。