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-session
usa por padrão (vejaman tmux
para 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)