tmux popupを利用してみる

tmux v3.2がリリースされたようなので、触ってみました

$ tmux -V
tmux 3.2

github.com

使い方

詳しい使い方は以下の記事が詳しいです。

www.rasukarusan.com

tmux popupにコマンドを渡すとそれをpopup windowで実行してくれます

tmux popup 'echo hello'

コマンドの実行終了後に、windowを閉じたい場合は -E optionを付けます

tmux popup -E 'echo hello && sleep 2'

manでの -E optionの記述は以下

-E closes the popup automatically when shell-command exits

fzfで利用していたコマンドをtmux popupに適応する

普段zshを利用し開発をしていて、fzfのfunctionとかを呼んでいます。

history

C-r を押した時に、fzfでhistoryを表示するみたいなことはよくやります。 以下の記事を参考に export FZF_TMUX_OPTS="-p" のENVを生やすとpopup windowで出ると思います。 大きさ変更したい場合は、export FZF_TMUX_OPTS="-w80% -h80%" のENVに変更すればOKです。

dev.to

ghq + fzf

ghqでsession開いて移動するというのをよくやるので、それをpopup window化します。

一旦雑にやるなら以下のような感じ、tmux popupに複数行渡します。

  function create_session_with_ghq_for_popup() {
    tmux popup -E '
      moveto=$(ghq root)/$(ghq list | fzf)
      repo_name=$(basename $moveto)
      if [ $repo_name != $(basename $(ghq root)) ]
      then
        tmux new-session -d -c $moveto -s $repo_name
        tmux switch-client -t $repo_name
      fi
    '
  }

これで動くけど、history同様fzf-tmuxを利用できるので、それを利用すると以下のように書けます。

  function create_session_with_ghq_for_popup() {
    local moveto=$(ghq root)/$(ghq list | fzf-tmux -w80% -h80%)
    local repo_name=$(basename $moveto)
    if [ $repo_name != $(basename $(ghq root)) ]
    then
      tmux new-session -d -c $moveto -s $repo_name
      tmux switch-client -t $repo_name
    fi
  }

syntax highlightも利くし良い感じになります。やったね。

まとめ

tmux popup、無限の可能性を秘めている。 tmuxのkeybindでもtmux popupは呼べるので、tmuxの設定をいじってどこからでも任意のコマンドを実行できるようにするのも面白そうです。

bind -r C-u run-shell 'tmux popup -E "echo hello && sleep 5"'