summaryrefslogtreecommitdiff
path: root/dotfiles/hyprland/.local/bin/hypr-refocus-scratchpad
blob: 7a4bb389526096ba70d4296c34bb5afa4fc5ad9d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#!/bin/bash
# Refocus visible scratchpad after a window closes.
# Without this, closing a regular window while a scratchpad is visible
# leaves focus on the regular workspace instead of the scratchpad.

SOCKET="$XDG_RUNTIME_DIR/hypr/$HYPRLAND_INSTANCE_SIGNATURE/.socket2.sock"

socat -U - "UNIX-CONNECT:$SOCKET" | while read -r line; do
    if [[ "$line" == closewindow* ]]; then
        # Check if a special workspace is active on the current monitor
        special=$(hyprctl monitors -j | python3 -c "
import json, sys
for m in json.load(sys.stdin):
    sw = m.get('specialWorkspace', {})
    if sw.get('id', 0) != 0:
        print(sw['name'])
        break
" 2>/dev/null)
        if [[ -n "$special" ]]; then
            # Focus the top window on the special workspace
            hyprctl dispatch focuswindow "workspace:$special" &>/dev/null
        fi
    fi
done