From d048436af39b105e82093315570da1c73ef68142 Mon Sep 17 00:00:00 2001 From: Craig Jennings Date: Mon, 9 Feb 2026 09:35:00 -0600 Subject: feat(hyprland): add scratchpad refocus on window close IPC listener detects closewindow events and refocuses the visible scratchpad (special workspace) instead of falling to a regular window. --- .../hyprland/.local/bin/hypr-refocus-scratchpad | 24 ++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100755 dotfiles/hyprland/.local/bin/hypr-refocus-scratchpad (limited to 'dotfiles/hyprland/.local/bin/hypr-refocus-scratchpad') 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 -- cgit v1.2.3