init
This commit is contained in:
commit
38355d2442
9083 changed files with 1225834 additions and 0 deletions
|
|
@ -0,0 +1,42 @@
|
|||
from typing import Optional
|
||||
|
||||
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: Optional[ClipboardData] = 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,
|
||||
)
|
||||
Loading…
Add table
Add a link
Reference in a new issue