summaryrefslogtreecommitdiff
path: root/dotfiles/hyprland/.local/bin/stash-restore
diff options
context:
space:
mode:
Diffstat (limited to 'dotfiles/hyprland/.local/bin/stash-restore')
-rwxr-xr-xdotfiles/hyprland/.local/bin/stash-restore16
1 files changed, 12 insertions, 4 deletions
diff --git a/dotfiles/hyprland/.local/bin/stash-restore b/dotfiles/hyprland/.local/bin/stash-restore
index e04945a..ddaa5a4 100755
--- a/dotfiles/hyprland/.local/bin/stash-restore
+++ b/dotfiles/hyprland/.local/bin/stash-restore
@@ -1,10 +1,18 @@
#!/bin/bash
# Restore all windows from special:stash to current workspace
+# Preserves current master window position using batch commands
workspace=$(hyprctl activeworkspace -j | jq -r '.id')
+original_focus=$(hyprctl activewindow -j | jq -r '.address')
-# Get all windows in special:stash and move them to current workspace
-hyprctl clients -j | jq -r '.[] | select(.workspace.name == "special:stash") | .address' | \
-while read -r addr; do
- hyprctl dispatch movetoworkspacesilent "$workspace",address:"$addr"
+# Get all windows in special:stash
+stashed=$(hyprctl clients -j | jq -r '.[] | select(.workspace.name == "special:stash") | .address')
+
+if [ -z "$stashed" ]; then
+ exit 0
+fi
+
+# Restore each window, then swap original back to master (batched for atomicity)
+for addr in $stashed; do
+ hyprctl --batch "dispatch movetoworkspacesilent $workspace,address:$addr ; dispatch focuswindow address:$original_focus ; dispatch layoutmsg swapwithmaster master"
done