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

1from __future__ import annotations 

2 

3from collections import deque 

4 

5from .base import Clipboard, ClipboardData 

6 

7__all__ = [ 

8 "InMemoryClipboard", 

9] 

10 

11 

12class InMemoryClipboard(Clipboard): 

13 """ 

14 Default clipboard implementation. 

15 Just keep the data in memory. 

16 

17 This implements a kill-ring, for Emacs mode. 

18 """ 

19 

20 def __init__(self, data: ClipboardData | None = None, max_size: int = 60) -> None: 

21 assert max_size >= 1 

22 

23 self.max_size = max_size 

24 self._ring: deque[ClipboardData] = deque() 

25 

26 if data is not None: 

27 self.set_data(data) 

28 

29 def set_data(self, data: ClipboardData) -> None: 

30 self._ring.appendleft(data) 

31 

32 while len(self._ring) > self.max_size: 

33 self._ring.pop() 

34 

35 def get_data(self) -> ClipboardData: 

36 if self._ring: 

37 return self._ring[0] 

38 else: 

39 return ClipboardData() 

40 

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())