diff --git a/IPython/html/static/notebook/js/keyboardmanager.js b/IPython/html/static/notebook/js/keyboardmanager.js index f2a1b39..b6e09f9 100644 --- a/IPython/html/static/notebook/js/keyboardmanager.js +++ b/IPython/html/static/notebook/js/keyboardmanager.js @@ -276,9 +276,17 @@ var IPython = (function (IPython) { return false; } }, + 'shift+v' : { + help : 'paste cell above', + help_index : 'eg', + handler : function (event) { + IPython.notebook.paste_cell_above(); + return false; + } + }, 'v' : { help : 'paste cell below', - help_index : 'eg', + help_index : 'eh', handler : function (event) { IPython.notebook.paste_cell_below(); return false; @@ -286,18 +294,10 @@ var IPython = (function (IPython) { }, 'd' : { help : 'delete cell (press twice)', - help_index : 'ei', + help_index : 'ej', + count: 2, handler : function (event) { - var dc = IPython.keyboard_manager._delete_count; - if (dc === 0) { - IPython.keyboard_manager._delete_count = 1; - setTimeout(function () { - IPython.keyboard_manager._delete_count = 0; - }, 800); - } else if (dc === 1) { - IPython.notebook.delete_cell(); - IPython.keyboard_manager._delete_count = 0; - } + IPython.notebook.delete_cell(); return false; } }, @@ -337,7 +337,7 @@ var IPython = (function (IPython) { return false; } }, - 't' : { + 'r' : { help : 'to raw', help_index : 'cc', handler : function (event) { @@ -442,16 +442,18 @@ var IPython = (function (IPython) { } }, 'i' : { - help : 'interrupt kernel', + help : 'interrupt kernel (press twice)', help_index : 'ha', + count: 2, handler : function (event) { IPython.notebook.kernel.interrupt(); return false; } }, - '.' : { - help : 'restart kernel', + '0' : { + help : 'restart kernel (press twice)', help_index : 'hb', + count: 2, handler : function (event) { IPython.notebook.restart_kernel(); return false; @@ -467,7 +469,7 @@ var IPython = (function (IPython) { }, 'z' : { help : 'undo last delete', - help_index : 'eh', + help_index : 'ei', handler : function (event) { IPython.notebook.undelete_cell(); return false; @@ -475,7 +477,7 @@ var IPython = (function (IPython) { }, 'shift+=' : { help : 'merge cell below', - help_index : 'ej', + help_index : 'ek', handler : function (event) { IPython.notebook.merge_cell_below(); return false; @@ -486,8 +488,10 @@ var IPython = (function (IPython) { // Shortcut manager class - var ShortcutManager = function () { + var ShortcutManager = function (delay) { this._shortcuts = {} + this._counts = {} + this.delay = delay || 800; // delay in milliseconds } ShortcutManager.prototype.help = function () { @@ -552,10 +556,12 @@ var IPython = (function (IPython) { } data.help_index = data.help_index || ''; data.help = data.help || ''; + data.count = data.count || 1; if (data.help_index === '') { data.help_index = 'zz'; } shortcut = this.normalize_shortcut(shortcut); + this._counts[shortcut] = 0; this._shortcuts[shortcut] = data; } @@ -567,16 +573,37 @@ var IPython = (function (IPython) { ShortcutManager.prototype.remove_shortcut = function (shortcut) { shortcut = this.normalize_shortcut(shortcut); + delete this._counts[shortcut]; delete this._shortcuts[shortcut]; } + ShortcutManager.prototype.count_handler = function (shortcut, event, handler) { + var that = this; + var c = this._counts; + if (c[shortcut] === 0) { + c[shortcut] = 1; + setTimeout(function () { + c[shortcut] = 0; + }, that.delay); + } else if (c[shortcut] === 1) { + c[shortcut] = 0; + return handler(event); + } + return false; + + } + ShortcutManager.prototype.call_handler = function (event) { var shortcut = this.event_to_shortcut(event); var data = this._shortcuts[shortcut]; - if (data !== undefined) { + if (data) { var handler = data['handler']; - if (handler !== undefined) { - return handler(event); + if (handler) { + if (data.count === 1) { + return handler(event); + } else if (data.count > 1) { + return this.count_handler(shortcut, event, handler); + } } } return true; @@ -589,7 +616,6 @@ var IPython = (function (IPython) { var KeyboardManager = function () { this.mode = 'command'; this.enabled = true; - this._delete_count = 0; this.bind_events(); this.command_shortcuts = new ShortcutManager(); this.command_shortcuts.add_shortcuts(default_common_shortcuts);