1
0
Fork 0
src/niceties/xjiggler

117 lines
3.0 KiB
Plaintext
Raw Normal View History

2023-07-09 09:32:03 +00:00
#!/bin/sh
set -e
# based on https://github.com/carrot69/keep-presence/
2023-07-09 15:30:11 +00:00
test -n "$XJIGGLER_DELAY_ACTION" \
|| XJIGGLER_DELAY_ACTION=300 # seconds
test -n "$XJIGGLER_DELAY_DETECTION" \
|| XJIGGLER_DELAY_DETECTION=60 # seconds
2023-07-09 15:39:37 +00:00
test -n "$XJIGGLER_KEYBOARD_ENABLED" \
|| XJIGGLER_KEYBOARD_ENABLED='' # zero-len nonzero-len
2023-07-09 15:30:11 +00:00
test -n "$XJIGGLER_MOUSE_DIRECTION" \
2023-07-10 12:08:06 +00:00
|| XJIGGER_MOUSE_DIRECTION=DIAGONAL # "CIRCULAR" "DIAGONAL"
2023-07-09 09:32:03 +00:00
test -n "$XJIGGLER_MOUSE_DISTANCE" \
|| XJIGGLER_MOUSE_DISTANCE=1 # pixels
2023-07-09 15:39:37 +00:00
test -n "$XJIGGLER_MOUSE_ENABLED" \
|| XJIGGLER_MOUSE_ENABLED=yes # zero-len nonzero-len
2023-07-09 09:32:03 +00:00
# eval is scary but this use was mentioned in the man page
getmouselocation(){
eval $(xdotool getmouselocation --shell | sed 's/^/XJIGGLER_/g')
XJIGGLER_T="$(date '+%s')"
}
jiggle(){
2023-07-10 12:08:06 +00:00
test -z "$XJIGGLER_MOUSE_ENABLED" \
|| xdotool mousemove_relative "$XJIGGLER_MOUSE_dX" \
"$XJIGGLER_MOUSE_dY"
2023-07-09 09:32:03 +00:00
}
pushmouselocation(){
XJIGGLER_lastT="$XJIGGLER_T"
XJIGGLER_lastX="$XJIGGLER_X"
XJIGGLER_lastY="$XJIGGLER_Y"
}
printdebug(){
printf "XJIGGLER_T=%s\n" "$XJIGGLER_T" # seconds since epoch
printf "XJIGGLER_X=%s\n" "$XJIGGLER_X" # pixels
printf "XJIGGLER_Y=%s\n" "$XJIGGLER_Y" # pixels
printf "XJIGGLER_lastT=%s\n" "$XJIGGLER_lastT"
printf "XJIGGLER_lastX=%s\n" "$XJIGGLER_lastX"
printf "XJIGGLER_lastY=%s\n" "$XJIGGLER_lastY"
}
rotatemousedirection(){
2023-07-09 15:30:11 +00:00
case "$XJIGGLER_MOUSE_DIRECTION" in
2023-07-10 12:08:06 +00:00
up) XJIGGLER_MOUSE_DIRECTION=right
XJIGGLER_MOUSE_dX="$XJIGGLER_MOUSE_DISTANCE"
XJIGGLER_MOUSE_dY=0
return; ;;
right) XJIGGLER_MOUSE_DIRECTION=down
XJIGGLER_MOUSE_dX=0
XJIGGLER_MOUSE_dY="$XJIGGLER_MOUSE_DISTANCE"
return; ;;
down) XJIGGLER_MOUSE_DIRECTION=left
XJIGGLER_MOUSE_dX=-"$XJIGGLER_MOUSE_DISTANCE"
XJIGGLER_MOUSE_dY=0
return; ;;
CIRCULAR | left)
XJIGGLER_MOUSE_DIRECTION=up
XJIGGLER_MOUSE_dX=0
XJIGGLER_MOUSE_dY=-"$XJIGGLER_MOUSE_DISTANCE"
DIAGONAL | *)
XJIGGLER_MOUSE_dX="$XJIGGLER_MOUSE_DISTANCE"
XJIGGLER_MOUSE_dY="$XJIGGLER_MOUSE_DISTANCE"
return; ;;
return; ;;
2023-07-09 09:32:03 +00:00
esac
}
2023-07-09 15:30:11 +00:00
usage(){
2023-07-10 12:08:06 +00:00
printf 'Usage: %s (-chm) (-d [distance]) %s\n' \
"$0" '(-s [action delay seconds])'>&2
2023-07-09 15:30:11 +00:00
exit 64 # sysexits(3) EX_USAGE
}
2023-07-10 12:08:06 +00:00
while getopts :cd:hms: OPTION
2023-07-09 15:30:11 +00:00
do
case "$OPTION" in
2023-07-10 12:08:06 +00:00
c) XJIGGLER_MOUSE_DIRECTION=DIAGONAL ;;
d) XJIGGLER_MOUSE_DISTANCE="$OPTARG)" ;;
2023-07-09 15:39:37 +00:00
m) XJIGGLER_MOUSE_ENABLED='' ;;
s) XJIGGLER_DELAY_ACTION="$(OPTARG)" ;;
*) usage ;;
2023-07-09 15:30:11 +00:00
esac
done
2023-07-09 09:32:03 +00:00
getmouselocation; pushmouselocation
while true
do
2023-07-09 15:30:11 +00:00
sleep "$XJIGGLER_DELAY_DETECTION"
2023-07-09 09:32:03 +00:00
getmouselocation
if test "$XJIGGLER_lastX" = "$XJIGGLER_X" \
&& test "$XJIGGLER_lastY" = "$XJIGGLER_Y"
then # no movement
2023-07-10 12:08:06 +00:00
command -v xprintidle \
&& test "$(xprintidle \
| sed -e 's/^/0/' -e 's/...$//')" \
-gt "$XJIGGLER_DELAY_ACTION" \
|| test "$(printf '%s\n%s\n-\np\n' "$XJIGGLER_T" \
2023-07-09 14:48:49 +00:00
"$XJIGGLER_lastT" \
2023-07-09 15:30:11 +00:00
| dc)" -gt "$XJIGGLER_DELAY_ACTION" \
2023-07-09 09:32:03 +00:00
|| continue # hasn't been long enough
rotatemousedirection; jiggle
printf '%s: Jiggled:\n' "$0"
printdebug | sed 's/^/\t/g'
2023-07-10 12:08:06 +00:00
getmouselocation
2023-07-09 09:32:03 +00:00
else # movement
printf '%s: Movement detected:\n' "$0"
printdebug | sed 's/^/\t/g'
fi
2023-07-10 12:08:06 +00:00
pushmouselocation
2023-07-09 09:32:03 +00:00
done >&2