#!/usr/bin/python """ The purpose of this program is such that if you bind a keystroke (say, Windows+E) to, say: python /home/joe/quickeval.py and virtkey types the python output of whatever code is in the clipboard. Dangerous? Maybe a little, if you're writing an article about python and rm -rf. Useful? Kind of a lot. Be sure to take your hands off the keyboard after you execute this via keybinding so you don't combine what's being typed with your keybinding's keys. """ from cStringIO import StringIO import gtk, os, sys, time, re, operator, itertools, datetime, django, math, random # convenience import pygtk import virtkey pygtk.require('2.0') # useful functions def njoin(a, n=1): return ('\n'*n).join(a) def nsplit(s, include_blanks=True): return [a for a in s.split('\n') if (include_blanks or a)] def ejoin(a): return ''.join(a) def sjoin(a): return ' '.join(a) def cjoin(a): return ', '.join(a) def velcro(a, b): return dict(zip(a,b)) def flatten(a): return list(itertools.chain(*a)) def stripall(a): return [b.strip() for b in a] def getclip(): try: s = gtk.clipboard_get().wait_for_text() return s except: print 'Failed!' def main(): old_stdout = sys.stdout sys.stdout = mystdout = StringIO() # useful variables alphabet = map(chr,range(65,65+26)) newline = '\n' # probably the best way to fix the issue of needing newlines in-code nl = newline # quicker # execute the clipboard cmds = getclip() exec(cmds) result = mystdout.getvalue() if not result: x = '' exec('x = ' + cmds) result = str(x) mystdout.close() # type the result time.sleep(0.4) v = virtkey.virtkey() for i in [ord(c) for c in list(str(result.rstrip()))]: v.press_unicode(i) v.release_unicode(i) sys.stdout = old_stdout return 0 if __name__ == '__main__': main()