45 lines
1.2 KiB
Python
45 lines
1.2 KiB
Python
# coding=utf-8
|
|
"""
|
|
This module provides basic ability to copy from and paste to the clipboard/pastebuffer.
|
|
"""
|
|
from typing import (
|
|
cast,
|
|
)
|
|
|
|
import pyperclip # type: ignore[import]
|
|
|
|
# noinspection PyProtectedMember
|
|
|
|
# Can we access the clipboard? Should always be true on Windows and Mac, but only sometimes on Linux
|
|
# noinspection PyBroadException
|
|
try:
|
|
# Try getting the contents of the clipboard
|
|
_ = pyperclip.paste()
|
|
|
|
# pyperclip raises at least the following types of exceptions. To be safe, just catch all Exceptions.
|
|
# FileNotFoundError on Windows Subsystem for Linux (WSL) when Windows paths are removed from $PATH
|
|
# ValueError for headless Linux systems without Gtk installed
|
|
# AssertionError can be raised by paste_klipper().
|
|
# PyperclipException for pyperclip-specific exceptions
|
|
except Exception:
|
|
can_clip = False
|
|
else:
|
|
can_clip = True
|
|
|
|
|
|
def get_paste_buffer() -> str:
|
|
"""Get the contents of the clipboard / paste buffer.
|
|
|
|
:return: contents of the clipboard
|
|
"""
|
|
pb_str = cast(str, pyperclip.paste())
|
|
return pb_str
|
|
|
|
|
|
def write_to_paste_buffer(txt: str) -> None:
|
|
"""Copy text to the clipboard / paste buffer.
|
|
|
|
:param txt: text to copy to the clipboard
|
|
"""
|
|
pyperclip.copy(txt)
|