如何在 i3 中从命令行打开作品 space?
How can I open a work space from the command line in i3?
我想用 'next' 可用编号编写打开工作区的脚本,然后在该工作区中打开可能有两个 windows 每个已经指向特定视图。关于如何做到这一点的任何指示? i3 在这方面真的可以编写脚本吗?我才刚刚开始使用 i3 并喜欢它,现在只想让它定期做我需要的事情 ;-)
配置中尚未包含的所有 i3 "scripting" 都通过 i3-msg
完成
i3-msg 向 i3 window 管理器发送消息。它主要是配置行(或 IPC,这有点难)。
How can I open a work space from the command line in i3
如何在配置中打开它?
bindsym Mod4+1 workspace $ws1
类似的吧?现在,使用 i3-msg 移动到工作区 1:
i3-msg workspace 1
简单吧?
你剩下的问题还不清楚,但我会尽力而为:
I'd like to script opening a workspace with the "next" available number"
你将如何开始这样做(在做 man i3-msg
之后):
i3-msg -t get_workspaces
这 returns 一个 json(如果你完成了任何编码,你会感到内心温暖,否则你会被输出吓到)。然后我要请你阅读这个:
https://i3wm.org/docs/ipc.html#_receiving_replies_from_i3
使用 jq
或 json.sh
之类的东西来解析 bash 的输出,你应该得到哪些工作空间是 "active",例如:
[{"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 是 "active",也就是其中有 windows。在解析实际的 json 之后,您将得到一个数组或类似的东西。如果您想在 4(真正的 "next" 桌面)或 6(又名最大数字 + 1)上生成,由您决定。你没有提到你想用什么编写脚本,所以我会把它留给你自己解决。
maybe two windows each already pointed at a specific view
我不太清楚你的意思。在我们确定为 "next" 的工作区中,您可能需要 2 windows of X(在这种情况下我们将使用终端)?
让我们回到 i3-msg。
想象一下,您正在手动执行您想要执行的任何操作,作为您向 i3 发射的命令列表。
"Go to workspace X" : i3-msg workspace 4
"Spawn a program called kitty there": kitty
"Split vertically and spawn another program": i3-msg split v
"Spawn another kitty window": kitty
之后你可以回到你当前的工作区(我建议将它保存在一个变量中并重新使用 i3-msg 工作区 $curr_workspace)。
正如我所说,问题与实际脚本无关,所以我将其留给您自己解决,但请不要犹豫,在 bash 标签下提出具体问题。 :).希望我没有完全误解你的问题。
欢迎来到 i3 社区。
@Nephilim 的 post 非常棒。只是为了给工具箱添加一个技巧...
有时您可能想要编写一些与特定 window 相关的操作脚本。喜欢:
Give me a test environment next to this browser.
您可以通过 运行 xwininfo
获取 window ID,然后单击要将自动化锚定到的 window。 window ID 可用作 i3-msg
.
的参数
例如,运行下面的命令会让你select一个window,然后将window的宽度设置为1000:
i3-msg "[id=$(
xwininfo \
| sed -n 's/.*Window id: \(0x[0-9a-f]*\).*//p'
)] resize set 1000"
我想用 'next' 可用编号编写打开工作区的脚本,然后在该工作区中打开可能有两个 windows 每个已经指向特定视图。关于如何做到这一点的任何指示? i3 在这方面真的可以编写脚本吗?我才刚刚开始使用 i3 并喜欢它,现在只想让它定期做我需要的事情 ;-)
配置中尚未包含的所有 i3 "scripting" 都通过 i3-msg
i3-msg 向 i3 window 管理器发送消息。它主要是配置行(或 IPC,这有点难)。
How can I open a work space from the command line in i3
如何在配置中打开它?
bindsym Mod4+1 workspace $ws1
类似的吧?现在,使用 i3-msg 移动到工作区 1:
i3-msg workspace 1
简单吧?
你剩下的问题还不清楚,但我会尽力而为:
I'd like to script opening a workspace with the "next" available number"
你将如何开始这样做(在做 man i3-msg
之后):
i3-msg -t get_workspaces
这 returns 一个 json(如果你完成了任何编码,你会感到内心温暖,否则你会被输出吓到)。然后我要请你阅读这个:
https://i3wm.org/docs/ipc.html#_receiving_replies_from_i3
使用 jq
或 json.sh
之类的东西来解析 bash 的输出,你应该得到哪些工作空间是 "active",例如:
[{"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 是 "active",也就是其中有 windows。在解析实际的 json 之后,您将得到一个数组或类似的东西。如果您想在 4(真正的 "next" 桌面)或 6(又名最大数字 + 1)上生成,由您决定。你没有提到你想用什么编写脚本,所以我会把它留给你自己解决。
maybe two windows each already pointed at a specific view
我不太清楚你的意思。在我们确定为 "next" 的工作区中,您可能需要 2 windows of X(在这种情况下我们将使用终端)?
让我们回到 i3-msg。
想象一下,您正在手动执行您想要执行的任何操作,作为您向 i3 发射的命令列表。
"Go to workspace X" : i3-msg workspace 4
"Spawn a program called kitty there": kitty
"Split vertically and spawn another program": i3-msg split v
"Spawn another kitty window": kitty
之后你可以回到你当前的工作区(我建议将它保存在一个变量中并重新使用 i3-msg 工作区 $curr_workspace)。
正如我所说,问题与实际脚本无关,所以我将其留给您自己解决,但请不要犹豫,在 bash 标签下提出具体问题。 :).希望我没有完全误解你的问题。
欢迎来到 i3 社区。
@Nephilim 的 post 非常棒。只是为了给工具箱添加一个技巧...
有时您可能想要编写一些与特定 window 相关的操作脚本。喜欢:
Give me a test environment next to this browser.
您可以通过 运行 xwininfo
获取 window ID,然后单击要将自动化锚定到的 window。 window ID 可用作 i3-msg
.
例如,运行下面的命令会让你select一个window,然后将window的宽度设置为1000:
i3-msg "[id=$(
xwininfo \
| sed -n 's/.*Window id: \(0x[0-9a-f]*\).*//p'
)] resize set 1000"