端末で1つのカラーコードを別のカラーコードに置き換える方法は?

端末で1つのカラーコードを別のカラーコードに置き換える方法は?

Bashに自動的にあるカラーコードを別のカラーコードに置き換えさせることはできますか?たとえば、プログラムがカラーコードで囲まれたテキストを太字の前景に出力するたびに、bashは実際に緑色の背景コードなどを使用したいと思います。

私がこれをしたいのは、私のターミナルエミュレータ(ターミネータ)が太い前景の色を変更することを許可していないからです。たとえば、echo -e "\e[1;39m Foo"「Foo」は、私が設定したカラーパレットに関係なく、常に白に出力され、醜い結果を生み出します。 bash\e[1;37m\e[1;39m

編集する:termcap私が理解したところによると、私が望むことをするのはbash自体の問題に近いですterminfo。この二つに経験のある人はいますか?

ベストアンサー1

Bashには、Bash自体で使用される色を除いて、アプリケーションで使用される色の規則はありません。アプリケーションは端末と対話します。 bashはアプリケーションを起動し、完了すると通知します。

アプリケーションは、以下を介して端末と通信する方法を知っています。用語キャップ(伝統的な)または用語情報(現代)データベース。 Termcapは色より古いですが、terminfoは色について知っています。それを見てください(これterminfo(5)マニュアルページシステムでサポートされている機能のリストを確認してください。個々の色の制御順序を指定する方法はありませんが、この機能を使用すると、initc各色の外観を構成して本質的に同じ結果を得ることができます。たとえば、色1(通常は赤)の外観が明るい緑に変わります。

tput initc 1 0 255 0

ncursesデータベースにはこの機能は含まれていませんterminatorxtermDebian jessieバージョン5.9以降)。ただし、これらの端末エミュレータ(および他のvteベースの端末)は、この目的に使用できるエスケープシーケンスをサポートしています。OSC 4 ; c ; spec BEL。赤を明るい緑に変える方法は次のとおりです。

printf '\e]4;1;#00ff00\a'

デフォルトの色は0〜7で番号付けされており、この色の太字は8〜15の色を使用します。基本色などで太字で使用される色の変更を使用することもできます(詳細については、制御シーケンスのリストを参照)。OSC 5 ; 0 ; spec BEL

これらの設定は前景色と背景色の両方に影響し、前景色と背景色に独立して影響を与えることはできません。

色の外観をカスタマイズするには、から始めることができます.bashrc。これはbashの対話型インスタンスを実行している端末にのみ影響し、他のアプリケーションを直接起動する端末には影響しません。

これがターミネータのパレット設定とどのようにやり取りするのかわかりません。

おすすめ記事