如何在i3中从命令行打开工作区?

时间:2018-11-09 21:11:20

标签: workspace i3

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

2 个答案:

答案 0 :(得分:1)

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

完成的

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

  

如何在i3中从命令行打开工作区

如何在配置中打开它?

bindsym Mod4+1 workspace $ws1

像这样的事情吗?现在,使用i3-msg移至工作区1:

i3-msg workspace 1

简单,对吧?

您剩下的问题尚不清楚,但是我会尽力的:

  

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

您将如何开始做(在做人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社区。

答案 1 :(得分: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"