65 lines
1.6 KiB
Python
65 lines
1.6 KiB
Python
import contextlib
|
|
import time
|
|
|
|
from talon import actions, ctrl, Module, ui, Context
|
|
|
|
|
|
mod = Module()
|
|
|
|
|
|
@mod.action_class
|
|
class ModuleActions:
|
|
def desktop(number: int):
|
|
"change the current desktop"
|
|
|
|
def window_move_desktop_left():
|
|
"""move the current window to the desktop to the left"""
|
|
|
|
def window_move_desktop_right():
|
|
"""move the current window to the desktop to the right"""
|
|
|
|
def window_move_desktop(desktop_number: int):
|
|
"""move the current window to a different desktop"""
|
|
|
|
|
|
ctx = Context()
|
|
ctx.matches = r"""
|
|
os: mac
|
|
"""
|
|
|
|
|
|
@contextlib.contextmanager
|
|
def _drag_window_mac(win=None):
|
|
if win is None:
|
|
win = ui.active_window()
|
|
fs = win.children.find(AXSubrole="AXFullScreenButton")[0]
|
|
rect = fs.AXFrame["$rect2d"]
|
|
x = rect["x"] + rect["width"] + 5
|
|
y = rect["y"] + rect["height"] / 2
|
|
ctrl.mouse_move(x, y)
|
|
ctrl.mouse_click(button=0, down=True)
|
|
yield
|
|
time.sleep(0.1)
|
|
ctrl.mouse_click(button=0, up=True)
|
|
|
|
|
|
@ctx.action_class("self")
|
|
class MacActions:
|
|
def desktop(number: int):
|
|
if number < 10:
|
|
actions.key("ctrl-{}".format(number))
|
|
|
|
def window_move_desktop_left():
|
|
with _drag_window_mac():
|
|
actions.key("ctrl-cmd-alt-left")
|
|
|
|
def window_move_desktop_right():
|
|
with _drag_window_mac():
|
|
actions.key("ctrl-cmd-alt-right")
|
|
|
|
def window_move_desktop(desktop_number: int):
|
|
if ui.apps(bundle="com.amethyst.Amethyst"):
|
|
actions.key(f"ctrl-alt-shift-{desktop_number}")
|
|
else:
|
|
with _drag_window_mac():
|
|
actions.key(f"ctrl-{desktop_number}")
|