tmuxをもうちょっと簡単に扱えるように良い感じのコマンドを開発した

みなさんtmuxってますか? ターミナルで色んなことしたい人にとってはtmuxは必須ツールの1つかと思います。僕はだいたい1レポジトリ1セッションくらいで名前を切って作業していて各セッションに更にタブを生やして作業するのをスタイルとしています。 昨今のターミナルは非常に優秀でタブで似たようなことはできると思いますが、やはりtmuxかっこいいので使いたくなってしまうのが性なのです。がしかし、僕は非常に物覚えが悪くaliasを貼ってもなおtmuxでの新規セッションの作成や他セッションへのアタッチの動きに中々慣れず、例えばセッションにアタッチ中であればデタッチせずともtmux switch-client -t hogeとかでスイッチできますが、セッションから抜けている状態であればコマンドが変わってtmux attach -t hogeとかになりますよね。こういう切り替えが僕の脳では厳しく、もうちょっと簡単に扱えないものかと思っていました。 そこで、この辺の判断はプログラムに任せるかつセッション選択型のCLIツールを作ろうと思いました。

github.com

最近はCLIツールをGo言語で書いて、CLIツールの開発にはcobraというパッケージを使っています。

使用例としては、et とタイプすると選択型でプロンプトされるので、用途にあった選択数値をタイプするだけです。

$ et
=====Create new session or Attach another session=====
0: Create New Session
1: bugbounty
2: easy-tmux (Attached)
3: shutto
4: some-server
======================================================
Enter what you want:

kill-sessionのサブコマンドも実装していて、kを後ろにつければkill-sessionモードで選択型のプロンプトが表示されるようになっています。

$ et k
=====KILL SESSION=====
1: bugbounty
2: easy-tmux (Attached)
3: shutto
4: some-server
=======================
Enter what you want:

f:id:keisuke_t:20190702004400p:plain

f:id:keisuke_t:20190702004629p:plain

今後のどの辺をアップデートしていくかはtmuxを使いながら考えたいなあと思っていて、例えばtmuxからシンプルにデタッチする事もコマンドで解決したいかとか、tmuxにはセッション以外にもウィンドウ(タブ)もあるので、これらもコマンドで同様に切り替えやkillができるようにしたいかとかはコマンド自体の複雑性が増す可能性があるのとそもそもコマンド化しなくてもこの辺は良いキーマップが公式に用意されているので今の所は必要ないかなあと思ってます。逆にやりたいのは、ymlやtomlファイルにセッション名やウィンドウ名、もしくはペーン数を設定できて$ et load とかでいつものワーキングターミナルが立ち上がるみたいなのはやりたいなと思っています。なので、そこら辺アップデートしつつtmux環境で気持ちよく作業できるような感じにしていければ最高かなと思ってます。