端末での色の設定、バックアップ、復元

端末での色の設定、バックアップ、復元

私は使うこのアプリ端末で利用可能なすべての色を表示します。私が得るものは次のとおりです。

ここに画像の説明を入力してください。

  1. プログラムは100未満の色を表示しません。なぜ?表示する方法はありますか?
  2. いくつかの#rrggbb値のn番目の色を変更する方法はありますか?それともこの色は事前定義されていますか?
  3. 色を変更できる場合(質問2を参照)、この値をエクスポートしてインポートする方法はありますか?

ベストアンサー1

サポートされる色の数と、前景色と背景色がどのように変更されるかは、端末によって異なります。

データベースはterminfo通常、正しい順序を見つけるのに役立ちます。

ほとんどのカラー端末は、前景と背景を変更するためのANSIカラーエスケープシーケンスをサポートしています。色0〜7

それは:

  • 前景色の設定$n:printf "\33[3${n}m"
  • 背景色の設定$n:printf "\33[4${n}m"

一部の(まれな)端末(例emu:)は、これらのANSI色に異なるシーケンスを使用します。

一部の(まれな)端末(QNXコンソールなど)には、異なるエスケープシーケンスと色があります。

一部は(まれに)色のペアを使用します。背景と前景の色のペアを定義し、エスケープシーケンスを使用して使用する色のペアを選択します。

今日、xtermとほとんどの最新のフリーソフトウェアターミナルエミュレータは、基本的な8つのANSI色を最大16色(8〜15はANSI色0〜7のより明るいバージョン)まで拡張し、一部は88〜256色まで拡張します。

一部の端末はrxvt8つの色しかサポートしていませんが、必要に応じてより明るい色を使用しています。勇敢なまた開いています(フロントエンド用)。または点滅する(背景として)。\033[34;1mより明るい青色を生成します\033[34m

色を使用する最も移植可能な方法は、terminfoデータベースを使用することです。

これはtputコマンドで達成できます。tcshそしてzsh内蔵されたものもありますechoti

terminfoデータベースが正確で、値が$TERM使用されている端末を正しく反映しているとします。

tput colors

端末でサポートされている色の数を通知します。

現在、上記のまれな例外を除いて、端末がANSI色をサポートしていると想定できます。 ANSI背景色と前景色のterminfo関数setabはとですsetaf。端末が8つ以上の色をサポートしている場合でも、この機能を使用してその色を照会できます。

tput setaf 233

端末が256色をサポートしている場合は、色233の正しいエスケープシーケンスを出力する必要があります。

の場合、xterm出力setaf\033[30m..\033[37mは0~7、\033[90m..\033[97m色は8~15、\033[38;5;16m..\033[38;5;255m色は16~255です。

\033[38;5;0m..\033[38;5;15mまた、動作しますが、色0〜15に対して移植性に優れているよりも4バイト長いです。

したがって、端末でサポートされているすべての色をテストしてください。 ANSIカラーがサポートされている場合:

i=0; n=$(tput colors); while [ "$i" -lt "$n" ]; do
  tput setaf "$i"; printf %04d "$i"
  i=$((i + 1))
done

他の色がサポートされている場合:

i=0; n=$(tput colors); while [ "$i" -lt "$n" ]; do
  tput setf "$i"; printf %04d "$i"
  i=$((i + 1))
done

カラーペアで動作する場合(例:hpterm-color):

i=0; n=$(tput pairs); while [ "$i" -lt "$n" ]; do
  tput scp "$i"; printf %04d "$i"
  i=$((i + 1))
done

これで、色や色のペアを上書きするには、端末によって異なります。

initcこれを実行できる端末の指定された色をオーバーライドできるterminfo関数があります。そしてinitpペアをオーバーライドします。

たとえば、色1を明るい白にオーバーライドします。

 tput initc 1 1000 1000 1000

使用xterm、転送順序: \033]4;1;rgb:FF/FF/FF\033\

色のペアを使用して、端末の黒の背景に白で色のペア1を上書きします。

 tput initp 1 1000 1000 1000 0 0 0

おすすめ記事