dotfiles/scripts/bin/i3-mouse.py

73 lines
1.6 KiB
Python

#!/usr/bin/env python3
import i3ipc
import sys
import os
import time
import pyautogui
from enum import Enum
# Enum for mouse direction
class Direction(Enum):
UP = 1
LEFT = 2
RIGHT = 3
DOWN = 4
NONE = 5
# getPoints() returns x and y movement of mouse
def getPoints():
sen = 10
t = 0
delay = 0.01
x,y = pyautogui.position()
while True:
time.sleep(delay)
t += delay
if t > 0.5:
return
xp, yp = pyautogui.position()
dx = x - xp
dy = y - yp
if abs(dx) > sen or abs(dy) > sen:
break
return dx, dy
#pointsToDirection() converts mouse movement points to a direction
def pointsToDirection(points):
if points is None:
return
x, y = points
if abs(x) > abs(y):
if x < 0:
return Direction.RIGHT
else:
return Direction.LEFT
else:
if y > 0:
return Direction.UP
else:
return Direction.DOWN
i3 = i3ipc.Connection()
focused = i3.get_tree().find_focused()
command = sys.argv[1]
if command in ['back', 'forward']:
if focused.window_instance not in ['overwatch.exe', 'hl2_linux']:
if sys.argv[1] == 'forward':
i3.command('workspace prev_on_output')
else:
i3.command('workspace next_on_output')
elif command == 'thumb':
direction = pointsToDirection(getPoints())
if direction == Direction.UP:
i3.command('move up')
elif direction == Direction.RIGHT:
i3.command('move right')
elif direction == Direction.DOWN:
i3.command('move down')
elif direction == Direction.LEFT:
i3.command('move left')