i3Blocks 脚本(着色)

i3Blocks 脚本(着色)

我想修改一个打印出带宽输入/输出的 i3Blocks 脚本(i3 WM 环境的实用程序块)。特别是我想更改此指令输出的颜色:

echo -n " $INLABEL"

使用颜色#9fbc00我该怎么做?谢谢

答案1

简短的回答是你不能,因为真正的 24 位颜色 (rgb) 不是公认标准的一部分,无论终端是否支持它,都将是一个问题。您应该使用终端调色板中的预定义颜色。ANSI 3/4 位颜色

也就是说,有些终端确实支持真正的24位颜色,并且大多数都使用这种格式:\033[48;2;r;g;bm将颜色4设置48为背景,可以将其更改为3将颜色定义为前景。 (更多信息

rg 和 b 字母代表十进制的 8 位数字,因此printf "\033[38;2;159;188;0mhello会以您想要的颜色打印 hello ( #9fbc00),但一旦执行命令它就不会重置,因此您需要告诉终端返回到原始颜色。为此,您需要使用另一个转义序列。 \033[0m

现在知道了,一种无错误的打印Hello world!方式#9fbc00

printf "\033[38;2;159;188;0mHello world!\033[0m\n"

ps: echo 不喜欢转义码,如果你想格式化东西,请使用 printf

答案2

i3blocks 的手册页状态:

The standard output of the command line is used to update the block content.  
Each non-empty line of the output will overwrite the corresponding property:

1. full_text

2. short_text

3. color

For example, this script sets the full_text in blue but no short_text:

    echo "Here's my label"
    echo
    echo \#0000FF

因此,让您的脚本打印出三行,最后一行应包含颜色代码。

这当然会改变所有脚本输出的颜色。

相关内容