1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

App::Greple チュートリアルAdvent Calendar 2021

Day 13

greple #13 カラーオプション

Last updated at Posted at 2021-12-13

色についての色々

greple は、複数のハイライトカラーを使って結果を表示することができます。これまで紹介したような、検索キーワードの色分け以外にも、様々な色の指定が可能です。今回は、色の指定方法について紹介します。

カラーマップ

greple の色情報はカラーマップで管理され、その中にはインデックスリストと名前付きのリストという2種類の要素があります。つまり、リストとハッシュです。

-dc というデバッグオプションを使うと、カラーマップ情報を見ることができます。デフォルトのカラーマップはこうです。

image.png

最初に表示されているのが名前付きリストで、ファイル名 (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) と同じです。Ww は、真っ白とは限りません。

    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

image.png

image.png

フルカラーターミナル

24ビットフルカラーに対応している端末では、フルカラーの指定をそのまま出力することができます。Apple の標準ターミナルは256色表示ですが、iTerm2 などはフルカラー表示が可能です。greple は、COLORTERM という環境変数に truecolor という値が設定されていると、フルカラー端末であると認識します。

まとめ

greple は、複数の色を扱えることが特徴の1つです。しかし、色の指定が煩雑だと使いこなすのが難しいので、シンプルで統一的な方法で指定できるように工夫しています。現在は、カラーマップを管理する部分を Getopt::EX::Colormap、テキストに色をつける部分を Term::ANSIColor::Concise という独立したモジュールにしてリリースしています。

SEE ALSO

  1. https://qiita.com/kaz-utashiro/items/5b6bcbe54891b3bd9db5
  2. https://qiita.com/kaz-utashiro/items/eb8c7067e6de34842fe3
  3. https://qiita.com/kaz-utashiro/items/165e744d4250adedc4c1
  4. https://qiita.com/kaz-utashiro/items/439e6abcecf36c520703
  5. https://qiita.com/kaz-utashiro/items/24ac0b8fdd30b598e069
  6. https://qiita.com/kaz-utashiro/items/a1ba4e3d07cf37dc25e3
  7. https://qiita.com/kaz-utashiro/items/0c8c944c17a72724b771
  8. https://qiita.com/kaz-utashiro/items/8783c2fd0cc4315b9a3d
  9. https://qiita.com/kaz-utashiro/items/84f5a6be6bf996076c64
  10. https://qiita.com/kaz-utashiro/items/ebc7ea99f800cfc8c90c
  11. https://qiita.com/kaz-utashiro/items/25a14e75380c39b5e0af
  12. https://qiita.com/kaz-utashiro/items/ebbeb8a5538a15ff04fc
  13. https://qiita.com/kaz-utashiro/items/b265deef9c9b1953a414 ←イマココ
  14. https://qiita.com/kaz-utashiro/items/2b20e0226cffde213ce0
  15. https://qiita.com/kaz-utashiro/items/16b5142ef7a89aa35380
  16. https://qiita.com/kaz-utashiro/items/d19fe5ee859f31ce172c
  17. https://qiita.com/kaz-utashiro/items/09a5f5cf08ce314e2add
  18. https://qiita.com/kaz-utashiro/items/6e4b1f51455e587ef743
  19. https://qiita.com/kaz-utashiro/items/010f141f17e855aab4fc
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?