SexiSway/scripts/workspace-manager
2025-03-28 21:11:31 +03:00

94 lines
2.0 KiB
Bash
Executable File

#!/bin/dash
key_input=$1
flag=$2
#
# Calc workspace swich
#
last_workspace=$(cat /tmp/last_workspace 2>/dev/null)
f_key_number=$(cat /tmp/f_key_number 2>/dev/null || echo 0)
digit_key_number=$(cat /tmp/digit_key_number 2>/dev/null || echo 0)
case $key_input in
F*) f_key_number=${key_input#F} ;;
0) digit_key_number=10;;
[1-9]) digit_key_number=$key_input ;;
*) echo "Invalid key input"; exit 1 ;;
esac
workspace_number=$((f_key_number * 10 + digit_key_number))
if [ "$workspace_number" -eq "$last_workspace" ]; then
exit 0
fi
#
# Hooks
#
case $workspace_number in
30) workspace_number=48 ;;
esac
#
# swich
#
if [ "$flag" = "move" ]; then
swaymsg move container to workspace number $workspace_number
exit 0
else
swaymsg workspace $workspace_number
fi
echo "$workspace_number" > /tmp/last_workspace
echo "$f_key_number" > /tmp/f_key_number
echo "$digit_key_number" > /tmp/digit_key_number
#
# Post swich | Game workspace - disable touchpad
#
case $workspace_number in
51)
swaymsg input type:touchpad events disabled
;;
*)
swaymsg input type:touchpad events enabled
;;
esac
case $workspace_number in
*)
swaymsg input type:keyboard xkb_switch_layout 0
;;
esac
#
# Freeze manager
#
workspaces_data=$(swaymsg -t get_tree | jq --arg ws1 "$workspace_number" --arg ws2 "$last_workspace" '
.nodes[]
| select(.type == "output")
| .nodes[]
| select(.type == "workspace" and (.name == $ws1 or .name == $ws2))
| {
workspace: .name,
pids: [(.nodes[]?, .floating_nodes[]?) | select(has("pid")) | .pid]
}
')
pids_unfreeze=$(echo "$workspaces_data" | jq --arg ws "$workspace_number" '
select(.workspace == $ws) | .pids[]
' | tr '\n' ',')
if [ -n "$pids_unfreeze" ]; then
pkill -SIGCONT -g "${pids_unfreeze%,}"
fi
case $last_workspace in
12) exit 0;;
esac
pids_freeze=$(echo "$workspaces_data" | jq --arg ws "$last_workspace" '
select(.workspace == $ws) | .pids[]
' | tr '\n' ',')
if [ -n "$pids_freeze" ]; then
pkill -SIGSTOP -g "${pids_freeze%,}"
fi