Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.8/site-packages/prompt_toolkit/clipboard/base.py: 67%
39 statements
« prev ^ index » next coverage.py v7.4.4, created at 2024-04-20 06:09 +0000
« prev ^ index » next coverage.py v7.4.4, created at 2024-04-20 06:09 +0000
1"""
2Clipboard for command line interface.
3"""
4from __future__ import annotations
6from abc import ABCMeta, abstractmethod
7from typing import Callable
9from prompt_toolkit.selection import SelectionType
11__all__ = [
12 "Clipboard",
13 "ClipboardData",
14 "DummyClipboard",
15 "DynamicClipboard",
16]
19class ClipboardData:
20 """
21 Text on the clipboard.
23 :param text: string
24 :param type: :class:`~prompt_toolkit.selection.SelectionType`
25 """
27 def __init__(
28 self, text: str = "", type: SelectionType = SelectionType.CHARACTERS
29 ) -> None:
30 self.text = text
31 self.type = type
34class Clipboard(metaclass=ABCMeta):
35 """
36 Abstract baseclass for clipboards.
37 (An implementation can be in memory, it can share the X11 or Windows
38 keyboard, or can be persistent.)
39 """
41 @abstractmethod
42 def set_data(self, data: ClipboardData) -> None:
43 """
44 Set data to the clipboard.
46 :param data: :class:`~.ClipboardData` instance.
47 """
49 def set_text(self, text: str) -> None: # Not abstract.
50 """
51 Shortcut for setting plain text on clipboard.
52 """
53 self.set_data(ClipboardData(text))
55 def rotate(self) -> None:
56 """
57 For Emacs mode, rotate the kill ring.
58 """
60 @abstractmethod
61 def get_data(self) -> ClipboardData:
62 """
63 Return clipboard data.
64 """
67class DummyClipboard(Clipboard):
68 """
69 Clipboard implementation that doesn't remember anything.
70 """
72 def set_data(self, data: ClipboardData) -> None:
73 pass
75 def set_text(self, text: str) -> None:
76 pass
78 def rotate(self) -> None:
79 pass
81 def get_data(self) -> ClipboardData:
82 return ClipboardData()
85class DynamicClipboard(Clipboard):
86 """
87 Clipboard class that can dynamically returns any Clipboard.
89 :param get_clipboard: Callable that returns a :class:`.Clipboard` instance.
90 """
92 def __init__(self, get_clipboard: Callable[[], Clipboard | None]) -> None:
93 self.get_clipboard = get_clipboard
95 def _clipboard(self) -> Clipboard:
96 return self.get_clipboard() or DummyClipboard()
98 def set_data(self, data: ClipboardData) -> None:
99 self._clipboard().set_data(data)
101 def set_text(self, text: str) -> None:
102 self._clipboard().set_text(text)
104 def rotate(self) -> None:
105 self._clipboard().rotate()
107 def get_data(self) -> ClipboardData:
108 return self._clipboard().get_data()