Isso liga PREFIX C-s para escolher uma sessão, alternar para ela e depois matar a sessão anterior:
bind-key C-s \
if-shell "(($(tmux display -p '#{session_many_attached}') > 0))" \
choose-session \
"run-shell \"tmux choose-session \\"switch-client -t '%%'; kill-session -t '$(tmux display -p '#S')'\\"\""
Eu usei expressões shell ( outra resposta que não usou o shell seria ótima! ). Primeiro eu uso o if-shell do Tmux para decidir se há vários clientes conectados. Se houver, invoco o comando padrão choose-session .
No entanto, se este for o único cliente anexado à sessão, eu passo um comando personalizado para choose-session , mas faço isso no shell (com run-shell ) para poder construir a linha de comando passada para choose-session .
Essa linha de comando é composta de dois comandos:
-
switch-client -t '%%', que é o quechoose-sessionusa por padrão (vejaman tmuxpara uma explicação). -
kill-session -t '$(tmux display -p '#S')'primeiro usa um subshell para obter o nome da sessão atual (ainda não foi destruída) e passa isso como um parâmetro parakill-session.
O comando final requer muito escape para que ele funcione. O if-shell recebe três argumentos: um comando shell e dois comandos tmux. Estes precisam ser citados se contiverem espaços em branco. Portanto, o terceiro argumento run-shell... é bastante desagradável!
(tmux 2.3)