Czy w tmux mogę uzyskać `exit`, aby wyjść z okna zawierającego terminal, a nie samą sesję?

3

Kiedy więc otwieram nowy terminal (używam terminatora w Arch Linux), skonfigurowałem go tak, aby albo otwierał nową tmuxsesję, jeśli nie istnieje, albo dołączał do istniejącej. Kiedy piszę exitw wierszu polecenia, kończy sesję tmux. Muszę wpisać exitponownie, aby zamknąć terminal. Chcę, żeby exitpo wpisaniu raz zamknął terminal, ale przestał tmuxdziałać, więc następnym razem, gdy otworzę terminal, połączy się on z poprzednią tmuxsesją. Zasadniczo jest to odpowiednik kliknięcia przycisku wyjścia w menedżerze okien, ale chcę tę funkcję podczas pisania exit.

EDYTOWAĆ:

To jest coś, co chcę:

alias exit='if [[ $TMUX = "" ]]; then exit; else tmux detach; exit; fi'

ale problem polega na exittym, że tmux detachpowinien zostać wywołany w terminalu zawierającym sesję tmux, a nie sama sesja tmux.

gsingh2011
źródło
wyjaśnij, w jaki dokładnie sposób „skonfigurowałeś go, aby albo otworzył nową sesję tmux, jeśli taka nie istnieje, albo dołączyć do istniejącej”
lesmana
@lesmana Właśnie zapewniałem kontekst. Jak to skonfigurowano, nie ma to znaczenia dla pytania. Możesz sobie wyobrazić, że nawet tego nie skonfigurowałem, a pytanie byłoby takie samo.
gsingh2011
exitnie jest tmuxrozkazem; to polecenie powłoki. tmuxkończy działanie tylko wtedy, gdy zakończysz polecenie (zwykle powłokę) w ostatnim panelu ostatniego okna. Wygląda na to, że chcesz po prostu odłączyć się od bieżącej sesji, w takim przypadku powinieneś użyć odpowiedniego tmuxpolecenia lub powiązania klawiszy.
chepner,
@chepner, wiem, że exitto nie jest polecenie tmux. Chcę się odłączyć od sesji i wyjść z terminala (nie sesji), ale chcę exitto zrobić w sesji Tmux. Myślę, że powinno to być możliwe z odrobiną bash-fu.
gsingh2011,
Dlaczego? Próbujesz zastąpić wbudowaną powłokę, exitaby nie wychodzić z powłoki. W każdym razie, jak długo trzeba tmuxbędzie rzeczywista komenda, która biegnie terminali (w przeciwieństwie do zaczynając tmuxjako dziecko powłoki rozpoczętej przez terminal), odłączenie spowoduje ostatni program działa w powłoce, aby wyjść i, zakładając, że terminal jest skonfigurowany do tego, automatycznie zamknij okno.
chepner,

Odpowiedzi:

2

Musimy zadeklarować dwie funkcje: jedna uruchamia tmux, a druga kończy tmux:

function ttmux {
if     (pgrep tmux); then
       tmux attach
  else tmux
  fi
builtin exit
}

Wykona się to albo (tmux attach lub tmux), jeśli proces tmux istniał, czy nie, po zakończeniu używania tmux zostanie wykonane wbudowane wyjście, aby zamknąć terminal (jeśli nie ma zagnieżdżonej powłoki).

function exit {
if      [ ${TMUX} ]; then
          tmux detach
      else builtin exit
     fi
}

Jeśli w Tmuxie go odłączysz, jeśli nie, uruchomisz wbudowane wyjście

Umieść je w swoim .bashrc lub .zshrc i zmień nazwę funkcji, jeśli chcesz, i wywołaj je.

>> ttmux # to start tmux
>> exit # to detach tmux
Ahed Eid
źródło
Kontynuacja: czy ta funkcja może wykryć panele i nie wyjść? Jeśli tak to jak?
John Do
0
terminator -e tmux

to uruchomi terminator z uruchomionym tmux zamiast powłoki. jeśli proces tmux zakończy się, terminator zostanie zamknięty zaraz po.

lesmana
źródło
Racja, ale pisanie exitnadal zabija ostatni terminal i kończy działanie tmux, prawda?
John Do