Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.8/site-packages/prompt_toolkit/clipboard/in_memory.py: 41%
22 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
1from __future__ import annotations
3from collections import deque
5from .base import Clipboard, ClipboardData
7__all__ = [
8 "InMemoryClipboard",
9]
12class InMemoryClipboard(Clipboard):
13 """
14 Default clipboard implementation.
15 Just keep the data in memory.
17 This implements a kill-ring, for Emacs mode.
18 """
20 def __init__(self, data: ClipboardData | None = None, max_size: int = 60) -> None:
21 assert max_size >= 1
23 self.max_size = max_size
24 self._ring: deque[ClipboardData] = deque()
26 if data is not None:
27 self.set_data(data)
29 def set_data(self, data: ClipboardData) -> None:
30 self._ring.appendleft(data)
32 while len(self._ring) > self.max_size:
33 self._ring.pop()
35 def get_data(self) -> ClipboardData:
36 if self._ring:
37 return self._ring[0]
38 else:
39 return ClipboardData()
41 def rotate(self) -> None:
42 if self._ring:
43 # Add the very first item at the end.
44 self._ring.append(self._ring.popleft())