tmux list-windows ででてくるlayout情報は tmux select-layout で復元できるが、フォーマットがマニュアルには書いてないのでソースコードをみてみた。
% tmux list-windows 0: emacs (1 panes) [309x91] [layout bd46,309x91,0,0,9] @4 1: ssh (1 panes) [309x91] [layout bd45,309x91,0,0,8] @3 2: ssh (18 panes) [309x91] [layout bbb8,309x91,0,0[309x18,0,0{77x18,0,0,10,77x18,78,0,11,76x18,156,0,12,76x18,233,0,13},309x18,0,19{77x18,0,19,14,77x18,78,19,15,76x18,156,19,16,76x18,233,19,17},309x17,0,38{77x17,0,38,18,77x17,78,38,19,76x17,156,38,20,76x17,233,38,21},309x17,0,56{77x17,0,56,22,77x17,78,56,23,76x17,156,56,24,76x17,233,56,25},309x17,0,74{77x17,0,74,26,231x17,78,74,27}]] @5 3: tcsh- (1 panes) [309x91] [layout ded0,309x91,0,0,40] @12 4: tcsh* (1 panes) [309x91] [layout ded4,309x91,0,0,44] @13 (active) %
最初の4文字は16進数でカンマ以降の内容のチェックサムになっている。チェックサムルーチンは layout-custom.cのlayout_checksum()でローテートしながら文字を足し込んでいくだけの簡単なもの。ちょっと気になるのは、文字をcharで扱っているのでMSBが立っているとcharがsignedかunsignedかで符号拡張でチェックサムが違ってきてマシン間でポータブルじゃないが、そもそもペーンIDが埋め込まれているのでポータブルである必要がなかったし、そもそもasciiしかつかってないのでok。
レイアウト ::= チェックサム "," レイアウト情報 レイアウト情報 ::= コンテナ | 単体 コンテナ ::= 横幅 "x" 高さ "," 左上X座標 "," 左上Y座標 "," 内部 単体 ::= 横幅 "x" 高さ "," 左上X座標 "," 左上Y座標 "," PANE_ID 内部 ::= 上下分割 | 左右分割 上下分割 ::= "[" レイアウト情報 "]" 左右分割 ::= "{" レイアウト情報 "}"
ここでの上下分割はtmux split-window -v、左右分割はtmux split-window -h。これもどっちが縦でどっちが横なのかわかりにくいので、日本語なら上下分割・左右分割と呼ぶのがいいとおもうなぁ。
paneをzoomしているとそのpaneがウィンドウを専有するレイアウトが出力されるんだなぁ。でもこのズーム状態をselect-layoutで復元することはできないようだ。なんか謎。