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起動ができればアニメーションっぽい動きもできて、面白くなりそう。