tmux 配置中的变量替换 - “显示消息”和“选择布局”的不同结果

tmux 配置中的变量替换 - “显示消息”和“选择布局”的不同结果

我使用 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 &"

相关内容