カラーターミナルがあれば可能であることを知っています。エスケープ文字を使用した出力色の指定。
しかし、出力が現在どの色で表示されているのかわかりますか?それとも今テキストを出力すると、テキストはどの色で表示されますか?
これらのエスケープ文字を使用すると、以前の色設定が壊れないように要求します。 「デフォルトの前景色」エスケープ文字は、変更前のテキストの色ではなく、カラースキームから情報を取得します。
答え1
ここでは、xterm
クエリRGBカラーコードの色の変更エスケープを変更して、レポートの現在の色を取得できます。 - を使用しますESC ] Ps m
が、?
疑問符を追加します。 ~から文書:
"?"
名前またはRGB仕様の代わりにaが指定されている場合は、同じxterm
形式の制御シーケンスが応答します。これは対応する動的色を設定するために使用できます。 1つの制御順序で2つ以上の色番号と仕様を提供できるため、xterm
2つ以上の応答が可能です。- P s = 1 0→VT100テキストの前景色をP tに変更します。
- P s = 1 1→VT100テキストの背景色をP tに変更します。
- P s = 1 2→テキストカーソルの色をP tに変更します。
- P s = 1 3→マウスの前景色をP tに変更します。
- P s = 1 4→マウスの背景色をP tに変更します。
- P s = 1 5→Tektronixの前景色をP tに変更します。
- P s = 1 6→Tektronixの背景色をP tに変更します。
- P s = 1 7→ハイライトの背景色をP tに変更します。
- P s = 1 8→Tektronixカーソルの色をP tに変更します。
- P s = 1 9→ハイライト前景色をP tに変更します。
これが他の端末エミュレータで動作できるかどうか真剣に疑われますが、xterm
実行すると...
printf '\033]11;?\007'
...xterm
次のシーケンスを端末の入力バッファに戻します。
11;rgb:ffff/ffff/ffff
...背景または前景の場合:
printf '\033]10;?\007'
10;rgb:0000/0000/0000
答え2
通常、現在の色を取得することは不可能です。端末の制御シーケンス処理は、端末の位置に関係なく端末に対して「内部的に」発生します。端末付きエミュレータ例えば、xterm
カーネル仮想端末を提供するオペレーティングシステムカーネルに組み込まれたエミュレータ、「グラフィック表現」(すなわち、色及び属性)の現在の概念を含むエミュレータの内部状態は、マシン自体に常駐し、理論的にアクセス可能である。 。ただし、物理端末の場合、この情報はシリアルリンクで接続された物理的に分離されたシステムの一部のRAM位置にあります。
言い換えれば、一部端末は、端末プロトコルの一部としてシリアルリンクを介して送信される情報を読み取るメカニズムを含む。プログラムが端末に送信できる制御シーケンスを提供するため、返品端末入力などの内部状態に関する情報です。端末エミュレータ応答の制御シーケンスが表示されていますmikeserv
。xterm
しかし、これは具体的ですxterm
。たとえば、LinuxカーネルとさまざまなBSDカーネルに組み込まれた端末エミュレータは、異なる端末タイプであり、そのような制御シーケンスをまったく実装していません。実際の端末全体のファミリにも同様に適用されます。
DEC VT525端子は読み取りメカニズムを実装しますが、使用されている制御シーケンスとは無関係の制御シーケンスセットを使用しますxterm
。現在のグラフィックの変換を要求するためにDECRQSS(Request Selection or Set)シーケンスが送信され、端末はDECRPSS(Report Selection or Set)を送信して応答します。具体的には:
- ホスト転送:DCS
$
q
m
ST(SGRの制御機能部分に設定されたDECRQSS) - 端末応答:DCS
0
$
r
0
;
3
3
;
4
4
m
ST(DECRPSSには、現在の前景色と背景色を設定するSGR制御シーケンスのパラメータと制御機能部分があります)
もちろん、あなたの質問をよく読んで、あなたはそのEMUでもう一度チョコレートバナナを振っていることがわかります。あなたは何ですか実際にあなたがやろうとしているのは、解決策を選択してからその解決策の一部をどのように実行するのかを尋ねることです。以前の状態を維持カラー出力を作成するとき。これを行うためのDEC VT制御シーケンスがあるだけでなく、xterm
さまざまなカーネル組み込み端末エミュレータで認識されるSCOコンソール端末シーケンスと端末に関する情報を知らせるtermcap / terminfoエントリもあります。という言葉は何ですか?
termcapエントリsc
はとですrc
。 terminfoエントリsave_cursor
はとですrestore_cursor
。これらの名前は実際には多少誤解を招く可能性があります(もちろん、これはあなたが頼っているものです。実は代わりに法学)。実際のDECSC、DECRC、SCOSC、およびSCORC制御シーケンスも現在のグラフィックレンダリングを保存および復元します。
あなたが指している記事がシェルスクリプトから制御シーケンスを生成することに関するものであれば、あなたが使用したコマンドは今あなたが探しているのはですtput
。
追加読書
- ジョナサン・デ・ボーインポラード。 2007. チョコレートバナナを下ろしてヨーロッパの通貨システムを離れてください。。よく与えられる答えです。
- VT420プログラマリファレンスマニュアル。 EK-VT420-RM-002. 1992年2月。数字。
- VT520/VT525 ビデオ端末プログラマ情報。 EK-VT520-RM。 1994年7月。数字。