Edited at

tmuxでGNU screenのようにwindowの中身のpaneを入れ替える試み#1

More than 1 year has passed since last update.

GNU screenのwindowは本物のwindow(窓)で、中身を入れ替えられるのですが、tmuxのwindowはwindowというよりはpaneを貼り付ける掲示板のようなもので、画面1と2を並べて、その後画面1と3を並べたい、というような使い方をするのが難しいです。link-windowのような、link-paneがあると良いのですけどね。

ということで、swap-paneを使って強引にGNU screenのようにpaneの中身を入れ替えて使う事を試みてみました。以下のようなkey bindを用います。

.tmux.conf

bind u \

run-shell "tmux swap-pane -t :`tmux showenv TM_#{pane_id}|sed s/[^=]*=//`" \;\
command-prompt -p window: 'run-shell "tmux setenv TM_#{pane_id} '%%'"; \
run-shell "tmux swap-pane -t :`tmux showenv TM_#{pane_id}|sed s/[^=]*=//`"'

<prefix> u と打つと、 window: というプロンプトが出るので、

自分以外のwindow番号もしくは <#window>.<#pane> のような形式でもってきたいpaneを指定します。そうすると現在のpaneと指定のpaneが入れ替わり、

入れ替えた先のpane識別子が TM_#{pane_id} 環境変数に保存されます。

さらに他のpaneと入れ変えようとすると、直前の入れ替えをもとに戻してから入れ替えを行います。

GNU screen の <prefix>+number に近い挙動になっているかなと思いますが、制限として、同じpaneを別々のpaneから入れ変えようとすると問題が生じます。