SSH
iTerm2

iTerm2でsshの時に背景色を変える方法

ターミナルで複数タブを開いていると、ローカルなのかサーバーの中なのか、はたまた本番環境なのか開発環境なのかわからなくなることが多々あります。
今どこで作業しているのかをわかりやすくしたいなと思って調べていたところ、sshの時に背景色を変える方法を見つけたので利用してみることにしました。

環境

  • macOS Sierra 10.12.3
  • iTerm2 Build 3.1.beta.5
  • zsh 5.2 (x86_64-apple-darwin16.0)

見た目イメージ

こんな感じになります。
色が多いせいでカーソルがどこにあるのかわかりにくくなるという副作用はありますが、どこで作業しているのかはわかりやすくなったと思います。

  • ローカル 黒
  • vps 赤
  • 研究室鯖 青

スクリーンショット 2017-08-03 17.50.25.png

コード

以下のコードを適当な場所に配置し、権限を与えた上で、alias ssh=/some/bin/ssh-backgroundのようにaliasを設定することでssh時に色をつけることができます。

#!/bin/bash
# Installation:
# 1. Save this script to /some/bin/ssh-background
# 2. chmod 755 /some/bin/ssh-background
# 3. alias ssh=/some/bin/ssh-background
# 4. Configure your host colors below.
# from https://gist.github.com/BugRoger/789887

set_color() {
  local HEX_FG=$1
  local HEX_BG=$2
  local OPACITY=$3

  local FG_R=`echo $HEX_FG | sed 's/../0x&,/g' | awk -F "," '{printf("%d",$1 * 257)}'`
  local FG_G=`echo $HEX_FG | sed 's/../0x&,/g' | awk -F "," '{printf("%d",$2 * 257)}'`
  local FG_B=`echo $HEX_FG | sed 's/../0x&,/g' | awk -F "," '{printf("%d",$3 * 257)}'`
  local BG_R=`echo $HEX_BG | sed 's/../0x&,/g' | awk -F "," '{printf("%d",$1 * 257)}'`
  local BG_G=`echo $HEX_BG | sed 's/../0x&,/g' | awk -F "," '{printf("%d",$2 * 257)}'`
  local BG_B=`echo $HEX_BG | sed 's/../0x&,/g' | awk -F "," '{printf("%d",$3 * 257)}'`

  /usr/bin/osascript <<EOF
tell application "iTerm"
   tell current session of first window
      set foreground color to {$FG_R, $FG_G, $FG_B}
      set background color to {$BG_R, $BG_G, $BG_B} 
      set transparency to "$OPACITY" 
   end tell
end tell
EOF
}

# ホストごとに色を決める
if [[ "$@" =~ host0.example.com ]]; then
   set_color ffffff 330000 0.2 
elif [[ "$@" =~ host1.example.com ]]; then
   set_color ffffff 000033 0.2
fi

ssh $@

set_color ffffff 000000 0.2

さいごに

ホストごとに色を決めるところはssh/configを見て生成できるようになればなーとか思ったので今後やってみようかなと思ってます。
色がついたのはいいですがカーソルの位置がわかりづらくなったりしたのでもう少し調整必要だなーとは思いました。

参考HP