Solution 1 : まずはシンプルに
以下を~/.zshrc
に書く。
# Autostart if not already in tmux.
if [[ ! -n $TMUX ]]; then
tmux new-session
fi
但し,このままだと,新しく端末を立ち上げるたびにどんどんセッション数が増えていって,面倒なことこの上ない。
Solution 2 : デタッチしたら端末を閉じる
if [[ ! -n $TMUX ]]; then
tmux new-session && exit
fi
そうだけど,そうじゃない。
Solution 3 : 既にtmuxセッションが存在している時には選択してattatchできるようにする
と便利ですね。
tmux list-sessions
を実行すると
main: 3 windows (created Wed Jan 27 11:49:33 2016) [88x34] (attached)
1: 1 windows (created Wed Jan 27 17:59:17 2016) [213x54]
のようにセッション名: n windows ( ...
と返ってくるので,cut
でセッション名を取得すればいい。
せっかくだからfzfとか選択的インターフェースを使って見た目もかっこよくしましょう。
if [[ ! -n $TMUX ]]; then
# get the IDs
ID="`tmux list-sessions`"
if [[ -z "$ID" ]]; then
tmux new-session
fi
ID="`echo $ID | $PERCOL | cut -d: -f1`"
tmux attach-session -t "$ID"
fi
環境変数$PERCOL
にはお好きな選択的インターフェースアプリケーションの名前を入れておく。
(ex. fzf, peco, percol)
しかし,これでは新たにセッションをつくることができない。
Solution 4 : 既にセッションが存在するときにも新たにセッションを作れるようにする
if [[ ! -n $TMUX ]]; then
# get the IDs
ID="`tmux list-sessions`"
if [[ -z "$ID" ]]; then
tmux new-session
fi
create_new_session="Create New Session"
ID="$ID\n${create_new_session}:"
ID="`echo $ID | $PERCOL | cut -d: -f1`"
if [[ "$ID" = "${create_new_session}" ]]; then
tmux new-session
fi
tmux attach-session -t "$ID"
fi
"Create New Session:"という項目が追加され,これを選択すると新規セッションが作られる。
":"の前の文言は何でもいいが,”:”は抜かしてはいけない。
Solution 5 : セッション選択中にESCキーなどで抜けた時にはtmuxを起動しないようにする
とさらにいいかもしれません。
if [[ ! -n $TMUX ]]; then
# get the IDs
ID="`tmux list-sessions`"
if [[ -z "$ID" ]]; then
tmux new-session
fi
create_new_session="Create New Session"
ID="$ID\n${create_new_session}:"
ID="`echo $ID | $PERCOL | cut -d: -f1`"
if [[ "$ID" = "${create_new_session}" ]]; then
tmux new-session
elif [[ -n "$ID" ]]; then
tmux attach-session -t "$ID"
else
: # Start terminal normally
fi
fi
Solution 6: インタラクティブシェルでは選択画面を表示しない
tmuxの中にいない状態で,
$ zsh
のようにしてインタラクティブシェルを起動するときも,上のようにtmuxを起動するかどうか聞く挙動をしてしまう。
どんどん入れ子になっていくと気持ち悪いので,ログインシェルでないときは,tmuxのセッションを起動or選択する機能を切ることにする。
ログインシェルでは
$ echo $-
569XZghiklms
インタラクティブシェルでは
$ echo $-
569XZghikms
で分かるように,インタラクティブシェルではオプション'-l'が指定されないことがわかるので,それで判定($- == *l*
)する。
if [[ ! -n $TMUX && $- == *l* ]]; then
# get the IDs
ID="`tmux list-sessions`"
if [[ -z "$ID" ]]; then
tmux new-session
fi
create_new_session="Create New Session"
ID="$ID\n${create_new_session}:"
ID="`echo $ID | $PERCOL | cut -d: -f1`"
if [[ "$ID" = "${create_new_session}" ]]; then
tmux new-session
elif [[ -n "$ID" ]]; then
tmux attach-session -t "$ID"
else
: # Start terminal normally
fi
fi
まとめ
Solution 6 をzshrcに書いて,いつでもtmuxの中にいる安心感を享受できるようになった(急に分割したくなったりするじゃないですか)。みなさんも端末のタブ機能なんて使ってないで,ぜひどうぞ。
その他のエイリアスなどはこちら