@@ -804,24 +804,29 @@ function emitKeypressEvents(stream) {
804804 stream . _emitKeypress = true ;
805805
806806 function onData ( b ) {
807- if ( stream . listeners ( 'keypress' ) . length > 0 ) {
808- emitKey ( stream , b ) ;
809- } else {
810- // Nobody's watching anyway
811- stream . removeListener ( 'data' , onData ) ;
812- stream . on ( 'newListener' , onNewListener ) ;
813- }
807+ emitKey ( stream , b ) ;
814808 }
815809
816810 function onNewListener ( event ) {
817811 if ( event == 'keypress' ) {
818812 stream . on ( 'data' , onData ) ;
813+ stream . on ( 'removeListener' , onRemovedListener ) ;
819814 stream . removeListener ( 'newListener' , onNewListener ) ;
820815 }
821816 }
817+
818+ function onRemovedListener ( event ) {
819+ if ( event == 'keypress' && stream . listeners ( 'keypress' ) . length == 0 ) {
820+ // Nobody's watching anyway
821+ stream . removeListener ( 'data' , onData ) ;
822+ stream . removeListener ( 'removeListener' , onRemovedListener ) ;
823+ stream . on ( 'newListener' , onNewListener ) ;
824+ }
825+ }
822826
823827 if ( stream . listeners ( 'keypress' ) . length > 0 ) {
824828 stream . on ( 'data' , onData ) ;
829+ stream . on ( 'removeListener' , onRemovedListener ) ;
825830 } else {
826831 stream . on ( 'newListener' , onNewListener ) ;
827832 }
0 commit comments