Bash
MacOSX
SSH
iTerm2

MacOS iTerm2 | SSHログイン時にターミナルの背景色とタブの色を変更する


環境


  • MacOSX : High Sierra 10.13.6

  • iTerm2 : 3.2.7

  • bash : GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin17)


成果物

jxmtst/sshColor


タイムライン


ずっと思っていた事

色々なサービスの色々な環境を行ったり来たりしている間に

このタブがアクセスしているサーバがどこか忘れてしまう事がある、たまに困る


こんな記事を見つけた

どうやらiTermにはコマンドラインから背景色を変更するエスケープシーケンスが独自拡張で実装されているらしい *1

# [背景色を変える]

echo -e '\033]1337;SetColors=bg=FF0000\a'
# => 背景色がFF0000(赤色)になる

# [タブ色を変える]

tab-color() {
echo -ne "\033]6;1;bg;red;brightness;$1\a"
echo -ne "\033]6;1;bg;green;brightness;$2\a"
echo -ne "\033]6;1;bg;blue;brightness;$3\a"
}
tab-color 255 255 0
# => タブ色がFFFF00(黄色)になる


検索したらこんなGistを見つけた

こちらはAppleScriptを使って背景色と透明度を変更している *2

# foreground: 文字色 RGBそれぞれを0-65535の間で指定(第4引数に透過度も指定できる)

# background: 背景色 RGBそれぞれを0-65535の間で指定(第4引数に透過度も指定できる)
# transparency: 透明度 0.0-1.0で指定 0.0が透過しない
bg_color() {
/usr/bin/osascript <<EOF
tell application "iTerm"
tell current session of first window
set foreground color to {
$1, $2, $3}
set background color to {
$4, $5, $6}
set transparency to "
$7"
end tell
end tell
EOF
}
bg_color 65535 65535 65535 0 0 8738 0.1
# => 文字色(FFFFFF) 背景色(000022) 透明度(10%)


ssh-backgroundをforkして改修した


  1. 透明度が変更できるので、背景色変更の処理は*2を使用

  2. *1を見て背景色だけでなくタブ色も変更できる様にした

  3. 自分の開発プロジェクトではhost名にStaging環境は[stg-]Production環境は[prod-]のprefixがついているので、stgとprodで色を変えられる様にした

  4. 接続が重いときにCtrl-cで切断したら元の色に戻る様にした


使い方

*僕のデフォルトカラーは黒板色なので、各自で自分のデフォルトカラーに直して下さい

$ git clone https://gist.github.com/dafb2f5a39eb3ff7ee951ba7c6eb85fb.git dist

$ cp -p dist/sshColor /usr/local/bin/
$ chmod +x /usr/local/bin/sshColor
$ alias ssh=/usr/local/bin/sshColor
$ ssh prod-host
#=> 背景色が赤くなる!
prod-host$ exit
#=> 元に戻る
$ ssh stg-host
#=> 背景色が青くなる!
stg-host$ exit
#=> 元に戻る

alias ssh=/usr/local/bin/sshColor は.bashrcあたりに記述しておくと良いと思います