fishを使っているときにtmuxのwindow nameをコマンド履歴にしたい

サマリ

fishのfish_preexecイベントをフックして、tmuxのwindow nameをコマンド履歴に変えることができる。

はじめに

tmuxを使っていると、このwindowでは一体何をしていたんだっけという状況に陥ることがままある。 そういうとき、window nameが最後に実行したコマンドだと、何をしていたか思い出すのに役立つ*1

そんなことができるのか

以下の2つの材料から結構簡単にできちゃう。 ちなみに、"フックをかける"というのは、イベント発生時に何かコマンドが実行できるよ、って意味。

  • tmux rename-window <window name>でwindowの名前が変えられる
  • fishには、fish_preexecという、コマンド実行前にフックをかけられるイベントがある

どうするのか

fish_preexecイベントフックは、~/.config/fish/config.fishに書くのが作法らしい*2。 実際にはこんな感じになる。 tmuxを使っているときは、環境変数$TERMがscreenかtmuxになるので、そのときだけwindow nameを変えるコマンドを打つ。 あんまり長いコマンドを表示してもあれなので、16文字くらいで打ち止めするようにしている。

 # rename tmux window
 function window_rename --on-event fish_preexec
     if test -n (echo $TERM | grep -e screen -e tmux)
         tmux rename-window (printf "%.16s" $argv[1])
     end
 end

おわりに

fish_preexecイベントのおかげで、簡単にtmuxのwindow nameを動的に変えることができる。

雑感

  • fishの設定ファイルは人間に読みやすいのがよい。bashとの互換性はないけど、別にどうでもいいやという感。
  • fishは手入れが楽なのでありがたい

*1:気がする。既に慣れてしまってるのでよくわからん・・・

*2:ソースは失念