__license__ = '''\ # Copyright (c) 2011 Edward Langley # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # Redistributions of source code must retain the above copyright notice, # this list of conditions and the following disclaimer. # # Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # # Neither the name of the project's author nor the names of its # contributors may be used to endorse or promote products derived from # this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS # FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT # HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED # TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR # PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF # LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.''' import re import functools import os.path import inspect def inst(x): return x() @inst class __Null(object): pass def getTerminalSize(): def ioctl_GWINSZ(fd): try: import fcntl, termios, struct, os cr = struct.unpack('hh', fcntl.ioctl(fd, termios.TIOCGWINSZ, '1234')) except: return None return cr cr = ioctl_GWINSZ(0) or ioctl_GWINSZ(1) or ioctl_GWINSZ(2) if not cr: try: fd = os.open(os.ctermid(), os.O_RDONLY) cr = ioctl_GWINSZ(fd) os.close(fd) except: pass if not cr: try: cr = (env['LINES'], env['COLUMNS']) except: cr = (25, 80) return int(cr[1]), int(cr[0]) def cmp(a,b): return (a > b) - (a < b) def sort_(nms): return sorted(nms, key = functools.cmp_to_key(lambda x,y: cmp(x.lower().lstrip('_').rpartition('__')[2], y.lower().lstrip('_').rpartition('__')[2]))) def sort_decorator(func): @functools.wraps(func) def _inner(*a, **kw): result = func(*a, **kw) return sort_(result) return _inner def pprint_decorator(func): @functools.wraps(func) def _inner(*args, **kwargs): result = func(*args, **kwargs) return pprint(result) return _inner def dir_decorator(func): @functools.wraps(func) def _inner(nm=__Null, match=__Null): # print(get_interpframe()) result = None if nm is __Null: result = get_interpframe().f_globals.keys() else: result = func(nm) if match is not __Null: x = [x for x in result if x.startswith(match)] if x: result = x else: x = [x for x in result if x.endswith(match)] if x: result = x else: omatch = match if not hasattr(match, 'match'): match = re.compile(match) x = [x for x in result if match.match(x)] if x: result = x else: raise ValueError('No symbols match %s' % omatch) if x: result = x return result return _inner def _pprint(nms): length = max(len(s) for s in nms) count = 0 cc = 1 while (cc*length) < ((getTerminalSize()[0])-2*cc): cc+=1 cc -= 1 if cc <= 0: cc = 1 final_newline = False for v, c in enumerate(nms): final_newline = False print(c.strip().ljust(length),end='') if v % cc == cc-1: final_newline = True print() if not final_newline: print() pprint = _pprint try: __builtins__['pdir'] = pprint_decorator(sort_decorator(dir_decorator(dir))) __builtins__['fwprint'] = pprint except: __builtins__.pdir = pprint_decorator(sort_decorator(dir_decorator(dir))) __builtins__.fwprint = pprint try: import rlcompleter import readline except ImportError: pass readline.parse_and_bind ("tab complete") import tempfile, subprocess def get_interpframe(): return inspect.getouterframes(inspect.currentframe())[-1][0] def e(name=None): def load_file(): result = tempfile.NamedTemporaryFile(delete=False, dir=os.path.join(os.environ['HOME'], 'sandbox','unsorted'), prefix='pythonsnippets_', suffix='.py') print(__license__.encode(), '\n\n'.encode(), file=result) result.flush() return result if name is not None: def load_file(): existed = True nm = os.path.join(os.environ['HOME'], 'sandbox', '%s.py' % name) mode = 'r+' if not os.path.exists(nm): mode = 'w' existed = False result = open(nm, mode) if not existed: print(__license__.encode(), '\n\n'.encode(), file=result) result.flush() return result f = load_file() print ('editing %s, press Enter to continue...' % f.name) try: try: subprocess.call(['vim', '+31', r'+start', f.name]) except Exception as e: print (e) f.close() f = open(f.name) a = f.read() exec (a in get_interpframe().f_globals) finally: f.close() def ls(name): load_file = lambda: open('/Users/edwlan/sandbox/unsorted/pythonsnippets_%s.py' % name) try: f = load_file() except IOError: load_file = lambda: open('/Users/edwlan/sandbox/%s.py' % name) f = load_file() raw_input('loading %s, press Enter to continue...' % f.name) try: exec (f.read() in get_interpframe().f_globals) finally: f.close() try: __builtins__['e'] = e __builtins__['ls'] = ls except: __builtins__.e = e __builtins__.ls = ls #histfile = os.path.join(os.environ["HOME"], ".pyhist2.7") #try: readline.read_history_file(histfile) #except IOError: pass try: import pip try: def ip(name): try: pip.main(['install', name]) except SystemExit: pass __builtins__['ip'] = ip except: __builtins__.ip = ip except ImportError: pass #import atexit #atexit.register(readline.write_history_file, histfile)