1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- from __future__ import annotations
- from collections import deque
- from .base import Clipboard, ClipboardData
- __all__ = [
- "InMemoryClipboard",
- ]
- class InMemoryClipboard(Clipboard):
- """
- Default clipboard implementation.
- Just keep the data in memory.
- This implements a kill-ring, for Emacs mode.
- """
- def __init__(self, data: ClipboardData | None = None, max_size: int = 60) -> None:
- assert max_size >= 1
- self.max_size = max_size
- self._ring: deque[ClipboardData] = deque()
- if data is not None:
- self.set_data(data)
- def set_data(self, data: ClipboardData) -> None:
- self._ring.appendleft(data)
- while len(self._ring) > self.max_size:
- self._ring.pop()
- def get_data(self) -> ClipboardData:
- if self._ring:
- return self._ring[0]
- else:
- return ClipboardData()
- def rotate(self) -> None:
- if self._ring:
- # Add the very first item at the end.
- self._ring.append(self._ring.popleft())
|