| 1 | #!/usr/bin/env bash |
| 2 | # If not running in a terminal, spawn a new WezTerm window to run this script |
| 3 | if [ -z "$TERM" ] || [[ "$TERM" == "dumb" ]]; then |
| 4 | exec wezterm start -- bash -lc "$0" |
| 5 | fi |
| 6 | # move_workspace_fzf.sh — choose source & target via fzf |
| 7 | |
| 8 | # grab all workspace names |
| 9 | mapfile -t WKS < <(aerospace list-workspaces --all --format '%{workspace}') |
| 10 | |
| 11 | # interactive picks |
| 12 | SRC=$(printf '%s\n' "${WKS[@]}" | fzf --prompt="Move from workspace: ") |
| 13 | [ -z "$SRC" ] && exit 1 |
| 14 | |
| 15 | DST=$(printf '%s\n' "${WKS[@]}" | fzf --prompt="Move to workspace: ") |
| 16 | [ -z "$DST" ] && exit 1 |
| 17 | |
| 18 | # collect and move |
| 19 | mapfile -t WINS < <(aerospace list-windows --all --format '%{window-id},%{workspace}' | \ |
| 20 | awk -F',' -v WS="$SRC" '$2==WS {print $1}') |
| 21 | for win in "${WINS[@]}"; do |
| 22 | aerospace move-node-to-workspace "$DST" --window-id "$win" --focus-follows-window |
| 23 | done |
| 24 | |
| 25 | # finally, jump you over |
| 26 | aerospace workspace "$DST" |