From 5de866c9f85c3521a1cb462b6403e58a58f1bb6e Mon Sep 17 00:00:00 2001 From: Benjamin Fischer Date: Sat, 1 Aug 2020 16:41:54 +0200 Subject: [PATCH] fix(prompt): pasting clipboard into prompt returns corrupted data (#54) --- packages/prompt/lib/generic-prompt.ts | 10 +++++++--- packages/prompt/lib/read-line.ts | 8 ++++---- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/packages/prompt/lib/generic-prompt.ts b/packages/prompt/lib/generic-prompt.ts index 8f2799c2..242014e4 100644 --- a/packages/prompt/lib/generic-prompt.ts +++ b/packages/prompt/lib/generic-prompt.ts @@ -132,13 +132,17 @@ export abstract class GenericPrompt> return this.validateValue( value ); } - const event: KeyEvent | undefined = await readKeySync(); + const events: KeyEvent[] = await readKeySync(); - if ( !event ) { + if ( !events.length ) { return false; } - const done: boolean = await this.handleEvent( event ); + let done: boolean = false; + + for ( const event of events ) { + done = await this.handleEvent( event ); + } if ( done ) { return this.validateValue( this.getValue() ); diff --git a/packages/prompt/lib/read-line.ts b/packages/prompt/lib/read-line.ts index 0f70e549..3daa9739 100644 --- a/packages/prompt/lib/read-line.ts +++ b/packages/prompt/lib/read-line.ts @@ -11,9 +11,9 @@ export async function readCharSync(): Promise { const buffer = new Uint8Array( 8 ); - Deno.setRaw( 0, true ); + Deno.setRaw( Deno.stdin.rid, true ); const nread: number | null = await Deno.stdin.read( buffer ); - Deno.setRaw( 0, false ); + Deno.setRaw( Deno.stdin.rid, false ); if ( nread === null ) { return; @@ -22,9 +22,9 @@ export async function readCharSync(): Promise { return buffer.subarray( 0, nread ); } -export async function readKeySync(): Promise { +export async function readKeySync(): Promise { const data = await readCharSync(); - return data && KeyCode.parse( data ); + return data ? KeyCode.parse( data ) : []; }