i3 - 将容器移动到 next/previous ws(如果不存在也是如此)

i3 - Move container to next/previous ws (also if nonexisting)

我是运行 i3 4.16版

我想绑定一个快捷方式以将当前容器移动到 next/previous 工作区,无论是否存在。

this post 使用 jq 的帮助下,我有一个 'sort of' 可行的解决方案,但它非常不稳定(有时它切换到工作区而不移动容器,有时它在切换 ws 之前将容器从下一个 ws 移动到当前 ws)

谁能想出更好的解决方案???

我的 i3 配置:

set $ws-right "$(( $( i3-msg -t get_workspaces | jq '.[] | select(.focused).num' ) + 1))";
set $ws-left "$(( $( i3-msg -t get_workspaces | jq '.[] | select(.focused).num' ) - 1))";

bindsym shift+control+$mod+Left exec i3-msg move container to workspace $ws-left; exec i3-msg workspace $ws-left
bindsym shift+control+$mod+Right exec i3-msg move container to workspace $ws-right; exec i3-msg workspace $ws-right

感谢您的宝贵时间 ;)

仅供参考

我最终使用 shell 脚本来避免异步 运行 这两个命令

.i3MoveNext.sh:

wsNext=$(( $( i3-msg -t get_workspaces | jq '.[] | select(.focused).num' ) + ))
i3-msg move container to workspace $wsNext
i3-msg workspace $wsNext

然后绑定首选组合键,如:

bindsym shift+control+$mod+Left exec ~/.i3MoveNext.sh -1
bindsym shift+control+$mod+Right exec ~/.i3MoveNext.sh 1