如何在 i3 窗口管理器中实现应用程序自动启动的布局?

如何在 i3 窗口管理器中实现应用程序自动启动的布局?

这是之前的后续问题关于如何使用以下命令在各个工作区上自动启动应用程序i3窗口管理器以及配置文件中可以做什么和不能做什么~/.i3/config

首先,提供的解决方案基于Linux文档以及 op 提供的更新,他进一步推动了逻辑:

exec --no-startup-id i3-msg 'workspace 1:Web; exec /usr/bin/firefox'
exec --no-startup-id i3-msg 'workspace 1; exec firefox; workspace 2; exec urxvt; workspace 1'

另外感兴趣的是这个交换关于直接在命令行上利用其中一些内容而无需重复:

i3-msg workspace 3; i3-msg exec firefox
i3-msg workspace 9; i3-msg exec chromium

但我有绝不看到了一种配置,它根据所需的垂直或水平布局自动启动每个工作区中的许多窗口/应用程序。我的目标是自动启动我使用的这个简单配置:

 _____ _____     ___________     ___________
| lx  | lx  |   |        |u_|   |     |     |   proportions:
|_____|_____|   |  FF    |lx|   |spacefm    |   1- 25% each
|medit| lx  |   |        |__|   |     | vlc |   2- 75/25 x 25/50/25
|_____|_____|   |________|u_|   |_____|_____|   3- 50/50
      1               2               3

所以它从文件中这样的内容开始config

exec --no-startup-id i3-msg 'workspace 1; exec i3-sensible-terminal; layout toggle split; layout splitv; split vertical; exec i3-sensible-terminal; exec i3-sensible-terminal; exec i3-sensible-terminal; workspace 2; exec firefox; exec urxvt; exec i3-sensible-terminal; exec urxvt; workspace 3; exec spacefm; exec vlc'

但是,到底如何实现您想要的布局类型和垂直/水平分割呢?我正在尝试,但不清楚如何“混合”执行和布局。语法一开始就感觉很特殊,因为你是i3-img在 i3 的配置中执行的。您在每次通话之间使用split h(或 v) - layout split v- exec layout split v- (或 right) 吗?focus downexec

对于单个工作区,配置会垂直或水平启动所有应用程序,我似乎无法影响布局 - 或者split链中的最后一个命令决定是垂直还是水平添加窗口。i3-msg似乎忽略了在某些情况下格式不正确的命令部分,因此很难调试。更复杂的是,您确实需要startx每次都退出 X 来验证结果,因为mod+shift+R即使您关闭每个工作区上的所有内容,仅刷新配置也不会削减它。

配置这个的正确方法是什么?有人有实现类似功能的解决方案吗?这文档非常好,但它没有提供我可以看到在多个工作区上混合执行和布局的详细示例。

答案1

我相信您正在寻找新的 布局保存功能是在i3v4.8 (2014-06-15)。链接的文档看起来相当详尽。

引用自文档:

布局保存/恢复允许您加载 JSON 布局文件,以便您可以在打开计算机电源后拥有一个可以开始使用的基本布局。动态用例也会浮现在脑海中:如果您经常(但并非总是!)需要使用 ping/traceroute 命令的终端网格布局来诊断网络问题,您可以轻松地以正确的布局自动打开这些窗口。

...以及发行说明:

tl;dr:将当前布局导出为 JSON 文件,将其加载到新的 i3 会话中,获取占位符窗口,一旦启动它们,这些占位符窗口将被实际应用程序替换。


1. 您可能需要perl-anyevent-i3perl-json-xs包以使用该i3-save-tree实用程序。

相关内容