色についての色々
greple は、複数のハイライトカラーを使って結果を表示することができます。これまで紹介したような、検索キーワードの色分け以外にも、様々な色の指定が可能です。今回は、色の指定方法について紹介します。
カラーマップ
greple の色情報はカラーマップで管理され、その中にはインデックスリストと名前付きのリストという2種類の要素があります。つまり、リストとハッシュです。
-dc
というデバッグオプションを使うと、カラーマップ情報を見ることができます。デフォルトのカラーマップはこうです。
最初に表示されているのが名前付きリストで、ファイル名 (FILE
) や行番号 (LINE
) の表示色に関する情報を保持しています。
次にあるのがインデックスリストで、検索した文字列をハイライトするために使われます。
--colormap, --cm オプション
カラーマップは --colormap
オプションで指定します。ちょっと長いので --cm
と省略することもできます。デフォルトのカラーマップは、次のように指定したのと同じです。
--cm BLOCKEND=/WE,FILE=G,LINE=Y,PROGRESS=B,TEXT= \
--cm 000D/544,000D/454,000D/445 \
--cm 000D/455,000D/545,000D/554 \
--cm 000D/543,000D/453,000D/435,000D/534,000D/354,000D/345 \
--cm 000D/444,000D/433,000D/343,000D/334 \
--cm 000D/344,000D/434,000D/443,000D/333
1行目の名前付きのリストは NAME=color
という形式、2行目以下のインデックスリストはラベルなしの color
だけです。複数の要素をカンマで区切って同時に指定することができます。--cm
オプションは繰り返し使うことができるので、上の例では分けて書いてありますが、1つにまとめてしまっても構いません。
簡単に説明すると、G (Green), Y (Yellow) などの基本の色、D (ボールド) のような効果、544 のように 0-5 の数字3桁で表された216色で指定されています。スラッシュ (/
) の左がフォアグラウンド、右側はバックグラウンドカラーです。
色の指定
基本 16色
R r Red
G g Green
B b Blue
C c Cyan
M m Magenta
Y y Yellow
K k Black
W w White
大文字は、赤、緑、青、シアン、マジェンタ、黄、黒、白の基本の8色です。小文字は代替色を意味しますが、多くの端末では基本色よりも明るい色が指定されています。
RGB 6x6x6 216色
000 .. 555 : 6x6x6 RGB 216 colors
RGB 値を0から5の数字で表した216色です。
慣れると案外わかりやすくて、555は白、R以外を0にして500なら原色の赤。GとBの値を増やすと白に近づいて544は淡い赤という具合です。RGB と CMY のポジションが対応していて、R の部分を落とした055は、補色のシアン、Bを落として550なら黄色になります。1つだけ大きければ RGB、1つだけ小さければ CMY と憶えるとわかりやすいと思います。
基本のカラーマップは RGB に 543 のどれかを当てた組み合わせをバックグラウンドカラーとしています。
グレースケール 24色
L01
から L24
は、24階調のグレースケールです。L00
は黒 (000
)、L25
は白 (555
) と同じです。W
や w
は、真っ白とは限りません。
L00 .. L25 : Black (L00), 24 grey levels, White (L25)
12ビット/24ビット RGB
RGB を10進や16進の、12ビット値あるいは24ビット値で指定することもできます。ただし、256色表示の端末では表示できないので、その場合は近似する216色に変換して表示します。
(255,255,255) : 24bit decimal RGB colors
#000000 .. #FFFFFF : 24bit hex RGB colors
#000 .. #FFF : 12bit hex RGB 4096 colors
名前
https://en.wikipedia.org/wiki/X11_color_names で定義されている名前で色を指定することができます。
<red> <blue> <green> <cyan> <magenta> <yellow>
<aliceblue> <honeydue> <hotpink> <mooccasin>
<medium_aqua_marine>
効果
色以外の効果を指定することもできます。よく使うのはボールド(D
)、イタリック(I
)、アンダーライン(U
)、反転(S
)あたりでしょうか。見えなくする H
や、見え消し線を引く X
はサポートされていない端末もありますが、使い方によっては効果的です。点滅(F
)は面白いけど、うるさいのであまり使いません。早い点滅 (Q) をサポートしている端末は見たことがありません。
N None
Z 0 Zero (reset)
D 1 Double strike (boldface)
P 2 Pale (dark)
I 3 Italic
U 4 Underline
F 5 Flash (blink: slow)
Q 6 Quick (blink: rapid)
S 7 Stand out (reverse video)
H 8 Hide (concealed)
X 9 Cross out
E Erase Line
; No effect
/ Toggle foreground/background
^ Reset to foreground
行消去の E
は特殊で、文字の属性を定義するものではありません。これを指定すると、色設定のシークエンスと同時に、カーソルがある場所から行末までを消去するシークエンスを出力します。文字を消すのと同時に背景色で埋めるので、その色の線が引かれたように見えます。最初の例の BLOCKEND
で使われています。
ANSI 256色 ターミナルカラー
標準的な256色表示のANSI端末は、これまでに説明した基本の16色、6階調の RGB 216色、24階調のグレースケールを表示することができます。これは、次のコマンドで一覧することができます。
perl -MGetopt::EX::Colormap=:all -E colortable
フルカラーターミナル
24ビットフルカラーに対応している端末では、フルカラーの指定をそのまま出力することができます。Apple の標準ターミナルは256色表示ですが、iTerm2 などはフルカラー表示が可能です。greple は、COLORTERM
という環境変数に truecolor
という値が設定されていると、フルカラー端末であると認識します。
まとめ
greple は、複数の色を扱えることが特徴の1つです。しかし、色の指定が煩雑だと使いこなすのが難しいので、シンプルで統一的な方法で指定できるように工夫しています。現在は、カラーマップを管理する部分を Getopt::EX::Colormap
、テキストに色をつける部分を Term::ANSIColor::Concise
という独立したモジュールにしてリリースしています。
SEE ALSO
- https://qiita.com/kaz-utashiro/items/5b6bcbe54891b3bd9db5
- https://qiita.com/kaz-utashiro/items/eb8c7067e6de34842fe3
- https://qiita.com/kaz-utashiro/items/165e744d4250adedc4c1
- https://qiita.com/kaz-utashiro/items/439e6abcecf36c520703
- https://qiita.com/kaz-utashiro/items/24ac0b8fdd30b598e069
- https://qiita.com/kaz-utashiro/items/a1ba4e3d07cf37dc25e3
- https://qiita.com/kaz-utashiro/items/0c8c944c17a72724b771
- https://qiita.com/kaz-utashiro/items/8783c2fd0cc4315b9a3d
- https://qiita.com/kaz-utashiro/items/84f5a6be6bf996076c64
- https://qiita.com/kaz-utashiro/items/ebc7ea99f800cfc8c90c
- https://qiita.com/kaz-utashiro/items/25a14e75380c39b5e0af
- https://qiita.com/kaz-utashiro/items/ebbeb8a5538a15ff04fc
- https://qiita.com/kaz-utashiro/items/b265deef9c9b1953a414 ←イマココ
- https://qiita.com/kaz-utashiro/items/2b20e0226cffde213ce0
- https://qiita.com/kaz-utashiro/items/16b5142ef7a89aa35380
- https://qiita.com/kaz-utashiro/items/d19fe5ee859f31ce172c
- https://qiita.com/kaz-utashiro/items/09a5f5cf08ce314e2add
- https://qiita.com/kaz-utashiro/items/6e4b1f51455e587ef743
- https://qiita.com/kaz-utashiro/items/010f141f17e855aab4fc