init
This commit is contained in:
101
scripts/workspace-manager
Executable file
101
scripts/workspace-manager
Executable file
@ -0,0 +1,101 @@
|
||||
#!/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
|
||||
;;
|
||||
48)
|
||||
swaymsg input type:touchpad events enabled
|
||||
swaymsg input type:touchpad dwt disabled
|
||||
;;
|
||||
*)
|
||||
swaymsg input type:touchpad events enabled
|
||||
swaymsg input type:touchpad dwt 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;;
|
||||
13) exit 0;;
|
||||
14) exit 0;;
|
||||
*) 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
|
Reference in New Issue
Block a user