确定终端主要是深色还是浅色的一种方法是获取其背景颜色的值,并将其与灰色进行比较。
然而,为了做到这一点,您需要知道白色的 RGB 数值是多少(取其一半)。
对于某些终端,它是 0xff + 0xff + 0xff,而在其他终端上,它是 0xffff + 0xffff + 0xffff。
关于如何确定 shell 脚本内这两种可能性(以及其他可能性,如果存在)中的哪一种的想法?
注意:这类似于用于设置深色或浅色终端背景的公共环境变量但这个问题比较狭隘。
答案1
大概您正在使用类似中描述的查询XTerm 控制序列:
OSC Ps ; Pt BEL
OSC Ps ; Pt ST
Ps = 4 ; c ; spec -> Change Color Number c to the color
specified by spec. This can be a name or RGB specification as
per XParseColor. Any number of c/spec pairs may be given.
The color numbers correspond to the ANSI colors 0-7, their
bright versions 8-15, and if supported, the remainder of the
88-color or 256-color table.
If a "?" is given rather than a name or RGB specification,
xterm replies with a control sequence of the same form which
can be used to set the corresponding color. Because more than
one pair of color number and specification can be given in one
control sequence, xterm can make more than one reply.
xterm 使用四位数字(例如ffff
),因为这是 X 联机帮助页中的首选形式,其中表示:
The eight primary colors can be represented as:
black rgb:0/0/0
red rgb:ffff/0/0
green rgb:0/ffff/0
blue rgb:0/0/ffff
yellow rgb:ffff/ffff/0
magenta rgb:ffff/0/ffff
cyan rgb:0/ffff/ffff
white rgb:ffff/ffff/ffff
如果我必须编写一个脚本来检测响应该控制序列的某个随机终端返回的位数,我会查看颜色 1、2 和 4 的红色、绿色和蓝色分量,因为即使有一些失真,这些仍将使用与“白色”相同的位数。
这是 xterm 的屏幕截图,显示了来自脚本它的作用是:
我检查了其他一些终端模拟器;做出响应的那些使用了 RGB 分量,其中最大的对应于 ANSI(尽管做出响应的三个中的两个实际上并未报告美国国家标准协会颜色 -ymmv)。