やってみる

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

目立つ装飾をレベル順にしたい

 bashの装飾において、太字にすると明るくなってしまう問題があることがわかった。目立つ順にするにはどう装飾すればよいか考えてみた。

成果物

結論

 強調レベル(strong-level)はつぎのとおり。

絶対値 相対値 文字 装飾
1 -2 MIN faint echo -e "\e[2;31m対象\e[m"
2 -1 - faint + bold echo -e "\e[1;2;31m対象\e[m"
3 0 MID normal echo -e "\e[31m対象\e[m"
4 +1 - highlight echo -e "\e[91m対象\e[m"
5 +2 MAX bold echo -e "\e[1;31m対象\e[m"
echo -e "\e[1;91m対象\e[m"

 それ以外の装飾はレベルでなくON/OFFで設定する。

  • 反転(文字色と背景色を入れ替える)
  • 隠す(文字色が背景色と同じになる)
  • 点滅(「隠す/現す」の切替を一定時間ごとに繰り返す)
  • イタリック
  • 下線、上線、取り消し線

装飾タイプ

    • 文字色
    • 背景色
    • 反転(文字色と背景色を入れ替える)
    • 隠す(文字色が背景色と同じになる)
    • 点滅(「隠す/現す」の切替を一定時間ごとに繰り返す)
  • 太字(+明るい文字色。環境依存で変わる)
  • イタリック
  • 下線、上線
  • 取り消し線

 以下は使えなかった。

  • フォント(プライマリ、代替、ブラックレター)
  • 額入り、丸で囲んだ、上付き文字、添字

目立つには?

 色がポイントである。

 色は明度・彩度・色相の3要素がある。このうち明度が最重要だ。配色も大事。とくに背景色と前景色の配合によって見やすさが決まる。基本的には暗い背景+明るい文字色にするのがよい。背景と前景を反転させるのが最も目立たせるのに効果的だろう。これなら単色でも可能だ。

 目立つ順の装飾は、色によって判別できる。暗い背景には、明るい文字色にするとよい。背景色と前景色をいれかえれば、目立つ明るい色の面積がふえて最も目立つ。このように、目立つ色の面積がふえる順で考えると表題の答えは次のようになる。

  1. 反転(文字色と背景色を入れ替える)
  2. 太字強調(太字+明るい色)
  3. 高輝度(明るい色)
  4. 下線

対象外

 点滅については次の理由で対象外とする。

  • 点滅はナンセンスという考えがある(タイミングによっては全く見えなくなるから)
  • 未実装の環境がある

 もし文字色と背景色を一定時間ごとに入れ替えるような点滅の仕方なら、まだ良かったかもしれない。だが、タイミングによって表示が異ってしまうせいでハードコピーしたとき同じ状態を担保できない。その不確実さがナンセンスと言えなくもない。

 フォント、フォントサイズについては1字あたりで変更することができない。

 傍点はない。ほかにもルビなど、HTMLには存在するようなものがない。ターミナルには実装されていないし、仕様にもない。

装飾パターン

輝度 太字 下線

 このうち太字にすると明るくなってしまう問題があるため、以下のみになる。

輝度 太字 下線

 さらに輝度が低いとほとんど見えない。また、色によっては高輝度でないと見えにくいものも多い。よって実用に耐えうるのは以下のみである。

輝度 太字 下線

 さらに基本8色はその輝度によって目立ち具合が異なる。

FG BG
30,90 40,100
31,91 41,101
32,92 42,102
33,93 43,103
34,94 44,104
赤紫 35,95 45,105
シアン 36,96 46,106
37,97 47,107

 黒を背景としたとき、目立つ順に並べてみる。

FG BG
37,97 47,107
33,93 43,103
32,92 42,102
シアン 36,96 46,106
31,91 41,101
赤紫 35,95 45,105
34,94 44,104
30,90 40,100

 具体的な色についてはターミナルの設定で行える。それ次第では変わってくるだろう。

 とにかく白っぽい色のほうが目立つ。

 輝度が並でも、色が白に近ければなんとか見える。白、黄の2色くらいなら見えるだろう。また、輝度にかかわらず背景色とおなじ色は使えない。よって色を考慮すると使えるのは以下か。

輝度 太字 下線

f:id:ytyaru:20210530160639p:plain f:id:ytyaru:20210530160648p:plain f:id:ytyaru:20210530160653p:plain

 色だけで目立つ順にしたスクリプトは以下。

# 太字強調(太字+高輝度)
echo -e "\e[1;37m対象\e[m"
echo -e "\e[1;33m対象\e[m"
echo -e "\e[1;32m対象\e[m"
echo -e "\e[1;36m対象\e[m"
echo -e "\e[1;31m対象\e[m"
echo -e "\e[1;35m対象\e[m"
echo -e "\e[1;34m対象\e[m"

# 強調(高輝度)
echo -e "\e[97m対象\e[m"
echo -e "\e[93m対象\e[m"
echo -e "\e[92m対象\e[m"
echo -e "\e[96m対象\e[m"
echo -e "\e[91m対象\e[m"
echo -e "\e[95m対象\e[m"
echo -e "\e[94m対象\e[m"

# 並
echo -e "\e[37m対象\e[m"
echo -e "\e[33m対象\e[m" # ----- 見やすいのはここまでか
echo -e "\e[32m対象\e[m"
echo -e "\e[36m対象\e[m"
echo -e "\e[31m対象\e[m"
echo -e "\e[35m対象\e[m"
echo -e "\e[34m対象\e[m"

# 暗+強調
echo -e "\e[2;97m対象\e[m"
echo -e "\e[2;93m対象\e[m"
echo -e "\e[2;92m対象\e[m"
echo -e "\e[2;96m対象\e[m"
echo -e "\e[2;91m対象\e[m"
echo -e "\e[2;95m対象\e[m"
echo -e "\e[2;94m対象\e[m"

# 暗+並
echo -e "\e[2;37m対象\e[m"
echo -e "\e[2;33m対象\e[m"
echo -e "\e[2;32m対象\e[m"
echo -e "\e[2;36m対象\e[m"
echo -e "\e[2;31m対象\e[m"
echo -e "\e[2;35m対象\e[m"
echo -e "\e[2;34m対象\e[m"

 さらに装飾パターンも網羅した目立つ順は以下。

# 太字強調+二重下線
echo -e "\e[1;21;37m対象\e[m"
echo -e "\e[1;21;33m対象\e[m"
echo -e "\e[1;21;32m対象\e[m"
echo -e "\e[1;21;36m対象\e[m"
echo -e "\e[1;21;31m対象\e[m"
echo -e "\e[1;21;35m対象\e[m"
echo -e "\e[1;21;34m対象\e[m"

# 太字強調+下線
echo -e "\e[1;4;37m対象\e[m"
echo -e "\e[1;4;33m対象\e[m"
echo -e "\e[1;4;32m対象\e[m"
echo -e "\e[1;4;36m対象\e[m"
echo -e "\e[1;4;31m対象\e[m"
echo -e "\e[1;4;35m対象\e[m"
echo -e "\e[1;4;34m対象\e[m"

# 太字強調
echo -e "\e[1;37m対象\e[m"
echo -e "\e[1;33m対象\e[m"
echo -e "\e[1;32m対象\e[m"
echo -e "\e[1;36m対象\e[m"
echo -e "\e[1;31m対象\e[m"
echo -e "\e[1;35m対象\e[m"
echo -e "\e[1;34m対象\e[m"

# 強調+二重下線
echo -e "\e[21;97m対象\e[m"
echo -e "\e[21;93m対象\e[m"
echo -e "\e[21;92m対象\e[m"
echo -e "\e[21;96m対象\e[m"
echo -e "\e[21;91m対象\e[m"
echo -e "\e[21;95m対象\e[m"
echo -e "\e[21;94m対象\e[m"

# 強調+下線
echo -e "\e[4;97m対象\e[m"
echo -e "\e[4;93m対象\e[m"
echo -e "\e[4;92m対象\e[m"
echo -e "\e[4;96m対象\e[m"
echo -e "\e[4;91m対象\e[m"
echo -e "\e[4;95m対象\e[m"
echo -e "\e[4;94m対象\e[m"

# 強調
echo -e "\e[97m対象\e[m"
echo -e "\e[93m対象\e[m"
echo -e "\e[92m対象\e[m"
echo -e "\e[96m対象\e[m"
echo -e "\e[91m対象\e[m"
echo -e "\e[95m対象\e[m"
echo -e "\e[94m対象\e[m"

# 二重下線
echo -e "\e[21;37m対象\e[m"
echo -e "\e[21;33m対象\e[m"
echo -e "\e[21;32m対象\e[m"
echo -e "\e[21;36m対象\e[m"
echo -e "\e[21;31m対象\e[m"
echo -e "\e[21;35m対象\e[m"
echo -e "\e[21;34m対象\e[m"

# 下線
echo -e "\e[4;37m対象\e[m"
echo -e "\e[4;33m対象\e[m"
echo -e "\e[4;32m対象\e[m"
echo -e "\e[4;36m対象\e[m"
echo -e "\e[4;31m対象\e[m"
echo -e "\e[4;35m対象\e[m"
echo -e "\e[4;34m対象\e[m"

# 並
echo -e "\e[37m対象\e[m"
echo -e "\e[33m対象\e[m" # ----- 見やすいのはここまでか
echo -e "\e[32m対象\e[m"
echo -e "\e[36m対象\e[m"
echo -e "\e[31m対象\e[m"
echo -e "\e[35m対象\e[m"
echo -e "\e[34m対象\e[m"

# 暗+太字強調+二重下線
echo -e "\e[1;2;21;37m対象\e[m"
echo -e "\e[1;2;21;33m対象\e[m"
echo -e "\e[1;2;21;32m対象\e[m"
echo -e "\e[1;2;21;36m対象\e[m"
echo -e "\e[1;2;21;31m対象\e[m"
echo -e "\e[1;2;21;35m対象\e[m"
echo -e "\e[1;2;21;34m対象\e[m"

# 暗+太字強調+下線
echo -e "\e[1;2;4;37m対象\e[m"
echo -e "\e[1;2;4;33m対象\e[m"
echo -e "\e[1;2;4;32m対象\e[m"
echo -e "\e[1;2;4;36m対象\e[m"
echo -e "\e[1;2;4;31m対象\e[m"
echo -e "\e[1;2;4;35m対象\e[m"
echo -e "\e[1;2;4;34m対象\e[m"

# 暗+太字強調
echo -e "\e[1;2;37m対象\e[m"
echo -e "\e[1;2;33m対象\e[m"
echo -e "\e[1;2;32m対象\e[m"
echo -e "\e[1;2;36m対象\e[m"
echo -e "\e[1;2;31m対象\e[m"
echo -e "\e[1;2;35m対象\e[m"
echo -e "\e[1;2;34m対象\e[m"

# 暗
echo -e "\e[2;37m対象\e[m"
echo -e "\e[2;33m対象\e[m"
echo -e "\e[2;32m対象\e[m"
echo -e "\e[2;36m対象\e[m"
echo -e "\e[2;31m対象\e[m"
echo -e "\e[2;35m対象\e[m"
echo -e "\e[2;34m対象\e[m"

 上記に反転をかけたらさらに目立つ。ただし反転するときは字の面積が少ないほうが目立つ。つまり太字でなく下線がないほうが目立つ。以下の順がもっとも目立つだろう。

# 反転+強調
echo -e "\e[7;97m対象\e[m"
# 反転+太字強調
echo -e "\e[7;1;37m対象\e[m"
# 反転+太字強調+下線
echo -e "\e[7;1;4;37m対象\e[m"
# 反転+太字強調+二重下線
echo -e "\e[7;1;21;37m対象\e[m"
# 反転+並
echo -e "\e[7;37m対象\e[m"
# 反転+暗
echo -e "\e[7;2;37m対象\e[m"

対象環境

$ uname -a
Linux raspberrypi 5.4.83-v7l+ #1379 SMP Mon Dec 14 13:11:54 GMT 2020 armv7l GNU/Linux