clearcmd.py
87 lines
| 2.6 KiB
| text/x-python
|
PythonLexer
vivainio
|
r245 | # -*- coding: utf-8 -*- | ||
""" IPython extension: add %clear magic """ | ||||
Brian Granger
|
r2027 | from IPython.core import ipapi | ||
vivainio
|
r245 | import gc | ||
Brian Granger
|
r2027 | ip = ipapi.get() | ||
vivainio
|
r245 | |||
def clear_f(self,arg): | ||||
""" Clear various data (e.g. stored history data) | ||||
%clear in - clear input history | ||||
Fernando Perez
|
r1844 | %clear out - clear output history | ||
vivainio
|
r791 | %clear shadow_compress - Compresses shadow history (to speed up ipython) | ||
%clear shadow_nuke - permanently erase all entries in shadow history | ||||
vivainio
|
r839 | %clear dhist - clear dir history | ||
Fernando Perez
|
r1844 | %clear array - clear only variables that are NumPy arrays | ||
Examples: | ||||
In [1]: clear in | ||||
Flushing input history | ||||
In [2]: clear shadow_compress | ||||
Compressing shadow history | ||||
In [3]: clear shadow_nuke | ||||
Erased all keys from shadow history | ||||
In [4]: clear dhist | ||||
Clearing directory history | ||||
vivainio
|
r245 | """ | ||
api = self.getapi() | ||||
Fernando Perez
|
r1844 | user_ns = self.user_ns # local lookup, heavily used | ||
vivainio
|
r245 | for target in arg.split(): | ||
Fernando Perez
|
r1844 | |||
vivainio
|
r245 | if target == 'out': | ||
Fernando Perez
|
r1844 | print "Flushing output cache (%d entries)" % len(user_ns['_oh']) | ||
vivainio
|
r245 | self.outputcache.flush() | ||
Fernando Perez
|
r1844 | |||
vivainio
|
r245 | elif target == 'in': | ||
print "Flushing input history" | ||||
vivainio
|
r795 | pc = self.outputcache.prompt_count + 1 | ||
for n in range(1, pc): | ||||
vivainio
|
r245 | key = '_i'+`n` | ||
Fernando Perez
|
r1844 | user_ns.pop(key,None) | ||
vivainio
|
r245 | try: | ||
Fernando Perez
|
r1844 | del user_ns[key] | ||
vivainio
|
r245 | except: pass | ||
vivainio
|
r795 | # must be done in-place | ||
self.input_hist[:] = ['\n'] * pc | ||||
self.input_hist_raw[:] = ['\n'] * pc | ||||
Fernando Perez
|
r1844 | |||
vivainio
|
r245 | elif target == 'array': | ||
Fernando Perez
|
r1844 | # Support cleaning up numpy arrays | ||
vivainio
|
r245 | try: | ||
Fernando Perez
|
r1844 | from numpy import ndarray | ||
# This must be done with items and not iteritems because we're | ||||
# going to modify the dict in-place. | ||||
for x,val in user_ns.items(): | ||||
if isinstance(val,ndarray): | ||||
del user_ns[x] | ||||
vivainio
|
r245 | except AttributeError: | ||
Fernando Perez
|
r1844 | print "Clear array only works if Numpy is available." | ||
vivainio
|
r790 | |||
elif target == 'shadow_compress': | ||||
print "Compressing shadow history" | ||||
vivainio
|
r789 | api.db.hcompress('shadowhist') | ||
vivainio
|
r245 | |||
vivainio
|
r790 | elif target == 'shadow_nuke': | ||
print "Erased all keys from shadow history " | ||||
for k in ip.db.keys('shadowhist/*'): | ||||
del ip.db[k] | ||||
Fernando Perez
|
r1844 | |||
vivainio
|
r839 | elif target == 'dhist': | ||
print "Clearing directory history" | ||||
Fernando Perez
|
r1844 | del user_ns['_dh'][:] | ||
vivainio
|
r839 | |||
Fernando Perez
|
r1844 | gc.collect() | ||
# Activate the extension | ||||
vivainio
|
r245 | ip.expose_magic("clear",clear_f) | ||
vivainio
|
r790 | import ipy_completers | ||
vivainio
|
r839 | ipy_completers.quick_completer( | ||
Fernando Perez
|
r1844 | '%clear','in out shadow_nuke shadow_compress dhist') | ||