Skip to content

Instantly share code, notes, and snippets.

@lf-
Created July 7, 2017 02:35
Show Gist options
  • Save lf-/c57ba2c1a0021d0e845c4cad077414fc to your computer and use it in GitHub Desktop.
Save lf-/c57ba2c1a0021d0e845c4cad077414fc to your computer and use it in GitHub Desktop.
"""
Add copy to clipboard from IPython!
To install, just copy it to your profile/startup directory, typically:
~/.ipython/profile_default/startup/
Example usage:
%clip hello world
# will store "hello world"
a = [1, 2, 3]
%clip a
# will store "[1, 2, 3]"
You can also use it with cell magic
In [1]: %%clip
...: Even multi
...: lines
...: work!
...:
If you don't have a variable named 'clip' you can rely on automagic:
clip hey man
a = [1, 2, 3]
clip a
"""
import sys
if sys.platform == 'darwin':
from AppKit import NSPasteboard, NSArray
elif sys.platform.startswith('linux'):
from subprocess import Popen, PIPE
else:
raise ImportError("Clip magic only works on osx or linux!")
from IPython.core.magic import register_line_cell_magic
def _copy_to_clipboard(arg):
arg = str(globals().get(arg) or arg)
if sys.platform == 'darwin':
pb = NSPasteboard.generalPasteboard()
pb.clearContents()
a = NSArray.arrayWithObject_(arg)
pb.writeObjects_(a)
elif sys.platform.startswith('linux'):
p = Popen(['xsel', '-bi'], stdin=PIPE)
p.communicate(input=arg.encode('utf-8'))
print('Copied to clipboard!')
@register_line_cell_magic
def copy(line, cell=None):
if line and cell:
cell = '\n'.join((line, cell))
_copy_to_clipboard(cell or line)
# We delete it to avoid name conflicts for automagic to work
del copy
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment