#!/usr/bin/env zsh output_sets=() # Order outputs by x position (left to right) for output in $(swaymsg -t get_outputs | jq '[ (.[] | select(.active) | pick(.name, .rect)) ] | sort_by(.rect.x) | .[] | .name' -r); do output_sets+=$output done workspaces=$(swaymsg -t get_workspaces) current_output=$(echo $workspaces | jq '.[] | select(.focused).output' -r) current_workspace=$(echo $workspaces | jq '.[] | select(.focused).name' -r) function get_ws { ws_set=$1 ws_target=$2 workspace=$((ws_set * 10 + ws_target)) if (( workspace == current_workspace )); then workspace=$(( (workspace + 9) % 20 + 1 )) fi echo $workspace } i=0 for output in $output_sets; do if [[ $current_output == $output ]]; then get_ws $i $1 fi ((i++)) done