字符单元背景透明度¶
在 0.50.0 版本加入.
程序可以在终端绘制图像,但在其上绘制文本时会遮住图像,因为字符单元背景始终不透明。本扩展让程序将单元背景设为半透明,使下方的窗口背景、背景图或位于文本下层的图像透出。典型用途是在画布上显示抬头信息,或在菜单后添加暗色蒙层。
设置不透明度¶
新的 SGR 属性使用冒号子参数形式,以百分比设置后续写入字符单元的背景不透明度::
<ESC>[70:<percent>m
默认值 100 表示不透明,0 表示完全透明。例如,在不透明度为百分之三十的红色背景上显示文本::
<ESC>[48;2;255;0;0m<ESC>[70:30mHello<ESC>[m
此属性独立于背景色的选择方式,适用于 48 设置的颜色、十六种基本色、256 色调色板中的颜色,以及默认背景;背景色改变时仍然生效。<ESC>[0m、不带子参数的 70,或 100 及以上的值会重置此属性。百分比向下取整到偶数。百分比只在冒号子参数中识别;<ESC>[70;30m 表示无值的 70,后接一个无关参数。
半透明背景会与终端在单元下方绘制的内容混合:窗口背景(含自身透明度)、背景图,以及以负 z-index 放置在文本下层的图像。光标下方、被选中或反显的字符单元仍按现有方式绘制为不透明;反显时因背景色用作前景,透明度被忽略。前景文本、下划线和删除线不受影响。
兼容性¶
不认识此属性的终端会忽略它,因为多数终端都会忽略未知 SGR 参数及子参数,所以程序可无条件发送,在其他终端上得到不透明背景。如果终端会丢弃含未知参数的整个 SGR 序列,同一序列中的颜色设置也会丢失。因此,如上例所示,应在设置颜色之后,用独立的 <ESC>[...m 发送透明度。
kitty 将此属性与字符单元背景色一起保存,凡背景色能保留的地方都会保留它,包括回滚、带格式复制,以及当前 SGR 状态的 DECRQSS 报告;当不透明度不是 100 时,报告包含 70:<percent>。