Al salir de la última terminal en una sesión tmux, ¿puede cambiar a otra?

12

Cuando salgo del último terminal en una sesión de tmux, se cerrará automáticamente y me devolverá al terminal principal. ¿Es posible que tmux cambie a otra sesión que ya se está ejecutando en lugar de cerrar?

Creo una nueva sesión con nombre para cada tarea en la que trabajo, como TRxxx, correo electrónico, scratch, etc. y cuando termino con una de ellas, cierro todas las terminales ejecutando exit en cada una. Cuando ejecuta exit en el último terminal de una sesión, tmux lo devolverá al terminal principal, pero ¿es posible que cambie a una de las otras sesiones abiertas en su lugar para que no tenga que volver a conectarlo?

Esta pregunta es similar a " Eliminar una sesión de tmux y seleccionar otra sesión de tmux ", pero quiero cerrar mis terminales de la mejor manera usando exit en lugar de cerrar la ventana.

David Holm
fuente

Respuestas:

2

Lo más cercano que obtuve fue una función tmux que escribí. Normalmente salgo del shell presionando Ctrl+ D, así que programé tmuxpara salir y cambiar de sesión al presionar [PREFIX] Ctrl+ D. Ponga lo siguiente en su .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;                                                     \
    "

Presiona [PREFIX] Ctrl+ Dy sale de la sesión actual si (y solo si) contiene solo un shell que no ejecuta ningún otro comando. Cambiará a otra sesión si es posible. Utilizo el shell bash, por lo que es posible que deba cambiarlo por algo que esté utilizando.

ps: en caso de que sea importante, actualmente estoy usando tmux 1.9a.

gospes
fuente
28

Agregué esto a mi ~/.tmux.conf:

set-option -g detach-on-destroy off

Cuando destruyo el último shell en una sesión, cambia a otra sesión activa. Una vez que todas las sesiones están cerradas, tmuxsale.

RichN
fuente
44
la respuesta correcta debería actualizarse a esto
cviejo
Por favor, solicite el póster de la pregunta.
RichN
Es importante tener en cuenta que tmux no actualiza esa configuración al desconectar y volver a conectar a las sesiones existentes. Debe reiniciar el servidor tmux para que tenga efecto.
nyi
2

Agregue estas líneas a su .bashrce intente:

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
fuente
1
Es casi lo que quiero, pero ¿es posible cambiarlo para que solo se ejecute si salgo del interior de tmux? Este script se adjuntará a las sesiones tmux existentes cada vez que abra una nueva terminal. Intento tener una sesión de tmux para cosas locales y luego abro una nueva terminal cuando hago un ssh: a otra máquina donde tendré una sesión de tmux separada para evitar anidarlas.
David Holm
No, este script iniciará una nueva sesión de tmux cada vez que abra una nueva terminal, no se adjunte a una existente. ¿Puede proporcionar más detalles, qué quiere decir "dentro de tmux"?
Cuonglm
1
Digamos que tengo la sesión X e Y, donde Y solo tiene una terminal abierta. Ejecuto 'exit' en la última terminal en Y, lo que hará que la sesión finalice. En este caso, me gustaría que tmux cambie a la sesión X en lugar de finalizar. Pero no quiero que se adjunte / cree una sesión tmux cada vez que inicio un nuevo terminal.
David Holm