Quando si esce dall'ultimo terminale in una sessione di tmux, può passare a un altro?


12

Quando esco dall'ultimo terminale in una sessione di tmux, questo si chiuderà automaticamente e tornerà al terminale principale. È possibile invece passare tmux a un'altra sessione, già in esecuzione, invece di chiudere?

Creo una nuova sessione denominata per ogni attività su cui lavoro, come TRxxx, e-mail, scratch ecc. E quando ho finito con uno di essi chiudo tutti i terminali eseguendo exit in ognuno. Quando esegui exit nell'ultimo terminale di una sessione tmux ti riporterà al terminale genitore, ma è possibile farlo passare semplicemente a una delle altre sessioni aperte, quindi non devo ricollegarlo?

Questa domanda è simile a " Uccidi una sessione di tmux e seleziona un'altra sessione di tmux ", ma voglio chiudere i miei terminali nel modo giusto usando exit anziché uccidere la finestra.

Risposte:


2

La più vicina a me è stata una funzione tmux che ho scritto. Normalmente esco dalla shell premendo Ctrl+ D, quindi ho programmato tmuxdi uscire e cambiare sessione quando premo [PREFIX] Ctrl+ D. Inserisci quanto segue nel tuo .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;                                                     \
    "

Premi [PREFIX] Ctrl+ Ded esce dalla sessione corrente se (e solo se) contiene solo una shell che non esegue altri comandi. Passerà a un'altra sessione, se possibile. Uso la shell bash, quindi potresti aver bisogno di cambiarla in qualcosa che stai usando.

ps: se è importante, attualmente sto usando tmux 1.9a.


28

Ho aggiunto questo al mio ~/.tmux.conf:

set-option -g detach-on-destroy off

Quando distruggo l'ultima shell in una sessione, passa a un'altra sessione attiva. Una volta chiuse tutte le sessioni, tmuxesce.


4
la risposta giusta dovrebbe essere aggiornata a questo
cviejo

Si prega di presentare una petizione al poster della domanda.
RichN,

È importante notare che tmux non aggiorna tale impostazione durante il distacco e il ricollegamento a sessioni esistenti. È necessario riavviare il server tmux affinché abbia effetto.
nyi,

2

Aggiungi queste righe al tuo .bashrce prova:

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

1
È quasi quello che voglio ma è possibile cambiarlo in modo che funzioni solo se esco da tmux? Questo script verrà associato alle sessioni tmux esistenti ogni volta che apro un nuovo terminale. Provo ad avere una sessione tmux per roba locale e quindi apro un nuovo terminale quando ssh: ing su un altro computer dove avrò una sessione tmux separata per evitare di averli annidati.
David Holm,

No, questo script avvierà una nuova sessione di tmux ogni volta che si apre un nuovo terminale, non collegandolo a esistente. Puoi fornire maggiori dettagli, cosa intendi con "dentro tmux"?
cuonglm,

1
Diciamo che ho la sessione X e Y, dove Y ha un solo terminale aperto. Eseguo 'exit' nell'ultimo terminale in Y che causerà la chiusura della sessione. In questo caso, vorrei che tmux passasse alla sessione X anziché terminare. Ma non voglio allegare / creare una sessione di tmux ogni volta che lancio un nuovo terminale.
David Holm,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.