我使用 tmuxinator 启动 tmux 会话,其中一个窗口有 7 个窗格自定义布局
在 tmuxinator 会话配置中,我有带布局的通道:
layout: 3db3,233x59,0,0[233x9,0,0{77x9,0,0,3,77x9,78,0,5,77x9,156,0,6},233x9,0,10{77x9,0,10,7,77x9,78,10,8,77x9,156,10,9},233x39,0,20,10]
一切都很好,tmux 以正确的窗格大小打开
我还在 tmux.conf 中有一个钩子,它对窗口大小调整做出反应:
set-hook -g window-resized 'select-layout -t s01:4 "3db3,233x59,0,0[233x9,0,0{77x9,0,0,3,77x9,78,0,5,77x9,156,0,6},233x9,0,10{77x9,0,10,7,77x9,78,10,8,77x9,156,10,9},233x39,0,20,10]"'
当我减小窗口大小并增加回原始大小时 - 所有窗格都返回到其原始大小 - 这很好
在调整窗口大小的过程中 tmux 按比例缩放所有窗格...我想保留上面六个窗格的高度 9,只有下面的窗格高度必须减小
另外,在我的终端模拟器中,存在全屏模式,在该模式下,屏幕尺寸从 233x59 扩展到 236x62...当我进入全屏模式时,我想保持上部六个窗格的高度 9,只有下部窗格的高度必须增加
想法是修改hook中的两部分:
"3db3,233x59,0,0..." -> 改为 59 放置当前屏幕高度
"...233x39,0,20,10]" -> 改为 39 把当前屏幕高度减去 20(9+1+9+1)
查看第一个钩子(例如),命令“display”按预期显示变量 $LAYOUT_STR,并带有数字
set-hook -g window-resized 'WINDOW_HEIGHT="#{window_height}"; PANE_HIEGHT="#{e|-:$WINDOW_HEIGHT,20}"; LAYOUT_STR="3db3,233x$WINDOW_HEIGHT,0,0[233x9,0,0{77x9,0,0,3,77x9,78,0,5,77x9,156,0,6},233x9,0,10{77x9,0,10,7,77x9,78,10,8,77x9,156,10,9},233x$PANE_HEIGHT,0,20,10]"; display $LAYOUT_STR'
输出:
3db3,233x59,0,0[233x9,0,0{77x9,0,0,3,77x9,78,0,5,77x9,156,0,6},233x9,0,10{77x9,0,10,7,77x9,78,10,8,77x9,156,10,9},233x39,0,20,10]
现在看看带有 select-layout 的钩子及其输出......
set-hook -g window-resized 'WINDOW_HEIGHT="#{window_height}"; PANE_HIEGHT="#{e|-:$WINDOW_HEIGHT,20}"; LAYOUT_STR="3db3,233x$WINDOW_HEIGHT,0,0[233x9,0,0{77x9,0,0,3,77x9,78,0,5,77x9,156,0,6},233x9,0,10{77x9,0,10,7,77x9,78,10,8,77x9,156,10,9},233x$PANE_HEIGHT,0,20,10]"; select-layout -t s01:4 $LAYOUT_STR'
输出:
Invalid layout: 3db3,233x#{window_height},0,0[233x9,0,0{77x9,0,0,3,77x9,78,0,5,77x9,156,0,6},233x9,0,10{77x9,0,10,7,77x9,78,10,8,77x9,156,10,9},233x#{e|-:#{window_height},20},0,20,10])
如何修复它?
答案1
我找到了如何在命令中正确进行变量替换的解决方案:... select-layout -t s01:4 $LAYOUT_STR
正确的方法是使用“run-shell”命令
这有效:... run-shell -b "exec tmux select-layout -t s01:4 $LAYOUT_STR &"