i3 - Переместить контейнер в следующий/предыдущий 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

Спасибо за ваше время ;)


person RavenHeart    schedule 11.02.2019    source источник


Ответы (1)


Просто для информации

В итоге я использовал сценарий оболочки, чтобы избежать асинхронного запуска двух команд.

.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
person RavenHeart    schedule 23.03.2019