diff --git a/IPython/frontend/html/notebook/static/js/codecell.js b/IPython/frontend/html/notebook/static/js/codecell.js index ea34719..9cf2ba9 100644 --- a/IPython/frontend/html/notebook/static/js/codecell.js +++ b/IPython/frontend/html/notebook/static/js/codecell.js @@ -37,7 +37,6 @@ var IPython = (function (IPython) { this.kernel = kernel || null; this.code_mirror = null; this.input_prompt_number = null; - this.tooltip_on_tab = true; this.collapsed = false; this.default_mode = 'python'; IPython.Cell.apply(this, arguments); @@ -48,7 +47,6 @@ var IPython = (function (IPython) { ); }; - CodeCell.prototype = new IPython.Cell(); /** @@ -142,6 +140,17 @@ var IPython = (function (IPython) { } else { return true; }; + } else if (event.keyCode === key.TAB && event.type == 'keydown' && event.shiftKey) { + if (editor.somethingSelected()){ + var anchor = editor.getCursor("anchor"); + var head = editor.getCursor("head"); + if( anchor.line != head.line){ + return false; + } + } + IPython.tooltip.request(that); + event.stop(); + return true; } else if (event.keyCode === key.TAB && event.type == 'keydown') { // Tab completion. //Do not trim here because of tooltip @@ -151,7 +160,7 @@ var IPython = (function (IPython) { // Don't autocomplete if the part of the line before the cursor // is empty. In this case, let CodeMirror handle indentation. return false; - } else if ((pre_cursor.substr(-1) === "("|| pre_cursor.substr(-1) === " ") && that.tooltip_on_tab ) { + } else if ((pre_cursor.substr(-1) === "("|| pre_cursor.substr(-1) === " ") && IPython.config.tooltip_on_tab ) { IPython.tooltip.request(that); // Prevent the event from bubbling up. event.stop(); diff --git a/IPython/frontend/html/notebook/static/js/config.js b/IPython/frontend/html/notebook/static/js/config.js index 106ae32..432fb2b 100644 --- a/IPython/frontend/html/notebook/static/js/config.js +++ b/IPython/frontend/html/notebook/static/js/config.js @@ -22,7 +22,7 @@ var IPython = (function (IPython) { * @static * **/ - var config = { + var default_config = { /** * Dictionary of object to autodetect highlight mode for code cell. * Item of the dictionnary should take the form : @@ -63,10 +63,14 @@ var IPython = (function (IPython) { */ raw_cell_highlight : { 'diff' :{'reg':[/^diff/]} - } + }, + + tooltip_on_tab : true, }; - IPython.config = config; + // use the same method to merge user configuration + IPython.config = {}; + $.extend(IPython.config, default_config); return IPython; diff --git a/IPython/frontend/html/notebook/static/js/tooltip.js b/IPython/frontend/html/notebook/static/js/tooltip.js index affc2cc..2060628 100644 --- a/IPython/frontend/html/notebook/static/js/tooltip.js +++ b/IPython/frontend/html/notebook/static/js/tooltip.js @@ -228,6 +228,10 @@ var IPython = (function (IPython) { ch: 0 }, cursor).trim(); + if(editor.somethingSelected()){ + text = editor.getSelection(); + } + // need a permanent handel to code_mirror for future auto recall this.code_mirror = editor; @@ -288,7 +292,15 @@ var IPython = (function (IPython) { var w = $(this.code_mirror.getScrollerElement()).width(); // ofset of the editor var o = $(this.code_mirror.getScrollerElement()).offset(); - var pos = this.code_mirror.cursorCoords(); + + // whatever anchor/head order but arrow at mid x selection + var anchor = this.code_mirror.cursorCoords(false); + var head = this.code_mirror.cursorCoords(true); + var pos = {}; + pos.y = head.y + pos.yBot = head.yBot + pos.x = (head.x+anchor.x)/2; + var xinit = pos.x; var xinter = o.left + (xinit - o.left) / w * (w - 450); var posarrowleft = xinit - xinter;