5

So when I open a new terminal (I use terminator on Arch Linux), I have it configured to either open a new tmux session if one doesn't exist, or attach to an existing one. When I type exit at the prompt, it quits the tmux session. I have to type exit again to quit the terminal. What I want is that typing exit once will quit the terminal, but leave tmux running, so the next time I open the terminal it will reattach to the previous tmux session. Essentially, this is the equivalent of clicking the exit button for the window manager, but I want this functionality when typing exit.

EDIT:

This is something like what I want:

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

but the issue is the exit after the tmux detach should get called in the terminal containing the tmux session, not the tmux session itself.

6
  • please elaborate how exactly you "have it configured to either open a new tmux session if one doesn't exist, or attach to an existing one"
    – Lesmana
    Commented Aug 5, 2014 at 20:44
  • @lesmana I was just providing context. How that's configured it completely irrelevant to the question. You can imagine I don't even have that configured, and the question would be the same.
    – gsgx
    Commented Aug 5, 2014 at 21:20
  • exit is not a tmux command; it's a shell command. tmux only exits if you terminate the command (usually, a shell) in the last pane of the last window. It sounds like you just want to detach from the current session, in which case you should use the appropriate tmux command or key binding.
    – chepner
    Commented Aug 6, 2014 at 15:36
  • @chepner, I know exit isn't a tmux command. I want to detach from the session and exit the terminal (not the session), but I want to use the exit command in a tmux session to do that. I think it should be possible with some bash-fu.
    – gsgx
    Commented Aug 6, 2014 at 15:55
  • Why? You're trying to override the shell built-in exit to not exit a shell. Anyway, as long as you have tmux be the actual command that the terminal runs (as opposed to starting tmux as a child of a shell started by the terminal), detaching will cause the last program running in the shell to exit and, assuming your terminal is configured to do so, automatically close the window.
    – chepner
    Commented Aug 6, 2014 at 16:05

2 Answers 2

5

We have to declare two functions one to start tmux and the other to exit tmux :

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

This will execute either (tmux attach or tmux) if tmux process existed or not , after you finish using tmux , built-in exit will be executed to close the terminal(if there isn't nested shell).

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

If you inside tmux will detach it , if not will execute built-in exit

Put them in your .bashrc or .zshrc and change function name if you wish, and call them.

>> ttmux # to start tmux
>> exit # to detach tmux
1
  • Follow-up: is it possible for this exist function to detect panes and not exit? If so, how?
    – John Do
    Commented May 21, 2018 at 14:46
0
terminator -e tmux

this will start terminator with tmux running instead of a shell. if the tmux process exits terminator will close right after.

1
  • Right, but typing exit will still kill the final terminal and exit tmux, right?
    – John Do
    Commented May 21, 2018 at 14:47

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .