書式
set_color [OPTIONS] VALUE

概要

set_color コマンドは、
端末のテキストの装飾
(色やボールド・アンダーライン)を
設定するために使われます。

訳注:実際はユーザが直接
set_color を使わなくても
fish_config によるWebインターフェースから
選択すれば間に合います。

VALUEred といった予約色名や、
3文字または6文字の16進数で
与えられるRGB値です。

bright などのような br* 形式は
多くの端末での8種類の
標準的な明度の色の変種です。

brblack
black よりも明度が高く、
gray 寄りです。

特別なキーワード normal
テキストの装飾を端末のデフォルトに戻します。

以下の予約色名があります。

  1. black
  2. red
  3. green
  4. yellow
  5. blue
  6. magenta
  7. cyan
  8. white
  9. brblack
  10. brred
  11. brgreen
  12. bryellow
  13. brblue
  14. brmagenta
  15. brcyan
  16. brwhite

3・6文字のRGB値
(たとえば A0FF33f2f)
も使えます。

サポートされている色のうち、
指定されたRGB値に最も近い色を
fishは使います。

3文字のRGB値は
それぞれの値を2回繰り返した
RGB値に等しいです。

たとえば、
set_color 2BC
set_color 22BBCC
と等価です。

RGB値は
小文字でも大文字でも
受け付けます。

端末の機能に
(また set_color が端末をサポートするレベルにも)
よりますので、

実際の色は
予約色名の近似値になるか、
何の効果もないことがあります。

2番目の色は
予備として使われます。

たとえば、

set_color 124212 brblue は、
端末が正確にグレーの陰を表現できない場合は
brblue を使うことを
set_color に命じます。

予備色の設定は
8色・16色の端末が
指定された色を使えない場合に
とても便利です。

オプション

-b, --background COLOR
背景色を設定。
-c, --print-colors
16の予約色名を表示。
-o, --bold
ボールドにする。
-u, --underline
アンダーラインにする。

色名に normal 使うことで、
以下の装飾をデフォルトに戻します。

  • 文字色
  • 背景色
  • ボールド
  • アンダーライン

注意

  1. normal キーワードは
    背景色と文字色を
    端末のデフォルト(何であっても)に戻す。
  2. 背景色の設定は
    今後描画される文字のみ影響する。

    fishは端末ウィンドウ全体の
    背景色を設定することはできない。

    ウィンドウの背景色
    (不透明度などの他の属性も)
    の設定は、

    端末が提供する
    どのようなメカニズムを使用しても
    完了している必要がある。

  3. 端末の中には、
    文字を太くする代わりに
    明度を高くするために
    --bold エスケープシーケンスを
    使うものもある。
  4. set_color は標準出力に
    特定の文字列を出力することで
    行われる。

    コマンド置換パイプライン
    中で使われたのならば、
    装飾用の文字列も取得される。

    これは望まれることもあれば
    望まれないこともある。

    set_color を使う前に
    isatty stdout
    終了ステータス を確認することは、
    スクリプトで色付きの出力をしない
    決断をするのに役立つ。

実行例

# 赤文字
$ set_color red; echo 'Roses are red'
# 青文字
$ set_color blue; echo 'Violets are blue'
# ダークパープル文字
$ set_color 62A; echo 'Eggplants are dark purple'
# デフォルトに戻す
$ set_color normal; echo 'Normal is nice'

端末の能力を検出する

fishは端末が256色対応か、
古い16色対応でしかないかを、
ヒューリスティックな方法で
決定しています。

強制的に256色対応にするには
set fish_term256 1
を実行します。

環境変数 TERM
256color という文字列を含む
(たとえば xterm-256color )ならば、
256色対応が有効になります。

(Mac OSは除きます。
TERM_PROGRAMTERM_PROGRAM_VERSION
Mac OS 10.6からのTerminal.appを
検出するために使われます。

この場合、256色非対応になります。

なぜなら、16色対応のxtermだからです。)

terminfoで端末が256色対応
であるとわかった場合、
256色対応は常に有効になります。

カラーパレット問題をデバッグするには、
端末のterminfoで使える色数を出力する
tput colors が使えます。

fishを fish -d2 で起動したとき、
使っている色のモードを教えてくれる
診断メッセージを出力します。

以下のように、
多くの端末は24ビットカラー(True Color)の
エスケープシーケンスをサポートしています。

  • 現在のxterm
  • Gnome Terminal
  • Konsole
  • iTerm2

fishはシステムのconfig.fish
(/usr/share/fish/config.fish) 内で
多くの方法を使って
これらの端末を検出しようと試みます。

明示的にサポートさせるには
set fish_term24bit 1
を実行してください。

set_color コマンドは
いかなる端末を使っていても、
どのように端末色を変更するのかを探すために
terminfoデータベースを使います。

古くて不完全な
terminfoデータベースしかなくて、

terminfoをサポートする端末のための
色の情報を欠落している
システムもあります。

terminfoの定義から
16色未満がサポートされていないとわかった場合、

fishはすべての端末が
ANSI X3.64エスケープシーケンス@Wikipedia
使えると仮定します。

最後までお読みいただき、ありがとうございました。参考になれば嬉しいです。