![如何在启动时设置多个 sway/i3 容器的布局?](https://linux22.com/image/168704/%E5%A6%82%E4%BD%95%E5%9C%A8%E5%90%AF%E5%8A%A8%E6%97%B6%E8%AE%BE%E7%BD%AE%E5%A4%9A%E4%B8%AA%20sway%2Fi3%20%E5%AE%B9%E5%99%A8%E7%9A%84%E5%B8%83%E5%B1%80%EF%BC%9F.png)
问题
我正在使用 Sway 窗口管理器,但我猜这同样适用于 i3。
启动时,我想在同一个工作区上启动 2 个终端窗口。其中一个将运行 Neovim,第二个将是一个空(不运行任何应用程序)终端。 2 个终端应以选项卡式布局显示,但空终端应设置堆叠布局,这样当我从中打开一个新终端时,它将在第二个选项卡中显示为新的堆栈条目。视觉上:
启动时
-------------------------------------------------------------------------------
| Tab: Terminal with Neovim | Tab: Other terminals (active) |
-------------------------------------------------------------------------------
| |
| |
| |
| |
| |
| |
| Terminal 1 |
| |
| |
| |
| |
| |
| |
-------------------------------------------------------------------------------
在其他终端选项卡上打开新终端后
-------------------------------------------------------------------------------
| Tab: Terminal with Neovim | Tab: Other terminals (active) |
-------------------------------------------------------------------------------
| Other terminals tab: Stack entry: Terminal 1 |
-------------------------------------------------------------------------------
| Other terminals tab: Stack entry: Terminal 2 (active) |
-------------------------------------------------------------------------------
| |
| |
| |
| |
| Terminal 2 |
| |
| |
| |
| |
-------------------------------------------------------------------------------
问题
如何在 Sway/i3 中启动时配置此类布局?
我尝试将以下内容添加到配置文件中,但它不起作用。两个终端窗口均已显示,但其布局设置不正确。我猜这是因为exec
异步执行,所以当layout
执行命令时,容器仍然没有打开。
exec swaymsg "workspace $workspace_programming; exec $term --command nvim; layout tabbed; exec $term; split vertical; layout stacking"
答案1
我设法使用该配置来做到这一点:
exec \
swaymsg "workspace $workspace_programming"; \
swaymsg "exec $neovim"; \
swaymsg "layout tabbed"; \
sleep 0.3s; \
swaymsg "exec $term"; \
sleep 0.3s; \
swaymsg "split vertical"; \
swaymsg "layout stacking"
编辑:上面的方法有效,但仅在启动后执行(使用exec_always
)。由于某种原因,在启动期间执行时使用exec
它不起作用。令我惊讶的是它根本没有打开任何窗口,甚至没有 Neovim 终端。我对它进行了一些重构,这个版本在启动过程中也可以工作:
exec swaymsg "workspace $workspace_programming; exec $neovim; layout tabbed;"
exec sleep 0.3s && swaymsg "exec $term";
exec sleep 0.6s && swaymsg "workspace $workspace_programming; split vertical; layout stacking"
我不明白两个版本之间有什么区别以及为什么第一个版本不起作用。如果有人可以解释我,我会很高兴。
我仍然想知道是否有一种更干净的方法来做到这一点,而不必求助于sleep
.