ホストごとにターミナルウィンドウを色分けする

ホストごとにターミナルウィンドウを色分けする

私は定期的に ssh を使用してさまざまなホストで作業していますが、どのコンピュータでコマンドを実行しているのか混乱することがあります。間違ったホストに halt(8) コマンドを発行しそうになったこともあります。

理想的には、現在ログインしているホストに基づいて、ターミナル ウィンドウの上部のリボンを色分けしたいと思います。私は Openbox と gnome-terminal を使用していますが、このようなことを簡単に、または少なくとも可能にするターミナル エミュレーターに切り替えることを検討します。

誰かこれを行う方法を知っていますか? プログラムでウィンドウの色を変更する方法を教えていただければ、自分で作業を行うことも怖くありません。

答え1

「ウィンドウの色」とは、ウィンドウの境界線の色を意味しますか? そうであれば、ウィンドウ マネージャーに、ウィンドウのタイトルに基づいてウィンドウの境界線の色を設定するように指示しますuser@host: /path。ほとんどのウィンドウには というパターンがあります。ウィンドウ クラスによってこれがターミナルであるかどうかを確認し、タイトルが変更されたときにそれを解析して、使用する色を更新するのは簡単です。ただし、関連するフローがわからないため、どの程度の作業が必要になるかはわかりません。

しかしこれは可能です。

(Openbox でこれができるかどうかはわかりませんが、よく考えてみると、これがより簡単な方法です)

アップデート:

openbox のソースを確認した後、ウィンドウがタイトルのホストに依存するターミナルである場合、グローバル ではなく、そのウィンドウに必要な色を含む別のテーマが使用されるように関数にパッチframerender_frameを当てる必要があると思います。openbox/framerender.cob_rr_theme

[ のコンテキストではframerender_frame、ウィンドウのタイトルは次のようになりますself->client->title]

これを実行するには、ローカルを介してframerender_frameグローバルを参照するように変更する必要があり、ホスト:テーママップと追加のテーマをロードするためのコードを記述する必要があります。ob_rr_themetheme

疑似コード(つまり実行されません):

RrTheme* theme = ob_rr_theme;
if "gnome-terminal" equals self->client->class: # for example only
    host = parse_title(self->client->title)
    theme = lookup host in by_host if not found use theme
# and then in the rest of framerender_frame use theme instead of ob_rr_theme

by_hostホスト文字列をRrThemeテーマにマッピングする場所

関連情報