開いているすべての端末の端末の色を動的に切り替えるには?

開いているすべての端末の端末の色を動的に切り替えるには?

Ubuntu / Fedoraでgnome-terminalを使用しています。私が使ったカラースキームの場合16ベースシェル、そして私のエディタviの対応する設定です。

.bashrc起動時にbase16テーマを設定するように設定しました。時々 bashrc ファイルを変更してテーマを切り替えます。時々カラースキームを変更することができ、.bashrcその後のすべてのウィンドウが正しい色で開かれるため、カラースキームを変更するのに適しています。

私が望むもの?

gnome-terminalワンクリック/コマンドで開いているすべてのウィンドウのカラースキームを変更できるようにしたいです。これを行う方法はありますか?

マイワークフローについて

私は通常、異なる設定で複数の端末ウィンドウを開いたままにします。その中にはテキストエディタが開いており、一部のテキストエディタプログラム(vim)はバックグラウンドで実行され、同じ端末ウィンドウで複数のテキストエディタにマルチタスクすることができます。部屋の照明に応じて、2つのカラースキーム、つまり昼/明るい部屋のための明るい構成と夜間/照明が暗い部屋のための暗い構成の間を切り替えるのが最善です。

カラースキームを切り替えるために開いているすべての端末ウィンドウにコマンドを入力する必要はありません。また、一部のプログラムがフォアグラウンドで実行されている可能性があり、中断したくない場合があります。カスタムカラースキームに切り替えるために端末に「通知する」方法はありますか?

フォアグラウンドでアクティブに実行されているプログラムがある端末では、これを行うのは難しいかもしれません。ただし、少なくともバックグラウンドにプログラムがある場合、またはコマンドが実行されていない他のすべての端末に対してこの操作を実行できます。

役に立ったら、他の端末も調べたいです。 GNOME端末プロファイルを使用しようとしましたが、必要なものを達成する方法がわからないようです。

よろしくお願いします!

答え1

ほとんどのGNOMEアプリケーションと同様に、GNOME端末の設定はdconfデータベースに保存されます。コマンドdconfまたはより高いレベルの代替を使用して設定を照会または変更できますgsettings

GNOME端末はさまざまな設定ファイルをサポートしています。すべての既存のウィンドウでプロファイルを切り替えるように指示することはできませんが、いつでもプロファイルプロパティを再定義できます。

ターミナルは、プライマリ・データベースに対する変更を自動的に直ちに選択します。

たとえば、を使用してデータベースをダンプし、dconf dump / > outputfileGNOME端末の[基本設定]ダイアログボックスでいくつかの値を変更し、前のコマンドを繰り返して2つの出力を比較して違いを見つけます。

次のコマンドを使用して、プログラムで値を変更できます。

dconf write /org/gnome/terminal/legacy/profiles:/:b1dcc9dd-5262-4d8d-a863-c897e6d979b9/background-color "'rgb(200,210,220)'"

foreground-color、フィールドも似ていますpalette

より多くの標準#rrggbb表記も適用されます。

入れ子になった引用符を参照してください。シェルは外部引用符を削除し、設定した実際の値にも引用符を含める必要があります。

デフォルト以外のプロフィールを使用している場合、そのプロフィールのIDはあなたのプロフィールとは異なります。


別の可能なアプローチ:

OSC 4、10、11エスケープシーケンスを使用すると、カラーランタイムをオーバーライドできます。少なくともGNOME端末の場合、これは端末設定よりも優先されます。

以下のすべての項目を繰り返し/dev/pts、これらのエスケープシーケンスをすべての項目にエクスポートします。たとえば、

printf '\e]11;#abcdef\e\\' > /dev/pts/17

これらの項目の一部は他のユーザーのものであるため、その項目に対する権限が拒否されます。一部は他の端末に属しているため、これらのシーケンスを認識できない場合があります。

端末で進行中のアクティビティは、マルチバイトUTF-8シーケンスまたはエスケープシーケンスの途中にあり、それをインターリーブできます。この場合、内部で実行されているアプリケーションの出力が破損していることがわかります。

私は、端末がこれらのOSCシーケンスをサポートしていますが、実行時に設定を変更する他のより安全な方法を許可しないユーザーにこの方法をお勧めします。

関連情報