clearcmd.py
60 lines
| 1.9 KiB
| text/x-python
|
PythonLexer
|
r245 | # -*- 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 | ||||
|
r791 | %clear shadow_compress - Compresses shadow history (to speed up ipython) | ||
%clear shadow_nuke - permanently erase all entries in shadow history | ||||
|
r245 | """ | ||
api = self.getapi() | ||||
for target in arg.split(): | ||||
if target == 'out': | ||||
|
r284 | print "Flushing output cache (%d entries)" % len(api.user_ns['_oh']) | ||
|
r245 | self.outputcache.flush() | ||
elif target == 'in': | ||||
print "Flushing input history" | ||||
from IPython import iplib | ||||
|
r795 | pc = self.outputcache.prompt_count + 1 | ||
for n in range(1, pc): | ||||
|
r245 | key = '_i'+`n` | ||
try: | ||||
del self.user_ns[key] | ||||
except: pass | ||||
|
r795 | # must be done in-place | ||
self.input_hist[:] = ['\n'] * pc | ||||
self.input_hist_raw[:] = ['\n'] * pc | ||||
|
r245 | 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() | ||||
|
r790 | |||
elif target == 'shadow_compress': | ||||
print "Compressing shadow history" | ||||
|
r789 | api.db.hcompress('shadowhist') | ||
|
r245 | |||
|
r790 | elif target == 'shadow_nuke': | ||
print "Erased all keys from shadow history " | ||||
for k in ip.db.keys('shadowhist/*'): | ||||
del ip.db[k] | ||||
|
r245 | ip.expose_magic("clear",clear_f) | ||
|
r790 | import ipy_completers | ||
|
r792 | ipy_completers.quick_completer('%clear','in out shadow_nuke shadow_compress') | ||
|
r245 | |||