tmux popupとは
tmuxのバージョン3.2-rcより導入された新たな機能。
どのようなものかはGIF見ていていただくのが一番早い。
paneやwindowの概念とは別に、新規ウィンドウがtmux上に表示される。
使用用途としてはmanにも書いてあるとおり、一時的な作業をするのに適している。
またはfzfの絞り込みをpopup上で行うというものが挙げられる。ちなみにfzfはすでにtmux popupに対応しており、fzfと書いていたところをfzf-tmuxと書き換えてあげればpopupで絞り込みができるようになっている。無論使用しているtmuxがバージョン3.2以上であることが前提。
popup対応しているtmuxをインストールする
現状(2020/09/27)、brewでインストールできるtmuxは3.1bが最新なので、popupが使えない。
なのでtmuxをgit cloneして手動でインストールするしかない。といってもREADMEに記載してあるとおりにするだけなので簡単だ。
git clone https://github.com/tmux/tmux.git
cd tmux
sh autogen.sh
./configure && make
tmuxという実行ファイルが誕生していればOK。
実行時は今起動しているtmuxは終了して、./tmuxで実行できる。すでにインストールしているtmuxのセッションを全て終了していないと、エラーが出たりpopupが使えないので、必ず終了しておく。tmux kill-serverしておけばOK。
# 現在のtmuxを終了しておく $ tmux kill-server # 最新版のtmuxを起動 $ ./tmux # バージョン確認(3.2以上だったらOK) $ tmux -V tmux next-3.3
popupの実行方法
popupを実行するのは下記の通りでとても簡単。
tmux popup

-wや-hで幅、高さの指定も可能。
tmux popup -w80% -h10%

-xや-yで位置の指定も可能。
tmux popup -x10 -y40

popupでコマンドの実行結果を表示する
popup内でshellコマンドを実行するには-Rオプションを使う
tmuxのバージョンアップで修正されました。現在は-Rオプションがなくなり、第一引数にコマンドを渡すだけで実行されます。
tmux popup "cat README"

ShellScript内で実行するときなどで、現在のディレクトリをpopupにも渡したいときは下記
tmux popup -d '#{pane_current_path}' "cat README"
また、popup内でshellを起動して作業をしたいときは-KERをオプションにつける。
tmuxのバージョンアップで修正されました。現在は-EのみでOKです
tmux popup -E "zsh"

-KEについては、popup内でshellを起動して自由に動き回りたいなら必須だと思ってくれていい。
一応説明
-KをつけるとCtrl-C、ESC以外ではpopupを終了させることができなくなる。デフォルトはどんなキーを押してもpopupは消えてしまうので、popup内でコマンドを打ちたいときは-Kは必須。 ただ、Ctrl-C、ESCでpopupが消えてしまうので、popup内でCtrl-C(処理をやめたいときなど)を使いたいときは後述の-Eを使う。-Eをつけるとshellのexitコマンドでpopupを終了できるようになる。なので-KRとセットで使われることが前提。
色々遊んで見た感想
- 1セッションにつき、1popupなので、複数のpopupを同時に起動とかはできない
- neovimのfloating windowのように、popupと現在のwindowを行ったり来たりはできない
- どんなにpaneが小さくても、真ん中にドカンと表示することができるので、fzfの絞り込みと相性は抜群
# toiletコマンドが必要 tmux popup -w30 -h15 -E " toilet -f mono12 ル && sleep 0.1" tmux popup -w30 -h15 -E " toilet -f mono12 パ && sleep 0.1" tmux popup -w30 -h15 -E " toilet -f mono12 ン && sleep 0.1" tmux popup -w30 -h15 -E " toilet -f mono12 ル && sleep 0.1" tmux popup -w30 -h15 -E " toilet -f mono12 パ && sleep 0.1" tmux popup -w30 -h15 -E " toilet -f mono12 ー && sleep 0.1" tmux popup -w30 -h15 -E " toilet -f mono12 ー && sleep 0.1" tmux popup -w30 -h15 -E " toilet -f mono12 ー && sleep 0.1" tmux popup -w30 -h15 -E " toilet -f mono12 ー && sleep 0.1" tmux popup -w30 -h15 -E " toilet -f mono12 ン && sleep 0.1" tmux popup -w100% -h15 " toilet -w $(tput cols) -f mono12 ルパンルパーーーン"
終わり
複数のpopup起動ができればアニメーションっぽい動きもできて、面白くなりそう。
