I use tmux extensively whenever I write code. Typically, I have about ten or so tmux windows open on my main tmux session and may have one or two other tmux sessions with fewer windows. My main tmux session is where I do most of my work, and typically, I keep one window per project or bug I am working on. I would use my other sessions for writing notes, doing operational tasks on the cluster, etc.
I found working with raw tmux commands to be cumbersome, so I wrote a simple Python script, Tiles, to make it easier for me to manage my tmux sessions, create tmux sessions with a predefined list of windows, and attaching to existing tmux sessions.
Tiles reads a
.tiles configuration file in your home directory. The syntax of
the Tiles DSL was inspired by that of the Bazel build system. The
syntax is as follows:
tmux_session( name = "session-name", windows = [ ["window-name", "/path/to/directory/for/window"], ... ], )
.tiles file on my home machine (where I often work on open
source projects in my spare time) might look something like the following:
tmux_session( name = "default", windows = [ ["tensorflow", "~/Projects/tensorflow/tensorflow"], ["bazel", "~/Projects/bazelbuild/bazel"], ["jsonnet", "~/Projects/google/jsonnet"], ], ) tmux_session( name = "notes", windows = [ ["notes", "~/Notes"], ["blog", "~/Projects/dzc/davidzchen.github.io"], ], )
To launch a tmux session with the windows
"jsonnet", with each window startng in its respective directories, run:
tiles start default
"default" name is special, and running a
tiles command without
specifying a name will cause
tiles to look for a session called
Thus, to start my default session, I can simply run the following command:
A work, I generally keep my tmux sessions running all the time on my desktop and simply ssh in and attach to my tmux sessions. For example, to attach to an existing tmux session called "ops", simply run:
tiles attach ops
Tiles also has a handy
tiles ls command, which simply runs
list-sessions to list the currently active sessions.
Some future improvements I planning to make to Tiles include:
tilesavailable on PIP
If you want to give Tiles a try, check out the Tiles website and documentation and repository on GitHub. Feel free to open an issue or send a pull request if you have any feature requests or find any bugs.