web-dev-qa-db-ja.com

minttyとtmuxでソラリゼーションされた色を切り替える

新しいターミナル/ tmuxセッションを作成せずに、明るい/暗いソーラーテーマを簡単に切り替える方法を見つけようとしています。私はWindowsマシンでminttyを実行しており、通常はLinuxマシンにログインして、tmuxセッションに接続します。

mavnnのsolarized mintty 色と seebiのsolarized tmux 色を使用して、端末の色をその場で変更できるbash関数をいくつか作成しました。これは私の.bashrcにあります:

 function godark()
 {
〜/ solarized/sol.dark 
 tmux source-file〜/tmux/tmuxcolors-dark.conf 
 } 
 
 function golight()
 {
〜/ solarized/sol.light 
 tmux source-file〜/tmux/tmuxcolors-light。 conf 
} 

したがって、sol.darkの内部には、次のような指示があります。

 echo -ne '\ eP\e] 10;#839496\a'#前景-> base0 
 echo -ne '\ eP\e] 11;#002B36\a'#背景- > base03 

tmuxcolors-dark.confの中には、次のようなものがあります。

 set-option -g status-bg colour235#base02 
 set-option -g status-fg colour130 #yellow 

これはほぼ動作しています。 tmuxを開いていない場合は、「godark」と入力するとminttyが暗いテーマに変わりますが、これをtmuxと入力すると、tmuxステータスバーが正しいテーマに変わりますが、端末の背景の色は変わりません。私はANSIエスケープシーケンスを本当に理解していないので、ここで何かばかげたことをしているのかもしれません。これを機能させるために助けていただければ幸いです。

4
Jeff

エスケープシーケンスを次のように変換することで、tmux内から包含端末にエスケープシーケンスを送信できます。

  1. \eのすべての出現を2倍にする
  2. \ePtmux;を付加します
  3. 追加\e\\

たとえば、ターミナルエミュレータとして st を使用すると、実行することでパレットの色#1(赤)を再定義できます。

printf '\e]4;1;#aa0000\a'

Tmux内から同じことを行うには、使用する必要があります

printf '\ePtmux;\e\e]4;1;#aa0000\a\e\\'

シェルスクリプト/関数を使用して色を切り替える場合は、$TMUX環境変数を確認してください。空でない場合は、tmux内にいます。

5
igor