tput bold
などで太字にすると色まで明るく変えられてしまう。
成果物
おさらい
前回、ターミナルの文字をbashにて太字にする方法をしめした。
echo -e "\e[1m太字強調\e[m" printf '\033[1m%s\033[m\n' '太字強調' tput bold && echo "太字強調" && tput sgr0
じつは太字には問題がある。色まで明るくされてしまうのだ。
問題
太字にすると色まで明るくなってしまう。
私の環境では、太字に加えて文字色も明るくされてしまう。明るくしない色で太字にしたいのだが、それができない。
たとえば「赤+太字」にしたいのだが、それをやろうとすると「明るい赤+太字」になってしまう。つまり色がなんであれ、かならず明るくなってしまう。「明るい色+太字」という指定になってしまい、「指定した色+太字」にすることができない。
ターミナルの装飾は環境依存である。環境によって結果がちがうらしい。
太字にすると明るくなってしまう
echo -e "太字強調しない" echo -e "\e[1m太字強調する\e[m" echo -e "\e[31m赤\e[m" echo -e "\e[91m明るい赤\e[m" echo -e "\e[1;31m赤太字強調\e[m" echo -e "\e[1;91m明るい赤太字強調\e[m" echo -e "\e[2;31m薄くて暗い赤\e[m" echo -e "\e[2;91m薄くて明るい赤\e[m" echo -e "\e[1;2;31m太字強調+薄くて暗い赤\e[m" echo -e "\e[1;2;91m太字強調+薄くて明るい赤\e[m" echo -e "\e[1;22;31m太字強調+強調なし+暗い赤\e[m" echo -e "\e[1;22;91m太字強調+強調なし+明るい赤\e[m"
なお、ターミナルの設定で配色をつぎのように変更している。デフォルトの色だと見えにくかったので、明るめにした。
まずは基本。太字強調\e[1m
をつかう。
echo -e "太字強調しない" echo -e "\e[1m太字強調する\e[m"
さらに文字色を赤にしてみる。
echo -e "\e[31m赤\e[m" echo -e "\e[91m明るい赤\e[m"
太字強調+文字色赤。このとき、太字強調したら同時に文字色まで明るくなってしまう。結果、以下2つは同じ装飾になってしまう。
echo -e "\e[1;31m赤太字強調\e[m" echo -e "\e[1;91m明るい赤太字強調\e[m"
そうじゃない。明るくせずに太字にしたいんだ。
なんとか太字強調によって明るくされてしまうのを防げないか。
\e[2m
で薄くなるらしい。以下で確かめたところ、明度が下がるようだ。
echo -e "\e[2;31m薄くて暗い赤\e[m" echo -e "\e[2;91m薄くて明るい赤\e[m"
太字強調\e[1m
と薄くする\e[2m
を組みわせて、太字強調のうち明るくなるのを打ち消せないか試してみた。
echo -e "\e[1;2;31m薄くて暗い赤\e[m" echo -e "\e[1;2;91m薄くて明るい赤\e[m"
残念ながら打ち消せなかった。どちらも色合いに変化がなかった。
また、\e[22m
にて「通常の強度」になるらしい。太字強調のうち明るくなるのを打ち消せないか試してみた。
echo -e "\e[1;22;31m太字強調+強調なし+暗い赤\e[m" echo -e "\e[1;22;91m太字強調+強調なし+明るい赤\e[m"
残念ながら、太字強調のすべてが打ち消されてしまった。
分析
おそらく、つぎのようになったと思われる。
\e[1m
により太字強調で勝手に「明るい色」にされるe\[2m
により明度がさがる
結果、「明るい色より明度がさがった色の太字」になった。
装飾によって使える色はつぎの27色しかないと思われる。
- 基本色(8色)
- 高輝度色(8色)
- 低輝度色(8色)
さらに、太字にすると基本色が使えない。
色 | 太字 |
---|---|
基本色 | (不可) |
高輝度色 | 太字+高輝度色 |
低輝度色 | 太字+高輝度色 |
まさかの結果。指定した色のとおりに太字にしたいのが普通だと思うが、それはできない。どうあっても高輝度色(明るい色)にされてしまう。これは環境依存らしいが、ひどい実装だ。