@@ -301,6 +301,41 @@ describe "KeymapManager", ->
301
301
getFakeClock ().tick (keymapManager .getPartialMatchTimeout ())
302
302
assert .deepEqual (events, [' viv' ])
303
303
304
+ it " disables partially-matching bindings and replays the queued keystrokes if the ::partialMatchTimeout expires, even when the exact match contains the control or meta key" , ->
305
+ keymapManager .add ' test' ,
306
+ ' .workspace' :
307
+ ' ctrl-d o g' : ' control-dog'
308
+ ' ctrl-d' : ' control-d'
309
+ workspace .addEventListener ' control-dog' , -> events .push (' control-dog' )
310
+ workspace .addEventListener ' control-d' , -> events .push (' control-d' )
311
+ keymapManager .handleKeyboardEvent (buildKeydownEvent (key : ' d' , ctrlKey : true , target : editor))
312
+ assert .deepEqual (events, [])
313
+ getFakeClock ().tick (keymapManager .getPartialMatchTimeout ())
314
+ assert .deepEqual (events, [' control-d' ])
315
+
316
+ # Also make sure we canceled the arpeggio.
317
+ keymapManager .handleKeyboardEvent (buildKeydownEvent (key : ' o' , target : editor))
318
+ keymapManager .handleKeyboardEvent (buildKeydownEvent (key : ' g' , target : editor))
319
+ getFakeClock ().tick (keymapManager .getPartialMatchTimeout ())
320
+ assert .deepEqual (events, [' control-d' ])
321
+
322
+ # Alright, now let's just double check with meta instead of control.
323
+ events = []
324
+ keymapManager .add ' test' ,
325
+ ' .workspace' :
326
+ ' cmd-d o g' : ' meta-dog'
327
+ ' cmd-d' : ' meta-d'
328
+ workspace .addEventListener ' meta-dog' , -> events .push (' meta-dog' )
329
+ workspace .addEventListener ' meta-d' , -> events .push (' meta-d' )
330
+ keymapManager .handleKeyboardEvent (buildKeydownEvent (key : ' d' , metaKey : true , target : editor))
331
+ assert .deepEqual (events, [])
332
+ getFakeClock ().tick (keymapManager .getPartialMatchTimeout ())
333
+ assert .deepEqual (events, [' meta-d' ])
334
+ keymapManager .handleKeyboardEvent (buildKeydownEvent (key : ' o' , target : editor))
335
+ keymapManager .handleKeyboardEvent (buildKeydownEvent (key : ' g' , target : editor))
336
+ getFakeClock ().tick (keymapManager .getPartialMatchTimeout ())
337
+ assert .deepEqual (events, [' meta-d' ])
338
+
304
339
it " does not enter a pending state or prevent the default action if the matching binding's command is 'native!'" , ->
305
340
keymapManager .add ' test' , ' .workspace' : ' v' : ' native!'
306
341
event = buildKeydownEvent (key : ' v' , target : editor)
0 commit comments