tmux에서 창 가장자리로 전환하지 않는 방법

tmux에서 창 가장자리로 전환하지 않는 방법

기본적으로 tmux는 창 가장자리를 지나갑니다. 예를 들어 두 개의 창이 있다고 가정합니다 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왼쪽/오른쪽, 위/아래 루프가 하드코딩되어 있는 것 같은데, 이런 식으로 실행되는 것을 막는 것이 쉽지 않다는 뜻입니다.

관련 정보