pockestrap

Programmer's memo

tmux sessions ❤ peco

peco を使って tmux の session にいい感じにアタッチ出来るようにした。

想定する tmux の使いかた

  • セッションを沢山生やす
    • 私は、だいたい1 git repository 毎に tmux の session を生やしている。
    • 仕事だとメインで 4 git repositories + 色々 の為に tmux session を使っている
    • tmux list-sessions | wc -l したら 11 だった
  • 1 directory につき 1 session
    • 例えば、~/hogeapp/ というディレクトリには1つセッションがあれば充分。
  • zsh を使用している
    • 他のシェルの人は、適宜読み替えて欲しい

やりたいこと

f:id:Pocke:20170622141122g:plain

peco を使用して、いい感じに tmux の session を選択してアタッチをすることが出来る。

やったこと

1. tmux のセッションに名前を付ける

デフォルトでは、tmux のセッションに名前はなく、連番が振られる。 連番だとlist-sessionsしてもどれが目的のセッションなのかがわからないため、名前を付けるようにする。

function t()
{
  tmux new-session -s $(basename $(pwd))
}

上記を~/.zshrcに追記する。 これにより、tで tmux のセッションを新しく起動すると、起動したディレクトリの名前がセッション名になる。

2. peco の設定を書く

function peco-select-tmux-session()
{
  if [ -n "$TMUX" ]; then
    echo 'Do not use this command in a tmux session.'
    return 1
  fi

  local session="$(tmux list-sessions | peco | cut -d : -f 1)"
  if [ -n "$session" ]; then
    BUFFER="tmux a -t $session"
    zle accept-line
  fi
}
zle -N peco-select-tmux-session
bindkey '^T' peco-select-tmux-session

上記も~/.zshrcに追記する。 これで、<C-t>で tmux の session 名からアタッチが行えるようになった。