文本尺寸协议

主要观点:0.40.0 版本新增协议,可让终端以不同大小显示文本,解决字符宽度确定问题,且向后兼容。
关键信息

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