Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- STORE_FILE="/tmp/.dm_scratch"
- if [ ! -f "$STORE_FILE" ]; then
- touch "$STORE_FILE"
- fi
- # Add / remove scratchpad
- toggle_dynamic() {
- workspace_name="$1"
- active_window=$(hyprctl -j activewindow | jq -r '.address')
- active_workspace=$(hyprctl -j activeworkspace | jq -r '.name')
- if [ "$active_window" != "null" ]; then
- window_workspace=$(hyprctl -j clients | jq --arg ADDRESS "$active_window" '.[] | select(.address == $ADDRESS)' | jq -r '.workspace.name')
- if grep -q "SCRATCHPAD: $active_window" "$STORE_FILE"; then
- sed -i "/SCRATCHPAD: $active_window/d" "$STORE_FILE"
- hyprctl notify -1 1500 "rgb(98971a)" Dynamic Window - Removed
- elif [ "$window_workspace" != "$workspace_name" ]; then
- echo "SCRATCHPAD: $active_window $workspace_name" >>"$STORE_FILE"
- hyprctl dispatch movetoworkspacesilent "$workspace_name","address:$active_window"
- hyprctl notify -1 1500 "rgb(98971a)" Dynamic Window - Added
- fi
- else
- hyprctl notify -1 1500 "rgb(98971a)" No active window
- fi
- }
- # View / hide scratchpad
- view_dynamic() {
- workspace_name="$1"
- active_workspace=$(hyprctl activeworkspace -j | jq -r '.name')
- any_windows_moved=0
- while IFS= read -r line; do
- prefix=$(echo "$line" | cut -d ' ' -f 1)
- if [ "$prefix" == "SCRATCHPAD:" ]; then
- window_address=$(echo "$line" | cut -d ' ' -f 2)
- original_workspace=$(echo "$line" | cut -d ' ' -f 3)
- window_workspace=$(hyprctl -j clients | jq --arg ADDRESS "$window_address" '.[] | select(.address == $ADDRESS)' | jq -r '.workspace.name')
- if [ "$window_workspace" == "$active_workspace" ] && [ "$original_workspace" == "$workspace_name" ]; then
- hyprctl dispatch movetoworkspacesilent "$original_workspace","address:$window_address"
- sed -i "/^$window_address /d" "$STORE_FILE"
- any_windows_moved=1
- fi
- fi
- done <"$STORE_FILE"
- if [ "$any_windows_moved" -eq 0 ]; then
- while IFS= read -r line; do
- prefix=$(echo "$line" | cut -d ' ' -f 1)
- if [ "$prefix" == "SCRATCHPAD:" ]; then
- window_address=$(echo "$line" | cut -d ' ' -f 2)
- original_workspace=$(echo "$line" | cut -d ' ' -f 3)
- window_workspace=$(hyprctl -j clients | jq --arg ADDRESS "$window_address" '.[] | select(.address == $ADDRESS)' | jq -r '.workspace.name')
- if [ "$original_workspace" == "$workspace_name" ]; then
- if [ "$window_workspace" != "$active_workspace" ]; then
- hyprctl dispatch movetoworkspace "$active_workspace","address:$window_address"
- else
- hyprctl dispatch movetoworkspacesilent "$workspace_name","address:$window_address"
- fi
- fi
- fi
- done <"$STORE_FILE"
- fi
- }
- while getopts "t:v:" opt; do
- case ${opt} in
- t)
- toggle_dynamic "$OPTARG"
- ;;
- v)
- view_dynamic "$OPTARG"
- ;;
- *)
- echo "Invalid option: -$OPTARG" 1>&2
- exit 1
- ;;
- esac
- done
Advertisement
Add Comment
Please, Sign In to add comment