diff options
Diffstat (limited to 'dotfiles')
| -rw-r--r-- | dotfiles/hyprland/.config/hypr/hyprland.conf | 1 | ||||
| -rwxr-xr-x | dotfiles/hyprland/.local/bin/hypr-refocus-scratchpad | 24 |
2 files changed, 25 insertions, 0 deletions
diff --git a/dotfiles/hyprland/.config/hypr/hyprland.conf b/dotfiles/hyprland/.config/hypr/hyprland.conf index 55a7c35..f258353 100644 --- a/dotfiles/hyprland/.config/hypr/hyprland.conf +++ b/dotfiles/hyprland/.config/hypr/hyprland.conf @@ -33,6 +33,7 @@ exec-once = mpd # Pyprland (scratchpads, magnify, etc.) exec-once = pypr +exec-once = hypr-refocus-scratchpad # Apps that can start later (sleep ensures waybar tray is registered) exec-once = sleep 1 && signal-desktop --start-in-tray --ozone-platform=wayland diff --git a/dotfiles/hyprland/.local/bin/hypr-refocus-scratchpad b/dotfiles/hyprland/.local/bin/hypr-refocus-scratchpad new file mode 100755 index 0000000..7a4bb38 --- /dev/null +++ b/dotfiles/hyprland/.local/bin/hypr-refocus-scratchpad @@ -0,0 +1,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 |
