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は10進数で8桁の数字を表すため、printf "\033[38;2;159;188;0mhellohello()は目的の色で印刷されますが、#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

したがって、スクリプトに3行を印刷するようにしてください。最後の行にはカラーコードを含める必要があります。

もちろん、すべてのスクリプト出力の色が変わります。

関連情報