83 lines
3 KiB
Python
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)
|