ターミナル ウィンドウのカラー テキストについて学習しようとしています。(重要な場合は、OS X で Terminal.app を使用しています。) 端末の現在の前景色と背景色のペアを取得したいと思います。Term::Cap ライブラリを使用して perl スクリプトでこの情報を取得できるはずですが、解決策がわかりません。
perl スクリプトでは、端末の現在の前景色と背景色のペア値をどのように照会しますか?
私は、ほとんどの端末がこれを報告することをサポートしていないと思います -- そして、termcap や terminfo にそれに対するエントリがあるようには見えません。必要に応じて色のペアを設定するだけで、端末に現在の設定を尋ねる必要はありません。ECMA-48 標準 (ANSI X3.64 にちなんで "ANSI" として知られている) では、色を参照する唯一のコマンドは SGR "Set Graphic Rendition" であり、これは純粋に書き込み専用です。
この機能は、terminfo と termcap の範囲外です。端末の応答を扱うためです。terminfo/termcap はこれらの機能について説明しています。
原則として、端末の説明の一部になる可能性のあるものに制限はありませんが、1980 年代には端末間での応答の共通性はほとんどありませんでした。いくつかの端末は特定の機能を報告できましたが、それらのほとんどは一定でした (バージョン情報など)。さまざまな反応のほとんどは、X/Open Curses で terminfo/termcap が多かれ少なかれ固まった後に来ました。 ncurses はそれを拡張しますが、拡張機能のほとんどは機能または特殊キーのいずれかです。
Terminal.app は の最も一般的に使用される機能を実装しますがxterm
、(他の模倣者と同様に) 端末応答のほとんどを省略します。とりわけxterm
、ウィンドウの現在の色をアプリケーションに伝えることができる端末応答を提供します。この情報を使用するために作成された 2 つのコマンドライン ユーティリティ (xtermset
およびxtermcontrol
) があります (繰り返しになりますが、これらはレパートリーの一部しかカバーしていません)。を使用xtermcontrol
すると、この領域で Terminal.app が不足していることがわかります — スクリーンショットを参照してください:
perl や Terminal.app についてはわかりませんが、xterm などは前景/背景色の制御シーケンスを stdin に出力すると"\033]10;?\07"
、"\033]11;?\07"
それぞれを出力します。特にhttp://invisible-island.net/xterm/ctlseqs/ctlseqs.html、http://invisible-island.net/xterm/ctlseqs/ctlseqs.html#h2-Operating-System-Controlsを確認してください。