tmuxを使ってセッションを新しく作ると、最後に作ったセッションの次の番号がセッション名として使われる。端的に言えばSQLのINCREMENTのような仕様となっている。

たとえば、セッション作成を二回行うと、セッション01ができている。この状態でセッション1を閉じる。そのあとセッション作成すると、セッション2が作られてしまう。このとき作成されるセッションの名前は1であってほしいな〜というのが今回のネタである。

どうするかというと、tmux自体にセッション番号を詰めて割り振る機能はないので、session-created/closedのフックにスクリプトを挟み込むことで実現する。主に Feature request: new option renumber-sessions in addition to renumber-windows · Issue #937 · tmux/tmux の解説となる。

実装

.tmux.conf

set-hook -g session-created "run ~/dotfiles/bin/tmux-reorder-sessions.sh"
set-hook -g session-closed  "run ~/dotfiles/bin/tmux-reorder-sessions.sh"

みたいに書いておく。ファイル名は何でもいい。スクリプトでは『数字名のついたセッションを見つけ出し、sortして、それぞれに新たに0から名前を振り直す』ようにする。

#!/usr/bin/env bash

sessions=$(tmux ls | grep -E '^[0-9]*:' | cut -f1 -d':' | sort)

new=0
for old in $sessions
do
  tmux rename -t $old $new
  ((new++))
done

こんな感じ。それではみなさん良いtmuxライフを。