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

1from __future__ import annotations 

2 

3from collections import deque 

4from typing import Deque, Optional 

5 

6from .base import Clipboard, ClipboardData 

7 

8__all__ = [ 

9 "InMemoryClipboard", 

10] 

11 

12 

13class InMemoryClipboard(Clipboard): 

14 """ 

15 Default clipboard implementation. 

16 Just keep the data in memory. 

17 

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

19 """ 

20 

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

22 assert max_size >= 1 

23 

24 self.max_size = max_size 

25 self._ring: Deque[ClipboardData] = deque() 

26 

27 if data is not None: 

28 self.set_data(data) 

29 

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

31 self._ring.appendleft(data) 

32 

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

34 self._ring.pop() 

35 

36 def get_data(self) -> ClipboardData: 

37 if self._ring: 

38 return self._ring[0] 

39 else: 

40 return ClipboardData() 

41 

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