For now, there is no specific way to have tmux automatically run commands triggered by detach
or closing all windows in the session. However, since you already have a wrapper script (I will call this tmux_wrapper
) that opens your desired custom-session, you can easily convert this script to automate cleanup. I do something very similar to this myself here, where I wanted to allow nested tmux sessions if I am attaching through ssh.
Since you have a custom experience in mind, you no longer need the tmux attach ....
or similar commands, so I will assume you always start session for project A by something like tmux_wrapper A
. In your wrapper you probably have a line similar to tmux new-session -s A
. Here we can take advantage of the session name A
. Then, at the end of your wrapper you can have a cleanup switch that only activates if the session is no longer live (i.e. windows/panes are no longer attachable).
A simple example tmux_wrapper
would look something like this:
#!/bin/sh sess=$1 # test if the session has windows is_closed(){ n=$(tmux ls 2> /dev/null | grep "^$sess" | wc -l) [[ $n -eq 0 ]] } # either create it or attach to it if is_closed ; then tmux new -s $sess else tmux attach -t $sess fi # the session is now either closed or detatched if is_closed ; then # perform cleanup here ... fi
Run it like tmux_wrapper A
. Now, the cleanup will automatically occur for session A if and only if the session has been completely closed.