Ao sair do último terminal em uma sessão do tmux, ele pode mudar para outro?

12

Quando eu sair do último terminal em uma sessão tmux, ele fechará automaticamente o tmux e me retornará ao terminal pai. É possível ter o tmux switch para outra sessão, já em execução, em vez de fechar?

Crio uma nova sessão nomeada para todas as tarefas em que trabalho, como TRxxx, email, scratch etc. e quando termino com uma delas, fecho todos os terminais executando exit em cada uma delas. Quando você executa exit no último terminal de uma sessão, o tmux retornará você ao terminal pai, mas é possível alternar para uma das outras sessões abertas, para que eu não precise reconectar?

Esta pergunta é semelhante a " Matar uma sessão do tmux e selecionar outra sessão do tmux ", mas quero fechar meus terminais da maneira mais agradável, usando exit em vez de matar a janela.

David Holm
fonte

Respostas:

2

O mais próximo que cheguei foi de uma função tmux que escrevi. Normalmente, saio do shell pressionando Ctrl+ D, então programei tmuxpara sair e alternar sessões ao pressionar [PREFIX] Ctrl+ D. Coloque o seguinte em seu .tmux.conf:

bind C-d run-shell "                                        \
    if [ #{session_windows} -eq 1 ] &&                      \
       [ #{window_panes}    -eq 1 ] &&                      \
       [ #{pane_current_command}  = 'bash' ]; then          \
        if [ \$(tmux list-sessions | wc -l) -ge 2 ]; then   \
            tmux switch-client -ln;                         \
        fi; tmux kill-session -t \"#S\";                    \
    else                                                    \
        tmux display-message \"Ignoring kill session...\";  \
    fi;                                                     \
    "

Pressione [PREFIX] Ctrl+ De sai da sessão atual se (e somente se) tiver apenas um shell que não esteja executando nenhum outro comando. Mudará para outra sessão, se possível. Eu uso o shell bash, então você pode precisar alterá-lo para algo que esteja usando.

ps: caso isso importe, atualmente estou usando o tmux 1.9a.

evangelhos
fonte
28

Eu adicionei isso ao meu ~/.tmux.conf:

set-option -g detach-on-destroy off

Quando destruo o último shell em uma sessão, ele alterna para outra sessão ativa. Depois que todas as sessões estiverem fechadas, tmuxsai.

RichN
fonte
4
resposta certa deve ser atualizado para esta
cviejo
Por favor, solicite o pôster da pergunta.
RichN
É importante observar que o tmux não atualiza essa configuração ao desanexar e reconectar às sessões existentes. Você precisa reiniciar o servidor tmux para que ele tenha efeito.
Nyi
2

Adicione estas linhas ao seu .bashrce tente:

if which tmux 2>&1 >/dev/null 
then
    # start a new session if not exist
    test -z ${TMUX} && tmux

    # when quitting tmux, try to attach to other session
    while test -z ${TMUX}; do
        tmux attach || break
    done
fi
cuonglm
fonte
1
É quase o que eu quero, mas é possível alterá-lo para que só funcione se eu sair do tmux? Este script será anexado às sessões existentes do tmux sempre que eu abrir um novo terminal. Eu tento ter uma sessão tmux para coisas locais e, em seguida, abro um novo terminal quando ssh: ing para outra máquina onde terei uma sessão tmux separada para evitar que eles sejam aninhados.
David Holm
Não, esse script iniciará uma nova sessão do tmux sempre que você abrir um novo terminal, não anexar ao existente. Você pode fornecer mais detalhes, o que você quer dizer com "inside tmux"?
cuonglm
1
Digamos que eu tenho a sessão X e Y, onde Y tem apenas um terminal aberto. Eu corro 'exit' no último terminal em Y, o que fará com que a sessão seja encerrada. Nesse caso, eu gostaria que o tmux mudasse para a sessão X em vez de terminar. Mas não quero que uma sessão do tmux seja anexada / criada sempre que eu lançar um novo terminal.
David Holm