昔使っていた.tmux.confが失われてしまったため、新しいものを作っていく。
不要な機能が満載になっていたので、これを機に必要なものだけ設定する。
複数の鯖にsshで繋ぐと、ssh接続のペインだらけになり、間違えて操作してしまうことが多い。
その対策として、ssh接続ごとにペインの背景の色を変えていた。
結局、間違えるときは色を変えたところで間違えるため、デザインがケバくなるだけで無意味。
ペインに接続先ホスト名を表示するぐらいがちょうど良い感じだと思う。
こちらの完成度が超絶高いので使うことにしてみた。
ホスト名が強調されたりするともっと良いのだけれども。
SSH接続先のホスト名をtmuxのペインに表示する(大事件)
#!/bin/zsh
#/usr/local/bin/tmux-pane-border
if [[ $1 = \"ssh\" ]]; then
pane_pid=$2
info=$({ pgrep -flaP $pane_pid ; ps -o command -p $pane_pid; } | xargs -I{} echo {} | awk \'/ssh/\' | sed -E \'s/^[0-9]*[[:blank:]]*ssh //\')
port=$(echo $info | grep -Eo \'-p ([0-9]+)\'|sed \'s/-p //\')
if [ -z $port ]; then
local port=22
fi
info=$(echo $info | sed \'s/-p \'\"$port\"\'//g\')
user=$(echo $info | awk \'{print $NF}\' | cut -f1 -d@)
host=$(echo $info | awk \'{print $NF}\' | cut -f2 -d@)
if [ $user = $host ]; then
user=$(whoami)
list=$(awk \'
$1 == \"Host\" {
gsub(\"\\\\.\", \"\\\\.\", $2);
gsub(\"\\\\*\", \".*\", $2);
host = $2;
next;
}
$1 == \"User\" {
$1 = \"\";
sub( /^[[:space:]]*/, \"\" );
printf \"%s|%sn\", host, $0;
}\' ~/.ssh/config
)
echo $list | while read line; do
host_user=${line#*|}
if [[ \"$host\" =~ $line ]]; then
user=$host_user
break
fi
done
fi
ssh_hostname=\" ssh:$user@$host \"
fi
echo $ssh_hostname
# .tmux.conf
set-option -g pane-border-status bottom
set-option -g pane-border-format \"#P #(tmux-pane-border #{pane_current_command} #{pane_pid})\"
上記のサイトの通り、各ペインのセッションがsshであればペインのボトムにhostnameを表示している。
sshコマンド自体に手を入れたくないので、process listをポーリングするやり方に賛同します。
次回はシステムのクリップボードコピー。