@@ -654,57 +654,85 @@ REPLConsole.prototype.onKeyDown = function(ev) {
654
654
}
655
655
656
656
switch ( ev . keyCode ) {
657
- case 69 :
658
- // Ctrl-E
657
+ case 65 : // Ctrl-A
658
+ if ( ev . ctrlKey ) {
659
+ this . setInput ( this . _input , 0 ) ;
660
+ ev . preventDefault ( ) ;
661
+ }
662
+ break ;
663
+
664
+ case 69 : // Ctrl-E
659
665
if ( ev . ctrlKey ) {
660
666
this . onTabKey ( ) ;
661
667
ev . preventDefault ( ) ;
662
668
}
663
669
break ;
664
- case 9 :
665
- // Tab
670
+
671
+ case 87 : // Ctrl-W
672
+ if ( ev . ctrlKey ) {
673
+ this . deleteWord ( ) ;
674
+ ev . preventDefault ( ) ;
675
+ }
676
+ break ;
677
+
678
+ case 85 : // Ctrl-U
679
+ if ( ev . ctrlKey ) {
680
+ this . deleteLine ( ) ;
681
+ ev . preventDefault ( ) ;
682
+ }
683
+ break ;
684
+
685
+ case 69 : // Ctrl-E
686
+ if ( ev . ctrlKey ) {
687
+ this . onTabKey ( ) ;
688
+ ev . preventDefault ( ) ;
689
+ }
690
+ break ;
691
+
692
+ case 80 : // Ctrl-P
693
+ if ( ! ev . ctrlKey ) break ;
694
+
695
+ case 78 : // Ctrl-N
696
+ if ( ! ev . ctrlKey ) break ;
697
+
698
+ case 9 : // Tab
666
699
this . onTabKey ( ) ;
667
700
ev . preventDefault ( ) ;
668
701
break ;
669
- case 13 :
670
- // Enter key
702
+
703
+ case 13 : // Enter key
671
704
this . onEnterKey ( ) ;
672
705
ev . preventDefault ( ) ;
673
706
break ;
674
- case 80 :
675
- // Ctrl-P
676
- if ( ! ev . ctrlKey ) break ;
677
- case 38 :
678
- // Up arrow
707
+
708
+ case 38 : // Up arrow
679
709
this . onNavigateHistory ( - 1 ) ;
680
710
ev . preventDefault ( ) ;
681
711
break ;
682
- case 78 :
683
- // Ctrl-N
684
- if ( ! ev . ctrlKey ) break ;
685
- case 40 :
686
- // Down arrow
712
+
713
+ case 40 : // Down arrow
687
714
this . onNavigateHistory ( 1 ) ;
688
715
ev . preventDefault ( ) ;
689
716
break ;
690
- case 37 :
691
- // Left arrow
717
+
718
+ case 37 : // Left arrow
692
719
var caretPos = this . _caretPos > 0 ? this . _caretPos - 1 : this . _caretPos ;
693
720
this . setInput ( this . _input , caretPos ) ;
694
721
ev . preventDefault ( ) ;
695
722
break ;
696
- case 39 :
697
- // Right arrow
723
+
724
+ case 39 : // Right arrow
698
725
var length = this . _input . length ;
699
726
var caretPos = this . _caretPos < length ? this . _caretPos + 1 : this . _caretPos ;
700
727
this . setInput ( this . _input , caretPos ) ;
701
728
ev . preventDefault ( ) ;
702
729
break ;
703
- case 8 :
704
- // Delete
730
+
731
+ case 8 : // Delete
705
732
this . deleteAtCurrent ( ) ;
706
733
ev . preventDefault ( ) ;
707
734
break ;
735
+
708
736
default :
709
737
break ;
710
738
}
@@ -757,6 +785,47 @@ REPLConsole.prototype.deleteAtCurrent = function() {
757
785
}
758
786
} ;
759
787
788
+ /**
789
+ * Deletes the current line.
790
+ */
791
+ REPLConsole . prototype . deleteLine = function ( ) {
792
+ if ( this . _caretPos > 0 ) {
793
+ this . setInput ( "" , 0 ) ;
794
+
795
+ if ( ! this . _input ) {
796
+ this . autocomplete && this . autocomplete . cancel ( ) ;
797
+ this . autocomplete = false ;
798
+ }
799
+ }
800
+ } ;
801
+
802
+ /**
803
+ * Deletes the current word.
804
+ */
805
+ REPLConsole . prototype . deleteWord = function ( ) {
806
+ if ( this . _caretPos > 0 ) {
807
+ var i = 1 , current = this . _caretPos ;
808
+ while ( this . _input [ current - i ++ ] == " " ) ;
809
+
810
+ var deleteIndex = 0 ;
811
+ for ( ; current - i > 0 ; i ++ ) {
812
+ if ( this . _input [ current - i ] == " " ) {
813
+ deleteIndex = current - i ;
814
+ break ;
815
+ }
816
+ }
817
+
818
+ var before = this . _input . substring ( 0 , deleteIndex ) ;
819
+ var after = this . _input . substring ( current , this . _input . length ) ;
820
+ this . setInput ( before + after , deleteIndex ) ;
821
+
822
+ if ( ! this . _input ) {
823
+ this . autocomplete && this . autocomplete . cancel ( ) ;
824
+ this . autocomplete = false ;
825
+ }
826
+ }
827
+ } ;
828
+
760
829
/**
761
830
* Insert a character at the current position.
762
831
*/
0 commit comments