tmuxからウィンドウの端に切り替えない方法

tmuxからウィンドウの端に切り替えない方法

デフォルトでは、tmuxはウィンドウの端を通過します。たとえば、2つのウィンドウがあるとしますpane 1pane 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左/右、上/下のループがハードコードされているようですが、このように実行されるのを防ぐのは容易ではないという意味です。

関連情報