Виходячи з останнього терміналу в tmux сесії, чи може він перейти на інший?


12

Коли я вийду з останнього терміналу під час сеансу tmux, він автоматично закриє tmux і поверне мене до батьківського терміналу. Чи можливо замість закриття tmux перейти на інший, вже запущений, сеанс замість закриття?

Я створюю новий названий сеанс для кожного завдання, над яким я працюю, наприклад TRxxx, електронна пошта, подряпини тощо, і коли я закінчую з одним із них, закриваю всі термінали, запускаючи вихід у кожному. Коли ви запустите вихід в останньому терміналі сеансу, tmux поверне вас до батьківського терміналу, але чи можна змусити його просто перейти на один з інших відкритих сеансів, тому мені не доведеться повторно вкласти?

Це питання схоже на " Убити сеанс tmux та вибрати інший сеанс tmux ", але я хочу закрити свої термінали приємним способом, використовуючи вихід, а не вбиваючи вікно.

Відповіді:


2

Найближчою мені була функція tmux, яку я написав. Я зазвичай виходжу з оболонки натисканням Ctrl+ D, тому я програмував tmuxвихід та перемикання сеансів при натисканні [PREFIX] Ctrl+ D. Помістіть у своєму .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;                                                     \
    "

Натисніть [PREFIX] Ctrl+ Dі він закриває поточний сеанс, якщо (і тільки якщо) він містить лише одну оболонку, яка не виконує жодних інших команд. Він перейде на інший сеанс, якщо це можливо. Я використовую bash shell, тому вам може знадобитися змінити його на те, що ви використовуєте.

ps: якщо це має значення, я зараз використовую tmux 1.9a.


29

Я додав це до свого ~/.tmux.conf:

set-option -g detach-on-destroy off

Коли я знищую останню оболонку в сеансі, вона переходить на інший активний сеанс. Щойно всі сеанси закриті, tmuxзавершується.


4
правильну відповідь слід оновити до цього
cviejo

Будь ласка, подайте клопотання на афіші запитання.
RichN

Важливо зазначити, що tmux не оновлює цей параметр під час від'єднання та повторного приєднання до існуючих сеансів. Вам потрібно перезапустити tmux-сервер, щоб він мав ефект.
nyi

2

Додайте ці рядки до свого .bashrcі спробуйте:

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
Це майже те, що я хочу, але чи можна змінити його так, щоб він працював лише у випадку, якщо я вийду зсередини tmux? Цей скрипт додається до існуючих сесій tmux, коли я відкриваю новий термінал. Я намагаюся провести сеанс tmux для локальних речей, а потім відкриваю новий термінал, коли ssh: ing на іншій машині, де у мене буде окремий сеанс tmux, щоб уникнути їх вкладення.
Девід Холм

Ні, цей скрипт розпочне новий сеанс tmux щоразу, коли ви відкриєте новий термінал, а не приєднуйтесь до існуючого. Чи можете ви надати більше деталей, що ви маєте на увазі "всередині tmux"?
cuonglm

1
Скажімо, у мене є сесії X і Y, де у Y відкритий лише один термінал. Я запускаю "вихід" в останньому терміналі Y, що призведе до припинення сеансу. У цьому випадку я хотів би tmux перейти на сеанс X замість завершення. Але я не хочу, щоб сеанс tmux приєднувався / створювався щоразу, коли я запускаю новий термінал.
Девід Холм
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.