将容器移动到下一个/上一个 ws(如果不存在,也是如此)



我正在运行 i3 版本 4.16

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

在这篇文章的帮助下,使用 jq,我有一个"某种"工作解决方案,但它非常不稳定(有时它会在不移动容器的情况下切换到工作区,有时它会在切换 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' ) + $1))
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

您也可以通过使用本机 i3 消息来实现此结果,例如:

bindsym $mod+Shift+n move container to workspace next_on_output; workspace next_on_output
bindsym $mod+Shift+p move container to workspace prev_on_output; workspace prev_on_output

此解决方案的优点是,它适用于每个显示器,如果您的显示名称中包含图标或其他名称,它也适用于每个显示器。

您的脚本也可以像这样改进:

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

通过使用 workspace number ,脚本也适用于不同的工作区名称。

相关内容

最新更新