2025-08-19 08:06:37 -04:00

51 lines
1.4 KiB
Python

from pathlib import Path
from typing import Optional
from talon import Context, Module, actions, clip, ui
ctx = Context()
mod = Module()
ctx.matches = """
os: mac
"""
@mod.action_class
class Actions:
def dock_send_notification(notification: str):
"""Send a CoreDock notification to the macOS Dock using SPI"""
def dock_app_expose(app: Optional[ui.App] = None):
"""Activate macOS app Exposé via its Dock item (for the frontmost app if not specified)"""
@ctx.action_class("user")
class UserActions:
def dock_app_expose(app=None):
if app is None:
app = ui.active_app()
app_name = Path(app.path).stem
dock_items = ui.apps(bundle="com.apple.dock")[0].children.find(
AXSubrole="AXApplicationDockItem", AXTitle=app_name, max_depth=1
)
match len(dock_items):
case 1:
dock_items[0].perform("AXShowExpose")
case 0:
actions.app.notify(
body=f"No dock icon for “{app_name}",
title="Unable to activate App Exposé",
)
case _:
actions.app.notify(
body=f"Multiple dock icons for “{app_name}",
title="Unable to activate App Exposé",
)
def dock_send_notification(notification: str):
from talon.mac.dock import dock_notify
dock_notify(notification)