# -*- coding: utf-8 -*- """ IPython extension: add %clear magic """ import IPython.ipapi import gc ip = IPython.ipapi.get() def clear_f(self,arg): """ Clear various data (e.g. stored history data) %clear out - clear output history %clear in - clear input history %clear shadow_compress - Compresses shadow history (to speed up ipython) %clear shadow_nuke - permanently erase all entries in shadow history %clear dhist - clear dir history """ api = self.getapi() for target in arg.split(): if target == 'out': print "Flushing output cache (%d entries)" % len(api.user_ns['_oh']) self.outputcache.flush() elif target == 'in': print "Flushing input history" from IPython import iplib pc = self.outputcache.prompt_count + 1 for n in range(1, pc): key = '_i'+`n` try: del self.user_ns[key] except: pass # must be done in-place self.input_hist[:] = ['\n'] * pc self.input_hist_raw[:] = ['\n'] * pc elif target == 'array': try: pylab=ip.IP.pylab for x in self.user_ns.keys(): if isinstance(self.user_ns[x],pylab.arraytype): del self.user_ns[x] except AttributeError: print "Clear array only available in -pylab mode" gc.collect() elif target == 'shadow_compress': print "Compressing shadow history" api.db.hcompress('shadowhist') elif target == 'shadow_nuke': print "Erased all keys from shadow history " for k in ip.db.keys('shadowhist/*'): del ip.db[k] elif target == 'dhist': print "Clearing directory history" del ip.user_ns['_dh'][:] ip.expose_magic("clear",clear_f) import ipy_completers ipy_completers.quick_completer( '%clear','in out shadow_nuke shadow_compress dhist')