デフォルトでは、tmuxはウィンドウの端を通過します。たとえば、2つのウィンドウがあるとしますpane 1
。pane 2
あなたがそうだと仮定し、pane 1
これを行うならばCtrl+b →、あなたはですpane 2
。この操作をやり直すと、Ctrl+b →再び入ることができますpane 1
。最後のウィンドウでナビゲートするときにどこにも行かないように、その機能を無効にするにはどうすればよいですか?
答え1
これは少し面倒ですが十分です。バージョン 2.3 以降、各ウィンドウの境界の x 座標と y 座標を見つけることができます。たとえば、display -p #{pane_right}
80列ターミナルの右端にあるウィンドウの場合、値は79です。次のウィンドウに右に移動するコマンドを実行し、新しいウィンドウのpane_right
値が39の場合は左に移動したので、前のウィンドウに戻るを使用する必要がありますselect-pane -l
。
mytmux
ほとんどのtmuxコマンドはシェルスクリプトで実行できるため、PATHに次のファイルを作成して実行可能にします(chmod +x mytmux
)。
#!/bin/bash
# https://unix.stackexchange.com/a/451473/119298
restrict(){
case $1 in
U) d=-U p=pane_top cmp=-gt ;;
D) d=-D p=pane_bottom cmp=-lt ;;
L) d=-L p=pane_left cmp=-gt ;;
R) d=-R p=pane_right cmp=-lt ;;
*) exit 1 ;;
esac
old=$(tmux display -p "#{$p}")
tmux select-pane "$d"
new=$(tmux display -p "#{$p}")
[ "$new" "$cmp" "$old" ] && tmux select-pane -l
exit 0
}
case $1 in
-restrict)shift
restrict "${1?direction}" ;;
esac
次に、次のバインディングを設定します~/.tmux.conf
。
bind-key -r -T prefix Up run-shell 'mytmux -restrict U'
bind-key -r -T prefix Down run-shell 'mytmux -restrict D'
bind-key -r -T prefix Left run-shell 'mytmux -restrict L'
bind-key -r -T prefix Right run-shell 'mytmux -restrict R'
たとえば、複数のセッションを処理するには、セッションを拡張する必要があります。
答え2
デフォルトでは、キーはPrefixArrow次のようにバインドされます。
bind-key -r -T prefix Up select-pane -U
bind-key -r -T prefix Down select-pane -D
bind-key -r -T prefix Left select-pane -L
bind-key -r -T prefix Right select-pane -R
このselect-pane
関数には、「その方向の最後のウィンドウに達したら繰り返さないでください」と通知するオプションはありません。
実行ソースコードを見ると、select-pane
左/右、上/下のループがハードコードされているようですが、このように実行されるのを防ぐのは容易ではないという意味です。