init commit

This commit is contained in:
unknown
2025-08-19 08:06:37 -04:00
commit 2957b5515a
743 changed files with 45495 additions and 0 deletions
+149
View File
@@ -0,0 +1,149 @@
import os
from datetime import datetime
from typing import Optional
from talon import Context, Module, actions, app, clip, cron, screen, settings, ui
from talon.canvas import Canvas
mod = Module()
mod.tag("screenshot_disabled", desc="Activating this tag disables screenshot commands")
default_folder = ""
if app.platform == "windows":
default_folder = os.path.expanduser(os.path.join("~", r"OneDrive\\Pictures"))
if not os.path.isdir(default_folder):
default_folder = os.path.join("~", "Pictures")
mod.setting(
"screenshot_folder",
type=str,
default=default_folder,
desc="Where to save screenshots. Note this folder must exist.",
)
@mod.action_class
class Actions:
def screenshot(screen_number: Optional[int] = None):
"""Takes a screenshot of the entire screen and saves it to the pictures folder.
Optional screen number can be given to use screen other than main."""
selected_screen = get_screen(screen_number)
actions.user.screenshot_rect(selected_screen.rect)
def screenshot_window():
"""Takes a screenshot of the active window and saves it to the pictures folder"""
win = ui.active_window()
actions.user.screenshot_rect(win.rect, title=win.app.name)
def screenshot_selection():
"""Triggers an application that is capable of taking a screenshot of a portion of the screen"""
def screenshot_selection_clip():
"""Triggers an application that is capable of taking a screenshot of a portion of the screen and adding to clipboard"""
def screenshot_settings():
"""Opens the settings UI for screenshots.
Only applies to Mac for now
"""
if app.platform == "mac":
actions.key("cmd-shift-5")
else:
app.notify("Not supported on this operating system")
def screenshot_clipboard(screen_number: Optional[int] = None):
"""Takes a screenshot of the entire screen and saves it to the clipboard.
Optional screen number can be given to use screen other than main."""
selected_screen = get_screen(screen_number)
clipboard_rect(selected_screen.rect)
def screenshot_window_clipboard():
"""Takes a screenshot of the active window and saves it to the clipboard"""
win = ui.active_window()
clipboard_rect(win.rect)
def screenshot_rect(
rect: ui.Rect, title: str = "", screen_num: Optional[int] = None
):
"""Allow other modules this screenshot a rectangle"""
selected_screen = get_screen(screen_num)
flash_rect(rect)
img = screen.capture_rect(rect)
path = get_screenshot_path(title)
img.write_file(path)
def clipboard_rect(rect: ui.Rect):
flash_rect(rect)
img = screen.capture_rect(rect)
clip.set_image(img)
def get_screenshot_path(title: str = ""):
if title:
title = f" - {title.replace('.', '_')}"
date = datetime.now().strftime("%Y-%m-%dT%H-%M-%S")
filename = f"Screenshot {date}{title}.png"
folder_path = settings.get("user.screenshot_folder")
path = os.path.expanduser(os.path.join(folder_path, filename))
return os.path.normpath(path)
def flash_rect(rect: ui.Rect):
def on_draw(c):
c.paint.style = c.paint.Style.FILL
c.paint.color = "ffffff"
c.draw_rect(rect)
cron.after("150ms", canvas.close)
canvas = Canvas.from_rect(rect)
canvas.register("draw", on_draw)
canvas.freeze()
def get_screen(screen_number: Optional[int] = None) -> ui.Screen:
if screen_number is None:
return screen.main_screen()
return actions.user.screens_get_by_number(screen_number)
ctx_mac = Context()
ctx_mac.matches = r"""
os: mac
"""
@ctx_mac.action_class("user")
class UserActionsMac:
def screenshot_selection():
actions.key("cmd-shift-4")
def screenshot_selection_clip():
actions.key("cmd-ctrl-shift-4")
ctx_win = Context()
ctx_win.matches = r"""
os: windows
"""
@ctx_win.action_class("user")
class UserActionsWin:
def screenshot_selection():
actions.key("super-shift-s")
def screenshot_selection_clip():
actions.key("super-shift-s")
ctx_linux = Context()
ctx_linux.matches = r"""
os: linux
"""
@ctx_linux.action_class("user")
class UserActionsLinux:
def screenshot_selection():
actions.key("shift-printscr")
@@ -0,0 +1,12 @@
not tag: user.screenshot_disabled
-
^grab screen$: user.screenshot()
^grab screen <number_small>$: user.screenshot(number_small)
^grab window$: user.screenshot_window()
^grab selection$: user.screenshot_selection()
^grab selection clip$: user.screenshot_selection_clip()
^grab settings$: user.screenshot_settings()
^grab screen clip$: user.screenshot_clipboard()
^grab screen <number_small> clip$: user.screenshot_clipboard(number_small)
^grab window clip$: user.screenshot_window_clipboard()