blob: a8591b91f935b023bf49e672635374c8c57f4219 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
from .base import Clipboard, ClipboardData
from collections import deque
__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=None, max_size=60):
assert data is None or isinstance(data, ClipboardData)
assert max_size >= 1
self.max_size = max_size
self._ring = deque()
if data is not None:
self.set_data(data)
def set_data(self, data):
assert isinstance(data, ClipboardData)
self._ring.appendleft(data)
while len(self._ring) > self.max_size:
self._ring.pop()
def get_data(self):
if self._ring:
return self._ring[0]
else:
return ClipboardData()
def rotate(self):
if self._ring:
# Add the very first item at the end.
self._ring.append(self._ring.popleft())
|