肉
C または C++ で、カラー パレットの RGB 値を直接読み取る方法はありますか? 特に興味深いのは、最大 256 のターミナル カラーを定義するために xterm (およびその他) で使用される拡張カラー スペースです。
ポテト
適切なケースは、(ANSI エスケープ シーケンスを使用して、または c で直接) 独自の色を定義したいが、\e]4;3;rgb:cc/78/33\e\\
再定義する前にユーザーの色を保存する必要があることです (まれに、ユーザーが既に色を再定義している場合)。 ) プログラムが終了したときにそれらを復元できるようにします。ユーザー設定を壊すのは良くありません。
現在、ANSI エスケープ シーケンスを使用してクライアントの方法でこれを行うことを目指しています。しかし、色を出す方法が見つからないので、代わりに c または c++ でこれを行うことを検討し始めています。
ソリューションは、ネイティブ拡張機能 (基本的には c または c++ コードが埋め込まれたもの) を備えた ruby gem として作成されます。主なターゲットは OS X であり、次に Linux 環境であっても、クロスプラットフォーム ソリューションを取得することを目指します...
ソース
最初の実験から、カラー パレットのコード ポイントに必要な色を定義できるようになりました。デフォルトのシステム カラーを簡単に復元することもできます (ANSI 標準であるため)。私は ANSI エスケープ コードでこれを行う方法をよく調べましたが、何も見つかりませんでした。これはどこかにメモリに保存されていると思います。どこにあるかを見つける方法があれば、色を読むのは簡単なはずです...
デザート
これまでのコメントの情報を要約するには:
これを一貫して行う唯一の方法は、█文字の画面を異なる色で印刷し、そこから色を取得することです。このプロジェクトは 3 つの主要な OS にまたがるクロス プラットフォームであると想定されており、Linux では現在 3 つのディスプレイ マネージャーが使用されており、Windows には 2 つ (7 と 8) があるため、何時間も楽しめることしか想像できません。だろう :)
したがって、私の「解決策」™ は、ユーザーの色を上書きすることです (システムのデフォルト以外の色があった場合、これはかなり珍しいことです)。システムのデフォルトに満足できない場合に、どの色を復元する必要があるかをユーザーがプラグインに伝えることができる設定ファイルを提供します。実用的で退屈ですが、これでまたやり直せます :)