.. _RefClipboard: Clipboard toolkit ============================================================================ Dragonfly's clipboard toolkit offers easy access to and manipulation of the system clipboard. The :class:`Clipboard` class forms the core of this toolkit. Each instance of this class is a container with a structure similar to the system clipboard, mapping content formats to content data. Dragonfly chooses the clipboard class to alias as :class:`Clipboard` based on the platform: * :class:`dragonfly.windows.win32_clipboard.Win32Clipboard` is used on Windows. * :class:`dragonfly.windows.x11_clipboard.XselClipboard` is used on X11/Linux. This class requires the ``xclip`` program. * :class:`dragonfly.windows.pyperclip_clipboard.PyperclipClipboard` is used on other platforms, such as macOS or Linux. API differences ---------------------------------------------------------------------------- All platform clipboard classes have the same API, plus any platform-specific formats. The following two basic formats are always available: #. ``format_text`` -- ANSI text format (format int: 1) #. ``format_unicode`` -- Unicode text format (format int: 13) The basic clipboard format constants used should match those used on Windows, e.g. ``format_unicode`` is represented by 13 (``CF_UNICODETEXT``). To be safe, use the ``format_*`` attributes defined by the clipboard class. Usage examples ---------------------------------------------------------------------------- An instance of something contains clipboard data. The data stored within an instance can be transferred to and from the system clipboard as follows: (before running this example, the text "asdf" was copied into the system clipboard) :: >>> from dragonfly.windows.clipboard import Clipboard >>> instance = Clipboard() # Create empty instance. >>> print(instance) Clipboard() >>> instance.copy_from_system() # Retrieve from system clipboard. >>> print(instance) Clipboard(unicode=u'asdf', text, oemtext, locale) >>> # The line above shows that *instance* now contains content for >>> # 4 different clipboard formats: unicode, text, oemtext, locale. >>> # The unicode format content is also displayed. >>> instance.copy_to_system() # Transfer back to system clipboard. The situation frequently occurs that a developer would like to use the system clipboard to perform some task without the data currently stored in it being lost. This backing up and restoring can easily be achieved as follows: :: >>> from dragonfly.windows.clipboard import Clipboard >>> # Initialize instance with system clipboard content. ... original = Clipboard(from_system=True) >>> print(original) Clipboard(unicode=u'asdf', text, oemtext, locale) >>> # Use the system clipboard to do something. ... temporary = Clipboard({Clipboard.format_unicode: u"custom content"}) >>> print(temporary) Clipboard(unicode=u'custom content') >>> temporary.copy_to_system() >>> from dragonfly import Key >>> Key("c-v").execute() >>> # Restore original system clipboard content. ... print(Clipboard(from_system=True)) # Show system clipboard contents. Clipboard(unicode=u'custom content', text, oemtext, locale) >>> original.copy_to_system() >>> print(Clipboard(from_system=True)) # Show system clipboard contents. Clipboard(unicode=u'asdf', text, oemtext, locale) Base Clipboard class ---------------------------------------------------------------------------- .. autoclass:: dragonfly.windows.base_clipboard.BaseClipboard :members: Windows Clipboard class ---------------------------------------------------------------------------- .. autoclass:: dragonfly.windows.win32_clipboard.Win32Clipboard :members: Windows Clipboard context manager ---------------------------------------------------------------------------- .. autoclass:: dragonfly.windows.win32_clipboard.win32_clipboard_ctx X11 Clipboard classes ---------------------------------------------------------------------------- .. autoclass:: dragonfly.windows.x11_clipboard.BaseX11Clipboard :members: .. autoclass:: dragonfly.windows.x11_clipboard.XselClipboard :members: Pyperclip Clipboard class ---------------------------------------------------------------------------- .. autoclass:: dragonfly.windows.pyperclip_clipboard.PyperclipClipboard :members: