Skip to content

Commit 1f99e1e

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

File tree

1 file changed

+39
-16
lines changed

1 file changed

+39
-16
lines changed

resources/notebook-extension/kernel.js

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

648+
function _processCompletionOnChange(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])) {
657+
completer.startCompletion(false);
658+
return;
659+
}
660+
}
661+
}
662+
} else {
663+
var line = change.from.line;
664+
var ch = change.from.ch;
665+
if (ch === 0) continue;
666+
var removed = change.removed;
667+
if (removed.length > 1 || removed[0].length > 0) {
668+
var prevChar = cm.getRange({line: line, ch: ch - 1}, change.from);
669+
if (_isCompletionKey(prevChar)) {
670+
completer.startCompletion(false);
671+
return;
672+
}
673+
else close_completion = true;
674+
}
675+
}
676+
}
677+
if (close_completion) completer.close();
678+
}
679+
648680
Completer.prototype.keypress = function (event) {
649681
/**
650682
* FIXME: This is a band-aid.
@@ -658,7 +690,7 @@ define(function(){
658690
var code = event.keyCode;
659691

660692
// don't handle keypress if it's not a character (arrows on FF)
661-
// or ENTER/TAB
693+
// or ENTER/TAB/BACKSPACE
662694
if (event.charCode === 0 ||
663695
code == keycodes.tab ||
664696
code == keycodes.enter ||
@@ -719,6 +751,8 @@ define(function(){
719751
}
720752

721753
CodeCell.prototype._handle_change = function(cm, changes) {
754+
_processCompletionOnChange(cm, changes, this.completer)
755+
722756
clearAllErrors(this.notebook);
723757
this.kernel.listErrors(cm.getValue(), (msg) => {
724758
var content = msg.content;
@@ -851,22 +885,11 @@ define(function(){
851885
// is empty. In this case, let CodeMirror handle indentation.
852886
return false;
853887
} 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-
}
888+
if (event.keyCode === keycodes.tab) {
889+
event.preventDefault();
890+
event.codemirrorIgnore = true;
891+
this.completer.startCompletion(true);
867892
}
868-
869-
this.completer.startCompletion(doAutoPrint);
870893
return true;
871894
}
872895
}

0 commit comments

Comments
 (0)