summaryrefslogtreecommitdiff
path: root/cmd2/clipboard.py
diff options
context:
space:
mode:
authorkotfu <kotfu@kotfu.net>2018-06-21 14:54:00 -0500
committerkotfu <kotfu@kotfu.net>2018-06-21 14:54:00 -0500
commit37b2f68b7ec021d1bfca739b343460d4d97a49d1 (patch)
treefdd93557c30c9fde42dbb95cfd4a0b5cf887844c /cmd2/clipboard.py
parent101395a437ef66846e207c039a12ee946128fab9 (diff)
parent52795b7071e13a505c9131084f0d80d1a2dfc1f6 (diff)
downloadcmd2-git-37b2f68b7ec021d1bfca739b343460d4d97a49d1.tar.gz
Merge branch 'master' into plugin_functions
# Conflicts: # cmd2/cmd2.py
Diffstat (limited to 'cmd2/clipboard.py')
-rw-r--r--cmd2/clipboard.py49
1 files changed, 49 insertions, 0 deletions
diff --git a/cmd2/clipboard.py b/cmd2/clipboard.py
new file mode 100644
index 00000000..e0d1fc03
--- /dev/null
+++ b/cmd2/clipboard.py
@@ -0,0 +1,49 @@
+# coding=utf-8
+"""
+This module provides basic ability to copy from and paste to the clipboard/pastebuffer.
+"""
+import sys
+
+import pyperclip
+
+# Newer versions of pyperclip are released as a single file, but older versions had a more complicated structure
+try:
+ from pyperclip.exceptions import PyperclipException
+except ImportError: # pragma: no cover
+ # noinspection PyUnresolvedReferences
+ from pyperclip import PyperclipException
+
+# Can we access the clipboard? Should always be true on Windows and Mac, but only sometimes on Linux
+# noinspection PyUnresolvedReferences
+try:
+ # Get the version of the pyperclip module as a float
+ pyperclip_ver = float('.'.join(pyperclip.__version__.split('.')[:2]))
+
+ # The extraneous output bug in pyperclip on Linux using xclip was fixed in more recent versions of pyperclip
+ if sys.platform.startswith('linux') and pyperclip_ver < 1.6:
+ # Avoid extraneous output to stderr from xclip when clipboard is empty at cost of overwriting clipboard contents
+ pyperclip.copy('')
+ else:
+ # Try getting the contents of the clipboard
+ _ = pyperclip.paste()
+except PyperclipException:
+ can_clip = False
+else:
+ can_clip = True
+
+
+def get_paste_buffer() -> str:
+ """Get the contents of the clipboard / paste buffer.
+
+ :return: contents of the clipboard
+ """
+ pb_str = pyperclip.paste()
+ return pb_str
+
+
+def write_to_paste_buffer(txt: str) -> None:
+ """Copy text to the clipboard / paste buffer.
+
+ :param txt: text to copy to the clipboard
+ """
+ pyperclip.copy(txt)