dotfiles/talon/community/community-cursorless-0.4.0/code/screenshot.py
2024-11-16 20:27:38 -07:00

83 lines
3 KiB
Python

from talon import Module, screen, ui, actions, clip, app, settings
from datetime import datetime
import os, subprocess
active_platform = app.platform
default_command = None
if active_platform == "windows":
default_folder = os.path.expanduser(os.path.join("~", r"OneDrive\Desktop"))
# this is probably not the correct way to check for onedrive, quick and dirty
if not os.path.isdir(default_folder):
default_folder = os.path.join("~", "Desktop")
elif active_platform == "mac":
default_folder = os.path.join("~", "Desktop")
elif active_platform == "linux":
default_folder = "~"
default_command = "scrot -s"
mod = Module()
screenshot_folder = mod.setting(
"screenshot_folder",
type=str,
default=default_folder,
desc="Where to save screenshots. Note this folder must exist.",
)
screenshot_selection_command = mod.setting(
"screenshot_selection_command",
type=str,
default=default_command,
desc="Commandline trigger for taking a selection of the screen. By default, only linux uses this.",
)
def get_screenshot_path():
filename = "screenshot-%s.png" % datetime.now().strftime("%Y%m%d%H%M%S")
folder_path = screenshot_folder.get()
path = os.path.expanduser(os.path.join(folder_path, filename))
return os.path.normpath(path)
@mod.action_class
class Actions:
def screenshot():
"""takes a screenshot of the entire screen and saves it to the desktop as screenshot.png"""
img = screen.capture_rect(screen.main_screen().rect)
path = get_screenshot_path()
img.write_file(path)
app.notify(subtitle="Screenshot: %s" % path)
def screenshot_window():
"""takes a screenshot of the current window and says it to the desktop as screenshot.png"""
img = screen.capture_rect(ui.active_window().rect)
path = get_screenshot_path()
img.write_file(path)
app.notify(subtitle="Screenshot: %s" % path)
def screenshot_selection():
"""triggers an application is capable of taking a screenshot of a portion of the screen"""
command = screenshot_selection_command.get()
if command:
path = get_screenshot_path()
command = command.split()
command.append(path)
subprocess.Popen(command)
app.notify(subtitle="Screenshot: %s" % path)
else:
if active_platform == "windows":
actions.key("super-shift-s")
elif active_platform == "mac":
actions.key("ctrl-shift-cmd-4")
# linux is handled by the command by default
# elif active_platform == "linux":
def screenshot_clipboard():
"""takes a screenshot of the entire screen and saves it to the clipboard"""
img = screen.capture_rect(screen.main_screen().rect)
clip.set_image(img)
def screenshot_window_clipboard():
"""takes a screenshot of the window and saves it to the clipboard"""
img = screen.capture_rect(ui.active_window().rect)
clip.set_image(img)