Spaces:
Sleeping
Sleeping
first-space
/
first-space-venv
/lib
/python3.12
/site-packages
/prompt_toolkit
/clipboard
/pyperclip.py
from __future__ import annotations | |
import pyperclip | |
from prompt_toolkit.selection import SelectionType | |
from .base import Clipboard, ClipboardData | |
__all__ = [ | |
"PyperclipClipboard", | |
] | |
class PyperclipClipboard(Clipboard): | |
""" | |
Clipboard that synchronizes with the Windows/Mac/Linux system clipboard, | |
using the pyperclip module. | |
""" | |
def __init__(self) -> None: | |
self._data: ClipboardData | None = None | |
def set_data(self, data: ClipboardData) -> None: | |
self._data = data | |
pyperclip.copy(data.text) | |
def get_data(self) -> ClipboardData: | |
text = pyperclip.paste() | |
# When the clipboard data is equal to what we copied last time, reuse | |
# the `ClipboardData` instance. That way we're sure to keep the same | |
# `SelectionType`. | |
if self._data and self._data.text == text: | |
return self._data | |
# Pyperclip returned something else. Create a new `ClipboardData` | |
# instance. | |
else: | |
return ClipboardData( | |
text=text, | |
type=SelectionType.LINES if "\n" in text else SelectionType.CHARACTERS, | |
) | |