btw i use nix
1#!/usr/bin/env bash
2
3jq_cmd="recurse(.nodes[];.nodes!=null) |"
4
5cur_ws_id="$(@wmmsg@ -t get_workspaces | jq '.[] | select(.focused==true).id')"
6jq_cmd+="select(.id==$cur_ws_id).nodes | .[] | recurse(.nodes[];.nodes!=null) | select(.nodes==[])"
7
8windows="$(@wmmsg@ -t get_tree | jq -r "$jq_cmd")"
9
10echo "$windows"
11
12windows_focused=($(echo "$windows" | jq '.focused'))
13windows_id=($(echo "$windows" | jq '.id'))
14
15echo "${windows_focused[@]}"
16echo "${windows_id[@]}"
17
18i=0
19for focused in "${windows_focused[@]}"; do
20 if [ "$focused" == "true" ]; then
21 break
22 fi
23 ((i++))
24done
25echo $i
26
27if [[ "$1" == "back" ]]; then
28 ((i--))
29elif [[ "$1" == "forward" ]]; then
30 ((i++))
31fi
32
33
34i=$(((i % ${#windows_focused[@]})))
35
36id="${windows_id[$i]}"
37echo "$id"
38$(dirname "$0")/focus_on_id.sh "$id"
39