@@ -11,7 +11,13 @@ const height = 800;
1111const vscodeToPuppeteerKey = {
1212 cmd : 'Meta' ,
1313 ctrl : 'Control' ,
14- enter : 'Enter'
14+ enter : 'Enter' ,
15+ escape : 'Escape' ,
16+ right : 'ArrowRight' ,
17+ up : 'ArrowUp' ,
18+ down : 'ArrowDown' ,
19+ left : 'ArrowLeft' ,
20+ home : 'Home'
1521} ;
1622
1723function buildDriver ( browser : puppeteer . Browser , page : puppeteer . Page ) : IDriver {
@@ -24,18 +30,26 @@ function buildDriver(browser: puppeteer.Browser, page: puppeteer.Page): IDriver
2430 reloadWindow : ( windowId ) => Promise . resolve ( ) ,
2531 exitApplication : ( ) => browser . close ( ) ,
2632 dispatchKeybinding : async ( windowId , keybinding ) => {
27- const keys = keybinding . split ( '+' ) ;
28- const keysDown : string [ ] = [ ] ;
29- for ( let i = 0 ; i < keys . length ; i ++ ) {
30- if ( keys [ i ] in vscodeToPuppeteerKey ) {
31- keys [ i ] = vscodeToPuppeteerKey [ keys [ i ] ] ;
33+ const chords = keybinding . split ( ' ' ) ;
34+ chords . forEach ( async ( chord , index ) => {
35+ if ( index > 0 ) {
36+ await timeout ( 100 ) ;
3237 }
33- await page . keyboard . down ( keys [ i ] ) ;
34- keysDown . push ( keys [ i ] ) ;
35- }
36- while ( keysDown . length > 0 ) {
37- await page . keyboard . up ( keysDown . pop ( ) ! ) ;
38- }
38+ const keys = chord . split ( '+' ) ;
39+ const keysDown : string [ ] = [ ] ;
40+ for ( let i = 0 ; i < keys . length ; i ++ ) {
41+ if ( keys [ i ] in vscodeToPuppeteerKey ) {
42+ keys [ i ] = vscodeToPuppeteerKey [ keys [ i ] ] ;
43+ }
44+ await page . keyboard . down ( keys [ i ] ) ;
45+ keysDown . push ( keys [ i ] ) ;
46+ }
47+ while ( keysDown . length > 0 ) {
48+ await page . keyboard . up ( keysDown . pop ( ) ! ) ;
49+ }
50+ } ) ;
51+
52+ await timeout ( 100 ) ;
3953 } ,
4054 click : async ( windowId , selector , xoffset , yoffset ) => {
4155 const { x, y } = await page . evaluate ( `
0 commit comments