如何在启动时设置多个 sway/i3 容器的布局?

如何在启动时设置多个 sway/i3 容器的布局?

问题

我正在使用 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.

相关内容