Permalink
Browse files

Merge pull request #893 from minrk/clearoutput

Adding clear_output to kernel and HTML notebook.

This enables the clearing of output during the execution of a cell. It can be used for simple forms of animation in the notebook.
  • Loading branch information...
2 parents 71d3d18 + 0a8f09f commit c99b9fd7d3e48000ef54148ff11e142b2aee0028 @fperez fperez committed Oct 19, 2011
View
@@ -381,3 +381,27 @@ def _repr_jpeg_(self):
def _find_ext(self, s):
return unicode(s.split('.')[-1].lower())
+
+
+def clear_output(stdout=True, stderr=True, other=True):
+ """Clear the output of the current cell receiving output.
+
+ Optionally, each of stdout/stderr or other non-stream data (e.g. anything
+ produced by display()) can be excluded from the clear event.
+
+ By default, everything is cleared.
+
+ Parameters
+ ----------
+ stdout : bool [default: True]
+ Whether to clear stdout.
+ stderr : bool [default: True]
+ Whether to clear stderr.
+ other : bool [default: True]
+ Whether to clear everything else that is not stdout/stderr
+ (e.g. figures,images,HTML, any result of display()).
+ """
+ from IPython.core.interactiveshell import InteractiveShell
+ InteractiveShell.instance().display_pub.clear_output(
+ stdout=stdout, stderr=stderr, other=other,
+ )
@@ -104,6 +104,10 @@ def publish(self, source, data, metadata=None):
if data.has_key('text/plain'):
print(data['text/plain'], file=io.stdout)
+ def clear_output(self, stdout=True, stderr=True, other=True):
+ """Clear the output of the cell receiving output."""
+ pass
+
def publish_display_data(source, data, metadata=None):
"""Publish data and metadata to all frontends.
@@ -364,9 +364,41 @@ var IPython = (function (IPython) {
}
- CodeCell.prototype.clear_output = function () {
- this.element.find("div.output").html("");
- this.outputs = [];
+ CodeCell.prototype.clear_output = function (stdout, stderr, other) {
+ var output_div = this.element.find("div.output");
+ if (stdout && stderr && other){
+ // clear all, no need for logic
+ output_div.html("");
+ this.outputs = [];
+ return;
+ }
+ // remove html output
+ // each output_subarea that has an identifying class is in an output_area
+ // which is the element to be removed.
+ if (stdout){
+ output_div.find("div.output_stdout").parent().remove();
+ }
+ if (stderr){
+ output_div.find("div.output_stderr").parent().remove();
+ }
+ if (other){
+ output_div.find("div.output_subarea").not("div.output_stderr").not("div.output_stdout").parent().remove();
+ }
+
+ // remove cleared outputs from JSON list:
+ for (var i = this.outputs.length - 1; i >= 0; i--){
+ var out = this.outputs[i];
+ var output_type = out.output_type;
+ if (output_type == "display_data" && other){
+ this.outputs.splice(i,1);
+ }else if (output_type == "stream"){
+ if (stdout && out.stream == "stdout"){
+ this.outputs.splice(i,1);
+ }else if (stderr && out.stream == "stderr"){
+ this.outputs.splice(i,1);
+ }
+ }
+ }
};
@@ -627,7 +627,7 @@ var IPython = (function (IPython) {
var cells = this.cells();
for (var i=0; i<ncells; i++) {
if (cells[i] instanceof IPython.CodeCell) {
- cells[i].clear_output();
+ cells[i].clear_output(true,true,true);
}
};
this.dirty = true;
@@ -733,7 +733,9 @@ var IPython = (function (IPython) {
} else if (content.execution_state === 'dead') {
this.handle_status_dead();
};
- }
+ } else if (msg_type === 'clear_output') {
+ cell.clear_output(content.stdout, content.stderr, content.other);
+ };
};
@@ -823,7 +825,7 @@ var IPython = (function (IPython) {
var cell = that.selected_cell();
var cell_index = that.find_cell_index(cell);
if (cell instanceof IPython.CodeCell) {
- cell.clear_output();
+ cell.clear_output(true, true, true);
var code = cell.get_code();
var msg_id = that.kernel.execute(cell.get_code());
that.msg_cell_map[msg_id] = cell.cell_id;
View
@@ -80,6 +80,12 @@ def publish(self, source, data, metadata=None):
parent=self.parent_header
)
+ def clear_output(self, stdout=True, stderr=True, other=True):
+ content = dict(stdout=stdout, stderr=stderr, other=other)
+ self.session.send(
+ self.pub_socket, u'clear_output', content,
+ parent=self.parent_header
+ )
class ZMQInteractiveShell(InteractiveShell):
"""A subclass of InteractiveShell for ZMQ."""
Oops, something went wrong.

0 comments on commit c99b9fd

Please sign in to comment.