Hyprland 浮动微信中,关闭微信中打开的其他窗口后,焦点如何回到微信

当前我的配置大部分上默认,焦点会回到靠近float窗口最近的一个平铺窗口上去

AI帮我解决了:

#!/usr/bin/env bash

# ---------- log level ----------
# 0 = silent
# 1 = info
# 2 = debug
log_level=0

while [[ "$1" == -* ]]; do
    case "$1" in
        -v)  log_level=1 ;;
        -vv) log_level=2 ;;
    esac
    shift
done

log_info()  { [[ $log_level -ge 1 ]] && echo "[wechat-focus][INFO] $*" >&2; }
log_debug() { [[ $log_level -ge 2 ]] && echo "[wechat-focus][DEBUG] $*" >&2; }

# ---------- ipc socket ----------
socket="$XDG_RUNTIME_DIR/hypr/$HYPRLAND_INSTANCE_SIGNATURE/.socket2.sock"

log_info "start"
log_debug "socket=$socket"

# ---------- listen ----------
socat - UNIX-CONNECT:"$socket" | while read -r line; do
    log_debug "event raw: $line"

    [[ "$line" != closewindow* ]] && continue

    # closewindow>>ADDR
    closed_addr=$(echo "$line" | cut -d'>' -f3)
    log_debug "close addr=$closed_addr"

    sleep 0.05

    current_ws=$(hyprctl -j activeworkspace | jq -r '.id')
    log_debug "current workspace=$current_ws"

    main_window_address=$(hyprctl -j clients | jq -r --arg ws "$current_ws" '
        .[]
        | select(.class=="wechat")
        | select(.workspace.id == ($ws|tonumber))
        | select(.title | test("^微信"))
        | .address
    ' | head -n 1)

    if [[ -z "$main_window_address" ]]; then
        log_info "wechat main window not found"
        continue
    fi

    log_info "focus wechat main window: $main_window_address"
    hyprctl dispatch focuswindow address:$main_window_address
done