@@ -654,57 +654,85 @@ REPLConsole.prototype.onKeyDown = function(ev) {
654654 }
655655
656656 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
659665 if ( ev . ctrlKey ) {
660666 this . onTabKey ( ) ;
661667 ev . preventDefault ( ) ;
662668 }
663669 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
666699 this . onTabKey ( ) ;
667700 ev . preventDefault ( ) ;
668701 break ;
669- case 13 :
670- // Enter key
702+
703+ case 13 : // Enter key
671704 this . onEnterKey ( ) ;
672705 ev . preventDefault ( ) ;
673706 break ;
674- case 80 :
675- // Ctrl-P
676- if ( ! ev . ctrlKey ) break ;
677- case 38 :
678- // Up arrow
707+
708+ case 38 : // Up arrow
679709 this . onNavigateHistory ( - 1 ) ;
680710 ev . preventDefault ( ) ;
681711 break ;
682- case 78 :
683- // Ctrl-N
684- if ( ! ev . ctrlKey ) break ;
685- case 40 :
686- // Down arrow
712+
713+ case 40 : // Down arrow
687714 this . onNavigateHistory ( 1 ) ;
688715 ev . preventDefault ( ) ;
689716 break ;
690- case 37 :
691- // Left arrow
717+
718+ case 37 : // Left arrow
692719 var caretPos = this . _caretPos > 0 ? this . _caretPos - 1 : this . _caretPos ;
693720 this . setInput ( this . _input , caretPos ) ;
694721 ev . preventDefault ( ) ;
695722 break ;
696- case 39 :
697- // Right arrow
723+
724+ case 39 : // Right arrow
698725 var length = this . _input . length ;
699726 var caretPos = this . _caretPos < length ? this . _caretPos + 1 : this . _caretPos ;
700727 this . setInput ( this . _input , caretPos ) ;
701728 ev . preventDefault ( ) ;
702729 break ;
703- case 8 :
704- // Delete
730+
731+ case 8 : // Delete
705732 this . deleteAtCurrent ( ) ;
706733 ev . preventDefault ( ) ;
707734 break ;
735+
708736 default :
709737 break ;
710738 }
@@ -757,6 +785,47 @@ REPLConsole.prototype.deleteAtCurrent = function() {
757785 }
758786} ;
759787
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+
760829/**
761830 * Insert a character at the current position.
762831 */
0 commit comments