Skip to content

Commit 8c0ec16

Browse files
committed
Fix completion starting logic, avoid preventDefault
Fixes #245
1 parent e5987c6 commit 8c0ec16

File tree

1 file changed

+35
-15
lines changed

1 file changed

+35
-15
lines changed

resources/notebook-extension/kernel.js

+35-15
Original file line numberDiff line numberDiff line change
@@ -645,6 +645,33 @@ define(function(){
645645
return /^[A-Z0-9.:"]$/i.test(key);
646646
}
647647

648+
function _isCompletionChangeBundle(cm, changes, completer) {
649+
var close_completion = false
650+
for (var i = 0; i < changes.length; ++i) {
651+
var change = changes[i];
652+
if (change.origin === "+input") {
653+
for (var j = 0; j < change.text.length; ++j) {
654+
var t = change.text[j];
655+
for (var k = 0; k < t.length; ++k) {
656+
if (_isCompletionKey(t[k])) return true;
657+
}
658+
}
659+
} else {
660+
var line = change.from.line;
661+
var ch = change.from.ch;
662+
if (ch === 0) continue;
663+
var prevChar = cm.getRange({line: line, ch: ch - 1}, change.from);
664+
var removed = change.removed;
665+
if (removed.length > 1 || removed[0].length > 0) {
666+
if (_isCompletionKey(prevChar)) return true;
667+
else close_completion = true;
668+
}
669+
}
670+
}
671+
if (close_completion) completer.close();
672+
return false;
673+
}
674+
648675
Completer.prototype.keypress = function (event) {
649676
/**
650677
* FIXME: This is a band-aid.
@@ -719,6 +746,10 @@ define(function(){
719746
}
720747

721748
CodeCell.prototype._handle_change = function(cm, changes) {
749+
if (_isCompletionChangeBundle(cm, changes, this.completer)) {
750+
this.completer.startCompletion(false);
751+
}
752+
722753
clearAllErrors(this.notebook);
723754
this.kernel.listErrors(cm.getValue(), (msg) => {
724755
var content = msg.content;
@@ -851,22 +882,11 @@ define(function(){
851882
// is empty. In this case, let CodeMirror handle indentation.
852883
return false;
853884
} else {
854-
event.preventDefault();
855-
event.codemirrorIgnore = true;
856-
857-
var doAutoPrint = event.keyCode === keycodes.tab;
858-
859-
if (!doAutoPrint && event.key.length === 1) {
860-
editor.replaceRange(event.key, cur, cur);
861-
} else if (event.keyCode === keycodes.backspace) {
862-
var fromInd = this.code_mirror.indexFromPos(cur) - 1;
863-
864-
if (fromInd >= 0) {
865-
editor.replaceRange("", this.code_mirror.posFromIndex(fromInd), cur);
866-
}
885+
if(event.keyCode === keycodes.tab) {
886+
event.preventDefault();
887+
event.codemirrorIgnore = true;
888+
this.completer.startCompletion(true);
867889
}
868-
869-
this.completer.startCompletion(doAutoPrint);
870890
return true;
871891
}
872892
}

0 commit comments

Comments
 (0)