94 lines
2.0 KiB
Bash
Executable File
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
|