diff --git a/IPython/html/static/notebook/js/keyboardmanager.js b/IPython/html/static/notebook/js/keyboardmanager.js
index b82980c..d9c3145 100644
--- a/IPython/html/static/notebook/js/keyboardmanager.js
+++ b/IPython/html/static/notebook/js/keyboardmanager.js
@@ -84,7 +84,6 @@ var IPython = (function (IPython) {
help_index : 'aa',
handler : function (event) {
IPython.notebook.command_mode();
- IPython.notebook.focus_cell();
return false;
}
},
@@ -93,7 +92,6 @@ var IPython = (function (IPython) {
help_index : 'ab',
handler : function (event) {
IPython.notebook.command_mode();
- IPython.notebook.focus_cell();
return false;
}
},
diff --git a/IPython/html/static/notebook/js/notebook.js b/IPython/html/static/notebook/js/notebook.js
index d49fd49..c1e6f9b 100644
--- a/IPython/html/static/notebook/js/notebook.js
+++ b/IPython/html/static/notebook/js/notebook.js
@@ -116,11 +116,11 @@ var IPython = (function (IPython) {
});
$([IPython.events]).on('edit_mode.Cell', function (event, data) {
- that.handle_edit_mode(that.find_cell_index(data.cell));
+ that.handle_edit_mode(data.cell);
});
$([IPython.events]).on('command_mode.Cell', function (event, data) {
- that.command_mode();
+ that.handle_command_mode(data.cell);
});
$([IPython.events]).on('status_autorestarting.Kernel', function () {
@@ -519,20 +519,15 @@ var IPython = (function (IPython) {
};
/**
- * Make the notebook enter command mode.
+ * Handle when a a cell blurs and the notebook should enter command mode.
*
- * @method command_mode
+ * @method handle_command_mode
+ * @param [cell] {Cell} Cell to enter command mode on.
**/
- Notebook.prototype.command_mode = function () {
- // Make sure there isn't an edit mode cell lingering around.
- var cell = this.get_cell(this.get_edit_index());
- if (cell) {
- cell.command_mode();
- }
-
- // Notify the keyboard manager if this is a change of mode for the
- // notebook as a whole.
+ Notebook.prototype.handle_command_mode = function (cell) {
+ if (cell === null) { return; } // TODO: do I really need this?
if (this.mode !== 'command') {
+ cell.command_mode(); // TODO: is this OK here?
this.mode = 'command';
$([IPython.events]).trigger('command_mode.Notebook');
IPython.keyboard_manager.command_mode();
@@ -540,19 +535,28 @@ var IPython = (function (IPython) {
};
/**
+ * Make the notebook enter command mode.
+ *
+ * @method command_mode
+ **/
+ Notebook.prototype.command_mode = function () {
+ var cell = this.get_cell(this.get_edit_index());
+ if (cell && this.mode !== 'command') {
+ // We don't call cell.command_mode, but rather call cell.focus_cell()
+ // which will blur and CM editor and trigger the call to
+ // handle_command_mode.
+ cell.focus_cell();
+ }
+ };
+
+ /**
* Handle when a cell fires it's edit_mode event.
*
* @method handle_edit_mode
- * @param [index] {int} Cell index to select. If no index is provided,
- * the current selected cell is used.
+ * @param [cell] {Cell} Cell to enter edit mode on.
**/
- Notebook.prototype.handle_edit_mode = function (index) {
- // Make sure the cell exists.
- var cell = this.get_cell(index);
- if (cell === null) { return; }
-
- // Set the cell to edit mode and notify the keyboard manager if this
- // is a change of mode for the notebook as a whole.
+ Notebook.prototype.handle_edit_mode = function (cell) {
+ if (cell === null) { return; } // TODO: do I really need this?
if (this.mode !== 'edit') {
cell.edit_mode();
this.mode = 'edit';
@@ -1449,7 +1453,6 @@ var IPython = (function (IPython) {
var cell_index = this.find_cell_index(cell);
cell.execute();
- cell.focus_cell();
this.command_mode();
this.set_dirty(true);
};
@@ -1501,7 +1504,6 @@ var IPython = (function (IPython) {
}
this.select(cell_index+1);
- this.get_cell(cell_index+1).focus_cell();
this.command_mode();
this.set_dirty(true);
};
@@ -1972,7 +1974,7 @@ var IPython = (function (IPython) {
this.edit_mode(0);
} else {
this.select(0);
- this.command_mode();
+ this.handle_command_mode(this.get_cell(0));
}
this.set_dirty(false);
this.scroll_to_top();