Tmuxでややこしいレイアウトを組みたい
前回の続きです。
Tmuxで多数のpaneを並べる際、レイアウトを指定できるのですが、基本「一回自分でそのレイアウトを組んで、list-windowsでlayout文字列を拾って使ってくれ」ということになってしまうので、多数の小さいpaneを並べるときはめんどくさい。
ということで、自身の用途に合うスクリプトを作ってみました。
これでいいんじゃないの?
tmuxinator
レイアウトは上記の方法で拾った文字列を使わないといけないことに変わりはないので、これだけだと足りないです。
(私が知らんだけで、そういう機能が追加されてたり、もともとあったりしたら恥ずかしいですけれど、、)
xpanes
正直、こちらを使わせていただければ大体の用途では耐えられるんだよなぁ、、とは思いつつ、せっかくなので自身の用途の痒いところに手が届くやつを作ってみることにしました。
つくったもの
やりたかったこと
tmuxで画面を縦に3つに割って、一番左はシェル用に開けとく。
真ん中は、更に10個に横切りにして、サーバの監視スクリプトを表示しっぱにする。
右は、横切り4つにしてネットワークの疎通監視のスクリプトを。
みたいなレイアウトをホイホイ作りたかったというのがモチベーションです。
以下のコマンドで実施できます。
$ panediv '{,[10],[4]}'
各ペインで実施するコマンドはあまり美しく入力する方法が思いつかなかったし、「どの位置のPaneに表示するか」を考えながら設定作り込まないと行けないと思うので、そのような場合は -i オプションをつけてtmuxinator形式のymlを吐き出して、そこにコマンド書き足して使う、というようなデザインにしました。
$ panediv -i .tmuxinator.yml '{,[10],[4]}'
$ cat .tmuxinator.yml
\# Pane Arrangement
# 0, 1, 11
# 0, 2, 12
# 0, 3, 13
# 0, 4, 14
# 0, 5, 14
# 0, 6, 14
# 0, 7, 14
# 0, 8, 14
# 0, 9, 14
# 0, 10, 14
name: name
root: ~/
windows:
- panename:
layout: '42e1,172x90,0,0{56x90,0,0,57x90,57,0[57x8,57,0,57x8,57,9,57x8,57,18,57x8,57,27,57x8,57,36,57x8,57,45,57x8,57,54,57x8,57,63,57x8,57,72,57x9,57,81],57x90,115,0[57x21,115,0,57x22,115,22,57x22,115,45,57x22,115,68]}'
panes:
- #0
- #1
- #2
- #3
- #4
- #5
- #6
- #7
- #8
- #9
- #10
- #11
- #12
- #13
- #14
コメントに各ペインの番号とレイアウトがわかるものをつけてみたので、これ見ながらコマンド打ち込めばまぁそれなりに利用には耐えるかな、と。
コマンドを入れ込んだ書式で実行することもできるようにはしてますが、コマンドが複雑になってくるとエスケープがちゃんと動いているか怪しい作りになってしまっているし、何より入力時に見づらいですので、まぁこんなものかなと。
実装
python + plyで書いてます。
tmuxinatorがRubyなわけで、なんだか気持ちが悪い気もしつつですが、自分でtmuxinator相当の機能を実装する根性はありませんので、まぁこんなところかなと。。
備考
今回の関連でtmuxについて調べものしてたのですが、多くは2014頃とかの記事ですね。。
だいぶ時代に乗り遅れた感はありますので、流行が別の環境やソフトに移ってないかはちゃんと追いかけないとなと思いつつ。
とりあえずこんなところで。