@@ -7,19 +7,22 @@ const xterm = process.env.TERM === 'xterm-256color'
77const charOffset = appleTerm || xterm ? - 1 : 0
88
99const checkChar = ( char ) => new Promise ( ( resolve , reject ) => {
10- if ( ! ( process . stdin . isTTY && process . stdin . isTTY ) ) return resolve ( false )
11- setTimeout ( ( ) => resolve ( false ) , 250 )
10+ if ( ! process . stdin . isTTY ) return resolve ( false )
1211 let clean = false
1312
1413 const expect = char . length + 1
1514 const rawMode = process . stdin . isRaw
16- const cleanup = ( supported ) => {
15+ const cleanup = ( supported , force ) => {
1716 if ( clean ) return
1817
1918 clean = true
2019
2120 process . stdin . removeListener ( 'data' , checker )
22- process . stdin . setRawMode ( rawMode )
21+
22+ if ( ! force ) {
23+ process . stdin . setRawMode ( rawMode )
24+ }
25+
2326 process . stdin . unref ( )
2427 clearTimeout ( timeout )
2528
@@ -34,14 +37,15 @@ const checkChar = (char) => new Promise((resolve, reject) => {
3437 return cleanup ( val === expect || ( ( val + charOffset ) === expect ) )
3538 }
3639
40+ const timeout = setTimeout ( ( ) => cleanup ( false , true ) , 500 )
41+
3742 readline . clearLine ( process . stdout , 0 )
3843 readline . cursorTo ( process . stdout , 0 )
3944
4045 process . stdin . setRawMode ( true )
4146 process . stdin . on ( 'data' , checker )
4247 process . stdout . write ( char )
4348 process . stdout . write ( scanner )
44- const timeout = setTimeout ( ( ) => cleanup ( false ) , 500 )
4549} )
4650
4751module . exports = { checkChar, charOffset : Math . abs ( charOffset ) }
0 commit comments