Back in 2014 I wrote a Bash script called tm that made creating and connecting to tmux sessions and windows a bit easier. I’ve been using it ever since, pretty much daily, with a few revisions. I thought it was probably about time I shared the updates.

As a recap, tm lets you quickly create named tmux sessions like this:

# create new or connect to existing session named "mmc"
$ tm mmc

# Create new or connect to existing window named "remote"
$ tm mmc remote

Here’s what’s new:

  • Case insensitive session/window matching
  • Allow numeric index for window argument (zero-indexed)
  • Create new named window if second argument is passed but no existing match is found
  • Replace a bunch of sed and awk crud with -F params
  • Add select menus when running without arguments (just tm), using fzf if available
  • Exit gracefully (with error) if run within a tmux session

There are probably other little changes I made along the way, but that’s what I gathered from a quick diff. The updated script can be found in this gist.

Running with Fish

tm is written in Bash, but works fine in other shells with the /bin/bash hashbang. So in Fish, for example, I just make sure that the script is saved as tm, is executable, and is located in my $fish_user_paths.

Fish tab completion

When I first published it, I included some bash completion scripts. I’ve added a Fish completion script that you can install in ~/.config/fish/completions/tm.fish. Once installed, you can type tm [tab] it will complete from all open sessions, and running tm session_name [tab] will complete windows for the named session (including indexes for unnamed windows). Nifty.