やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

太字にすると明るくなってしまう問題

 tput boldなどで太字にすると色まで明るく変えられてしまう。

成果物

おさらい

 前回、ターミナルの文字をbashにて太字にする方法をしめした。

echo -e "\e[1m太字強調\e[m"
printf '\033[1m%s\033[m\n' '太字強調'
tput bold && echo "太字強調" && tput sgr0

 じつは太字には問題がある。色まで明るくされてしまうのだ。

問題

 太字にすると色まで明るくなってしまう。

 私の環境では、太字に加えて文字色も明るくされてしまう。明るくしない色で太字にしたいのだが、それができない。

 たとえば「赤+太字」にしたいのだが、それをやろうとすると「明るい赤+太字」になってしまう。つまり色がなんであれ、かならず明るくなってしまう。「明るい色+太字」という指定になってしまい、「指定した色+太字」にすることができない。

 ターミナルの装飾は環境依存である。環境によって結果がちがうらしい。

太字にすると明るくなってしまう

f:id:ytyaru:20210530130317p:plain

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"

 なお、ターミナルの設定で配色をつぎのように変更している。デフォルトの色だと見えにくかったので、明るめにした。

f:id:ytyaru:20210530142537p:plain

 まずは基本。太字強調\e[1mをつかう。

echo -e "太字強調しない"
echo -e "\e[1m太字強調する\e[m"

f:id:ytyaru:20210530131047p:plain

 さらに文字色を赤にしてみる。

echo -e "\e[31m赤\e[m"
echo -e "\e[91m明るい赤\e[m"

f:id:ytyaru:20210530131054p:plain

 太字強調+文字色赤。このとき、太字強調したら同時に文字色まで明るくなってしまう。結果、以下2つは同じ装飾になってしまう。

echo -e "\e[1;31m赤太字強調\e[m"
echo -e "\e[1;91m明るい赤太字強調\e[m"

f:id:ytyaru:20210530131120p:plain

 そうじゃない。明るくせずに太字にしたいんだ。

 なんとか太字強調によって明るくされてしまうのを防げないか。

 \e[2mで薄くなるらしい。以下で確かめたところ、明度が下がるようだ。

echo -e "\e[2;31m薄くて暗い赤\e[m"
echo -e "\e[2;91m薄くて明るい赤\e[m"

f:id:ytyaru:20210530131134p:plain

 太字強調\e[1mと薄くする\e[2mを組みわせて、太字強調のうち明るくなるのを打ち消せないか試してみた。

echo -e "\e[1;2;31m薄くて暗い赤\e[m"
echo -e "\e[1;2;91m薄くて明るい赤\e[m"

f:id:ytyaru:20210530131143p:plain

 残念ながら打ち消せなかった。どちらも色合いに変化がなかった。

 また、\e[22mにて「通常の強度」になるらしい。太字強調のうち明るくなるのを打ち消せないか試してみた。

echo -e "\e[1;22;31m太字強調+強調なし+暗い赤\e[m"
echo -e "\e[1;22;91m太字強調+強調なし+明るい赤\e[m"

f:id:ytyaru:20210530131151p:plain

 残念ながら、太字強調のすべてが打ち消されてしまった。

分析

 おそらく、つぎのようになったと思われる。

  1. \e[1mにより太字強調で勝手に「明るい色」にされる
  2. e\[2mにより明度がさがる

 結果、「明るい色より明度がさがった色の太字」になった。

 装飾によって使える色はつぎの27色しかないと思われる。

  • 基本色(8色)
  • 高輝度色(8色)
  • 低輝度色(8色)

 さらに、太字にすると基本色が使えない。

太字
基本色 (不可)
高輝度色 太字+高輝度色
低輝度色 太字+高輝度色

 まさかの結果。指定した色のとおりに太字にしたいのが普通だと思うが、それはできない。どうあっても高輝度色(明るい色)にされてしまう。これは環境依存らしいが、ひどい実装だ。