@@ -645,6 +645,33 @@ define(function(){
645
645
return / ^ [ A - Z 0 - 9 . : " ] $ / i. test ( key ) ;
646
646
}
647
647
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
+
648
675
Completer . prototype . keypress = function ( event ) {
649
676
/**
650
677
* FIXME: This is a band-aid.
@@ -719,6 +746,10 @@ define(function(){
719
746
}
720
747
721
748
CodeCell . prototype . _handle_change = function ( cm , changes ) {
749
+ if ( _isCompletionChangeBundle ( cm , changes , this . completer ) ) {
750
+ this . completer . startCompletion ( false ) ;
751
+ }
752
+
722
753
clearAllErrors ( this . notebook ) ;
723
754
this . kernel . listErrors ( cm . getValue ( ) , ( msg ) => {
724
755
var content = msg . content ;
@@ -851,22 +882,11 @@ define(function(){
851
882
// is empty. In this case, let CodeMirror handle indentation.
852
883
return false ;
853
884
} 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 ) ;
867
889
}
868
-
869
- this . completer . startCompletion ( doAutoPrint ) ;
870
890
return true ;
871
891
}
872
892
}
0 commit comments