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"],
...
],
)
Typically, my .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 "tensorflow"
, "bazel"
, and
"jsonnet"
, with each window startng in its respective directories, run:
tiles start default
Now, the "default"
name is special, and running a tiles
command without
specifying a name will cause tiles
to look for a session called "default"
.
Thus, to start my default session, I can simply run the following command:
tiles start
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 tmux
list-sessions
to list the currently active sessions.
Some future improvements I planning to make to Tiles include:
tiles
available on PIPIf 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.