昔使っていた.tmux.confが失われてしまったため、新しいものを作っていく。
不要な機能が満載になっていたので、これを機に必要なものだけ設定する。
複数の鯖にsshで繋ぐと、ssh接続のペインだらけになり、間違えて操作してしまうことが多い。
その対策として、ssh接続ごとにペインの背景の色を変えていた。
結局、間違えるときは色を変えたところで間違えるため、デザインがケバくなるだけで無意味。
ペインに接続先ホスト名を表示するぐらいがちょうど良い感じだと思う。
こちらの完成度が超絶高いので使うことにしてみた。
ホスト名が強調されたりするともっと良いのだけれども。
SSH接続先のホスト名をtmuxのペインに表示する(大事件)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
#!/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|%s\n", 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 |
1 2 3 |
# .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をポーリングするやり方に賛同します。
次回はシステムのクリップボードコピー。