LoginSignup
3
3

More than 5 years have passed since last update.

tmuxで最後のwindowの最後のpaneであるときだけ確認メッセージを出して、それ以外はそのままkillする

Posted at

導入

最近tmuxを使い始めました。xmonadも使っているので、その存在価値はあるのかとかも言われそうですが、僕は分割が使いたいんじゃなくて、カッコいいタブ(windowのこと)と、間違って消してしまっても死なない存在がほしいだけなんです。

screen_003.jpg

というわけで、表題の通り、これ書いとくと便利かもよという設定です。お役に立てれば幸いです。

やりたいこと

一つのセッションの中の最後のwindowの中の最後のpaneであるときのみ、paneを消すときに確認メッセージを出すようにして、それ以外のときは確認せずにpaneを消すようなキーバインドがほしい。

方法

答えから言ってしまうと、

# if session has > 1 windows in current, kill-pane without confirmation.
# But confirm before killing pane when it is the last  pane in the last window.
bind -n M-x if "tmux display -p \"#{session_windows}\" | grep ^1\$ && tmux display -p \"#{window_panes}\" | grep ^1\$" \
    "confirm-before -p \"Kill the only pane in the only window? It will kill this session too. (y/n)\" kill-pane" \
    "kill-pane"

と書いてしまえばいいです。これで、メタキー(MacだとCommandキー、Windows、LinuxだとAltキー)を押しながらxキーを押すことで、それがそのセッションの最後のwindowの最後のpaneで無い限り、確認なしでkill-paneします。

解説

tmux.confの中ではif文を使用することができます。

if "特殊文字をエスケープさせたシェルコマンド" \
    ”tmux内のコマンド(返り値0で実行される)” \
    "tmux内のコマンド(それ以外のとき実行される)"

という形式で書くことができます。更にネストできるかどうかはやってないのでわかりませんが、多分できそうな気もします。

ちなみに、設定ファイルの中ではバックスラッシュでエスケープできるので、上のような書き方をしても大丈夫です。

やっていることは、tmux display "#{session_window}"で現在のセッションの持つwindowの数を出して、それが1であるときだけ次の条件を見ます。次はtmux display -p "#{window_pane}"で、そのwindow内のpaneの数を見て、それが1であるときとそうでない時に条件を分けます。これが真であるときには、確認メッセージを出し(confirm-before -p "..." kill-pane)、そうでない時は何も言わずにkill-paneすることになります。

また、これと全く同じようにして、最後のwindowであるときにだけ確認してkill-windowするように設定を書くことができて、

# if session has > 1 windows in current, kill-window without confirmation.
# But confirm before killing window when it is the last window in the session. 
bind -n M-X if "tmux display -p \"#{session_windows}\" | grep ^1\$"\
    "confirm-before -p \"Kill the only window in this session? It will kill the session too. (y/n)\" kill-window" \
    "kill-window"

のようにすればMetaキー+Xにそのようにキーを割り当てることができます。

まとめ

簡単な設定だけど、自分なりにはかなり便利になったと思います。他にもxmonadライクなキーバインドを設定しているので、よかったら自分のtmux.confも見てやってください。

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3