1

我想用“下一个”可用编号编写打开一个工作区的脚本,然后在该工作区中打开可能有两个窗口,每个窗口都已经指向一个特定的视图。关于如何做到这一点的任何指示?i3 在这方面实际上是可编写脚本的吗?我才刚刚开始使用 i3 并喜欢它,现在只想让它定期做我需要的事情 ;-)

4

2 回答 2

5

i3 的所有尚未在配置中的“脚本”都是通过i3-msg

i3-msg 向 i3 窗口管理器发送消息。它主要是配置行(或 IPC,这有点难)。

如何从 i3 中的命令行打开工作空间

你如何在你的配置中打开它?

bindsym Mod4+1 workspace $ws1

是这样的吧?现在,使用 i3-msg 移动到工作区 1:

i3-msg workspace 1

很简单,对吧?

您的其余问题还不清楚,但我会尽力而为:

我想用“下一个”可用号码编写打开工作区的脚本

你将如何开始这样做(在做 man 之后i3-msg):

i3-msg -t get_workspaces

这会返回一个 json(如果你已经完成了任何编码,你会感到内心温暖,否则你会被输出吓到)。然后我会请你阅读这个:

https://i3wm.org/docs/ipc.html#_receiving_replies_from_i3

使用jq或类似的东西json.sh通过 bash 解析输出,你应该得到哪些工作空间是“活动的”,例如:

[{"num":3,"name":"3","visible":true,"focused":false,"rect":{"x":0,"y":0,"width":1920,"height":1080},"output":"HDMI-1","urgent":false},{"num":2,"name":"2","visible":true,"focused":false,"rect":{"x":3520,"y":0,"width":1920,"height":1080},"output":"VGA-1","urgent":false},{"num":1,"name":"1","visible":true,"focused":true,"rect":{"x":1920,"y":32,"width":1600,"height":868},"output":"eDP-1","urgent":false},{"num":5,"name":"5","visible":false,"focused":false,"rect":{"x":1920,"y":32,"width":1600,"height":868},"output":"eDP-1","urgent":false}]

阅读我给你的网站,你可以看到,工作区 1、2、3 和 5 是“活动的”,也就是其中有窗口。在解析了实际的 json 之后,你最终会得到一个数组或类似的东西。如果您想在 4(真正的“下一个”桌面)或 6(也就是最大数字 + 1)上生成,取决于您。你没有提到你想用什么编写脚本,所以我会把它留给你去弄清楚。

可能有两个窗口,每个窗口都已经指向一个特定的视图

我不确定你是什么意思。在我们确定为“下一个”的工作区中,您可能想要 2 个 X 窗口(在这种情况下我们将使用终端)?

让我们回到 i3-msg 一会儿。

想象一下,您手动执行您想做的任何事情,作为您向 i3 发出的命令列表。

“转到工作区 X”:i3-msg workspace 4

“在那里生成一个名为 kitty 的程序”:kitty

“垂直拆分并生成另一个程序”:i3-msg split v

“生成另一个小猫窗口”:kitty

之后你可以回到你当前的工作区(我建议将它保存在一个变量中,然后重用 i3-msg 工作区 $curr_workspace)。

正如我所说,问题与实际脚本无关,因此我将其排除在外,以便您自己解决,但不要犹豫,在 bash 标签下提出具体问题。:)。希望我没有完全误解你的问题。

欢迎来到 i3 社区。

于 2018-11-11T13:39:15.820 回答
1

@Nephilim 的帖子很棒。只是为了在工具箱中添加一个技巧......

有时您可能想要编写与特定窗口相关的某些操作的脚本。喜欢:

给我这个浏览器旁边的测试环境。

xwininfo您可以通过运行并单击要将自动化锚定到的窗口来获取窗口 ID 。窗口 ID 可以用作 的参数i3-msg

例如,运行下面的命令将让您选择一个窗口,然后将该窗口的宽度设置为 1000:

i3-msg "[id=$(
              xwininfo \
                | sed -n 's/.*Window id: \(0x[0-9a-f]*\).*/\1/p'
             )] resize set 1000"

于 2020-12-04T19:34:39.737 回答