DATE: 2023-09-23
AUTHOR: John L. Godlee
I have two monitors at work. Normally I have a terminal running tmux open full screen on the right-hand monitor, in portrait, and use the left monitor in landscape for everything else. Occasionally however, I want to also have a terminal open on the left monitor, and to move windows easily between terminals. To make it easier to share windows across terminals, I have adjusted my tmux setup to take advantage of the grouped-sessions feature.
At the bottom of my .tmux.conf I have this chunk, which starts a new session called "main", as a daemon.
new-session -s main -d
Then, at the bottom of my .bashrc I have this chunk. First it checks if tmux is already running (if [ -z "$TMUX" ]). Then if tmux isn't running, it creates a new session within the same group as session "main" (new-session -t main). It then sets the option destroy-unnattached, which removes clients when you detach from them, ensuring that the automatically created sessions don't pile up when they are detached from.
if [ -z "$TMUX" ]; then /usr/local/bin/tmux new-session -t main \; set-option destroy-unattached fi
The result is that when I open a terminal, tmux checks if the "main" session exists, creates it if it doesn't and attaches a client to that session.
All sessions in the same group share the same set of windows, but you can move freely between windows in each session.
{{< video src="/vid/tmux_sessions/tmux_sessions.mp4" >}}