하나의 tmux 세션을 종료하고 다른 tmux 세션을 선택하십시오.

하나의 tmux 세션을 종료하고 다른 tmux 세션을 선택하십시오.

X다음을 수행하기 위해 바인딩하려고합니다 .

  • 세션을 종료해야 하는지 사용자에게 묻습니다.
  • y입장 하면 세션을 종료합니다
  • 세션이 종료된 후 다른 세션(마지막, 이전 또는 다음 세션)을 선택하십시오.

일부 유사한 명령이 올바르지 않습니다.

  1. 세션을 종료하고 터미널을 닫습니다.

    bind X confirm-before -p "Kill #S (y/n)?" kill-session
    
  2. 종료할 세션 이름을 입력하고 종료 후 다음 세션을 선택하라는 메시지를 사용자에게 표시합니다.

    bind X command-prompt -p "kill:"  "switch-client -n \; kill-session -t '%%'"
    
  3. 비슷한 명령의 예를 찾지 못했습니다. 작동하지 않는 해결책은 다음과 같습니다.

    bind X confirm-before -p "Kill #S (y/n)?" "SESSION='#S' \; \
    switch-client -n \; kill-session -t \"$SESSION\""
    

답변1

나는 이것이 당신이 원하는 것에 가깝다고 생각합니다.

bind-key X confirm-before -p "Kill #S (y/n)?" "run-shell 'tmux switch-client -n \\\; kill-session -t \"#S\"'"

#3 접근 방식은 정확하지만 문제는 명령 문자열에 -style 대체(예:)가 confirm-before없다는 것입니다.status-left#S

위 바인딩에 대한 한 가지 주의 사항은 모든 작업이 from 내에서 수행되므로 run-shell명령이 특정 클라이언트 또는 세션의 컨텍스트 외부에서 실행된다는 것입니다. "기본" 클라이언트(용 switch-client) 및 "기본" 세션(용 #S)이 가장 최근에 활성화된 클라이언트이기 때문에 작동합니다 . 활성 클라이언트가 하나만 있는 한(예: 다른 사용자에게 입력하지 않는 단일 사용자) 이는 예상대로 작동합니다.멀티플렉서클라이언트는 쉘 명령 실행이 완료될 때까지) (예를 들어) 바인드를 트리거하면 크게 실패할 수 있습니다.멀티플렉서클라이언트 A, 새로운 입력이 수신됨멀티플렉서클라이언트 B는 run-shell셸이 시작되기 전에 명령을 실행할 수 있습니다.

run-shell이 특정 경쟁 조건은 명령에 클라이언트/세션/창/창 정보를 제공하는 좋은 동기가 되는 것 같습니다 . 가져오기 if-shellrun-shell지원(선택 사항?) status_replace()(예: 스타일 교체) 에 대한 TODO 항목이 있지만 status-left아마도 더 나은 옵션은 format_expand()이것이 새로운 상위 집합 status_replace(offers #{client_tty}등)이라는 것입니다.

답변2

누구든지 이 질문에 걸려 넘어질 경우를 대비해 -tmux-토커이 기능과 다른 많은 기능을 제공합니다.

답변3

set-option -g detach-on-destroy off평소처럼 구성에 추가하고 세션을 종료 할 수도 있습니다 .

답변4

나는 Chris의 답변에 대해 (주관적으로) 더 강력하고 읽기 쉬운 버전을 생각해 냈습니다.

bind-key X \
    if-shell '[ "$(tmux display -p "#{session_many_attached}")" -gt 0 ]' {
        # the session is attached to multiple clients, so we can just switch the client to a different session.
        choose-session
    } {
        # we are the last client attached to this session; kill it.
        # we need to use `run-shell` to ensure that the current session number is expanded *before* we switch to the new session.
        confirm -p 'Kill #S (y/n)?' {
            choose-tree -s {
                run-shell 'tmux switch-client -t "%%" \; kill-session -t "#S"'
            }
        }
    }

관련 정보