Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.8/site-packages/prompt_toolkit/clipboard/in_memory.py: 43%
23 statements
« prev ^ index » next coverage.py v7.2.2, created at 2023-03-26 06:07 +0000
« prev ^ index » next coverage.py v7.2.2, created at 2023-03-26 06:07 +0000
1from __future__ import annotations
3from collections import deque
4from typing import Deque, Optional
6from .base import Clipboard, ClipboardData
8__all__ = [
9 "InMemoryClipboard",
10]
13class InMemoryClipboard(Clipboard):
14 """
15 Default clipboard implementation.
16 Just keep the data in memory.
18 This implements a kill-ring, for Emacs mode.
19 """
21 def __init__(self, data: ClipboardData | None = None, max_size: int = 60) -> None:
22 assert max_size >= 1
24 self.max_size = max_size
25 self._ring: Deque[ClipboardData] = deque()
27 if data is not None:
28 self.set_data(data)
30 def set_data(self, data: ClipboardData) -> None:
31 self._ring.appendleft(data)
33 while len(self._ring) > self.max_size:
34 self._ring.pop()
36 def get_data(self) -> ClipboardData:
37 if self._ring:
38 return self._ring[0]
39 else:
40 return ClipboardData()
42 def rotate(self) -> None:
43 if self._ring:
44 # Add the very first item at the end.
45 self._ring.append(self._ring.popleft())