lots: shellcheck, streaming stuff, fixes
[distro-setup] / i3-mouse-warp
diff --git a/i3-mouse-warp b/i3-mouse-warp
new file mode 100755 (executable)
index 0000000..99cdacf
--- /dev/null
@@ -0,0 +1,31 @@
+#!/bin/bash
+set -e; . /usr/local/lib/bash-bear; set +e
+
+## based on:
+## https://github.com/i3/i3/issues/2971
+
+window=$(xdotool getwindowfocus)
+
+# this brings in variables WIDTH and HEIGHT
+eval "$(xdotool getwindowgeometry --shell $window)"
+
+
+if (( HEIGHT > 100 )); then
+  TX=$(( WIDTH / 2))
+  TY=$(( HEIGHT / 2))
+
+  xdotool mousemove -window $window $TX $TY
+  # iank, original says "Check for height of 100 assumes that anything
+  # less than that means no window", and this condition is for "when I
+  # am navigating to a screen that does not have an open window on it". I don't think
+else
+  rect=$(i3-msg -t get_workspaces | jq -r '.[] | select(.focused==true).rect')
+
+  x=$(jq -r '.x' <<< $rect)
+  y=$(jq -r '.y' <<< $rect)
+  w=$(jq -r '.width' <<< $rect)
+  h=$(jq -r '.height' <<< $rect)
+  TX=$(( x + w / 2))
+  TY=$(( y + h / 2))
+  xdotool mousemove -window $window $TX $TY
+fi