Ketika keluar dari terminal terakhir dalam sesi tmux dapatkah itu beralih ke yang lain?

12

Ketika saya keluar dari terminal terakhir dalam sesi tmux, ia akan secara otomatis menutup tmux dan mengembalikan saya ke terminal induk. Apakah mungkin untuk mengganti tmux ke sesi lain, yang sudah berjalan, alih-alih ditutup?

Saya membuat sesi bernama baru untuk setiap tugas yang saya kerjakan, seperti TRxxx, email, scratch dll dan ketika saya selesai dengan salah satu dari mereka saya menutup semua terminal dengan menjalankan keluar di setiap satu. Ketika Anda menjalankan keluar di terminal terakhir dari sesi tmux akan mengembalikan Anda ke terminal induk tetapi apakah mungkin untuk mendapatkannya hanya beralih ke salah satu sesi terbuka lainnya, jadi saya tidak perlu memasang kembali?

Pertanyaan ini mirip dengan " Bunuh sesi tmux dan pilih sesi tmux lain " tapi saya ingin menutup terminal saya dengan cara yang baik dengan menggunakan keluar daripada membunuh jendela.

David Holm
sumber

Jawaban:

2

Yang paling dekat saya dapatkan adalah fungsi tmux yang saya tulis. Saya biasanya keluar dari shell dengan menekan Ctrl+ D, jadi saya memprogram tmuxuntuk keluar dan beralih sesi ketika menekan [PREFIX] Ctrl+ D. Masukkan yang berikut ini di .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;                                                     \
    "

Tekan [PREFIX] Ctrl+ Ddan keluar dari sesi saat ini jika (dan hanya jika) hanya memegang satu shell yang tidak menjalankan perintah lain. Ini akan beralih ke sesi lain jika memungkinkan. Saya menggunakan bash shell, jadi Anda mungkin perlu mengubahnya ke sesuatu yang Anda gunakan.

ps: kalau-kalau itu penting, saya saat ini menggunakan tmux 1.9a.

Injil
sumber
28

Saya menambahkan ini ke ~/.tmux.conf:

set-option -g detach-on-destroy off

Ketika saya menghancurkan shell terakhir dalam satu sesi, itu beralih ke sesi aktif lainnya. Setelah semua sesi ditutup, tmuxkeluarlah.

RichN
sumber
4
jawaban yang benar harus diperbarui untuk ini
cviejo
Tolong petisi poster pertanyaan.
RichN
Penting untuk dicatat bahwa tmux tidak memperbarui pengaturan itu saat melepaskan dan menempel kembali ke sesi yang ada. Anda perlu me-restart server tmux agar dapat memiliki efek.
nyi
2

Tambahkan baris ini ke Anda .bashrcdan coba:

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
sumber
1
Ini hampir seperti yang saya inginkan tetapi apakah mungkin untuk mengubahnya sehingga hanya berjalan jika saya keluar dari dalam tmux? Script ini akan dilampirkan ke sesi tmux yang ada setiap kali saya membuka terminal baru. Saya mencoba untuk memiliki sesi tmux untuk barang-barang lokal dan kemudian saya membuka terminal baru ketika ssh: ing ke komputer lain di mana saya akan memiliki sesi tmux terpisah untuk menghindari mereka bersarang.
David Holm
Tidak, skrip ini akan memulai sesi tmux baru setiap kali Anda membuka terminal baru, bukan melampirkan yang sudah ada. Bisakah Anda memberikan detail lebih lanjut, apa maksud Anda "inside tmux"?
cuonglm
1
Katakanlah saya memiliki sesi X dan Y, di mana Y hanya memiliki satu terminal terbuka. Saya menjalankan 'keluar' di terminal terakhir di Y yang akan menyebabkan sesi berakhir. Dalam hal ini saya ingin tmux untuk beralih ke sesi X daripada mengakhiri. Tapi saya tidak ingin sesi tmux dilampirkan / dibuat setiap kali saya meluncurkan terminal baru.
David Holm