70 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			70 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
|   | """ Utilities for accessing the platform's clipboard.
 | ||
|  | """
 | ||
|  | 
 | ||
|  | import subprocess | ||
|  | 
 | ||
|  | from yap_ipython.core.error import TryNext | ||
|  | import yap_ipython.utils.py3compat as py3compat | ||
|  | 
 | ||
|  | class ClipboardEmpty(ValueError): | ||
|  |     pass | ||
|  | 
 | ||
|  | def win32_clipboard_get(): | ||
|  |     """ Get the current clipboard's text on Windows.
 | ||
|  | 
 | ||
|  |     Requires Mark Hammond's pywin32 extensions. | ||
|  |     """
 | ||
|  |     try: | ||
|  |         import win32clipboard | ||
|  |     except ImportError: | ||
|  |         raise TryNext("Getting text from the clipboard requires the pywin32 " | ||
|  |                       "extensions: http://sourceforge.net/projects/pywin32/") | ||
|  |     win32clipboard.OpenClipboard() | ||
|  |     try: | ||
|  |         text = win32clipboard.GetClipboardData(win32clipboard.CF_UNICODETEXT) | ||
|  |     except (TypeError, win32clipboard.error): | ||
|  |         try: | ||
|  |             text = win32clipboard.GetClipboardData(win32clipboard.CF_TEXT) | ||
|  |             text = py3compat.cast_unicode(text, py3compat.DEFAULT_ENCODING) | ||
|  |         except (TypeError, win32clipboard.error): | ||
|  |             raise ClipboardEmpty | ||
|  |     finally: | ||
|  |         win32clipboard.CloseClipboard() | ||
|  |     return text | ||
|  | 
 | ||
|  | def osx_clipboard_get(): | ||
|  |     """ Get the clipboard's text on OS X.
 | ||
|  |     """
 | ||
|  |     p = subprocess.Popen(['pbpaste', '-Prefer', 'ascii'], | ||
|  |         stdout=subprocess.PIPE) | ||
|  |     text, stderr = p.communicate() | ||
|  |     # Text comes in with old Mac \r line endings. Change them to \n. | ||
|  |     text = text.replace(b'\r', b'\n') | ||
|  |     text = py3compat.cast_unicode(text, py3compat.DEFAULT_ENCODING) | ||
|  |     return text | ||
|  | 
 | ||
|  | def tkinter_clipboard_get(): | ||
|  |     """ Get the clipboard's text using Tkinter.
 | ||
|  | 
 | ||
|  |     This is the default on systems that are not Windows or OS X. It may | ||
|  |     interfere with other UI toolkits and should be replaced with an | ||
|  |     implementation that uses that toolkit. | ||
|  |     """
 | ||
|  |     try: | ||
|  |         from tkinter import Tk, TclError  | ||
|  |     except ImportError: | ||
|  |         raise TryNext("Getting text from the clipboard on this platform requires tkinter.") | ||
|  |          | ||
|  |     root = Tk() | ||
|  |     root.withdraw() | ||
|  |     try: | ||
|  |         text = root.clipboard_get() | ||
|  |     except TclError: | ||
|  |         raise ClipboardEmpty | ||
|  |     finally: | ||
|  |         root.destroy() | ||
|  |     text = py3compat.cast_unicode(text, py3compat.DEFAULT_ENCODING) | ||
|  |     return text | ||
|  | 
 | ||
|  | 
 |