上記の記事を参考に私の環境でも設定を行ってみたのですが、window名がうまく復元できない場合がありました。
以下のようなケース(window名については適当です)
- windowを複数(
window1
,window2
)を開いている-
window1
は「ECサイト開発」、window2
は「Androidアプリ開発」というwindow名を設定しておく
-
-
window1
で開発用サーバへssh接続-
window1
が「dev_server0001」というwindow名に切り替わる
-
-
window2
に切り替えて別の作業 - タイムアウトが原因で
window1
のsshがいつの間にか切断されている-
window1
は「dev_server0001」のままで、window2
が「ECサイト開発」というwindow名に切り替わる
-
理想の動き
4のタイミングでこうなるのが理想です。
- 操作しているwindowは
window2
だが、window1
のwindow名が「ECサイト開発に戻る」
いろいろ試行錯誤
renameする対象windowを指定することが出来ないかなーと公式のマニュアルを見てみる。
rename-windowコマンド
なにやら使えそうなオプションを発見。tmux rename-window -t
で指定できそう
http://man.openbsd.org/OpenBSD-current/man1/tmux.1
rename-window [-t target-window] new-name
(alias: renamew)
Rename the current window, or the window at target-window if specified, to new-name.
display-messageコマンド
dispaly
ってaliasだったんですね。
http://man.openbsd.org/OpenBSD-current/man1/tmux.1
display-message [-p] [-c target-client] [-t target-pane] [message]
(alias: display)
Display a message. If -p is given, the output is printed to stdout, otherwise it is displayed in the target-client status line. The format of message is described in the FORMATS section; information is taken from target-pane if -t is given, otherwise the active pane for the session attached to target-client.
更に引数でどの情報を表示するのか?を指定できるらしい。
http://man.openbsd.org/OpenBSD-current/man1/tmux.1#FORMATS
window_id Unique window ID
window_name #W Name of window
ということはtmux display -p '#{window_id}'
でwindow_idを退避しておけば、window名復元時に対象を指定できるはず!!
上記調査を基に.bashrcを修正
# ssh接続、切断時にtmuxウィンドウ名を動的に変更する
function ssh() {
# tmux起動時
if [[ -n $(printenv TMUX) ]]
then
# 現在のwindow名を退避
local window_name=$(tmux display -p '#{window_name}' )
local window_id=$(tmux display -p '#{window_id}' )
# 通常通りssh続行
command ssh $@
# 退避していたwindow名を復元
tmux rename-window -t $window_id $window_name
else
command ssh $@
fi
}
これで理想の動きを実現できました。