Handle multi-keystroke keybinding

Previously for a binding like `meta-x meta-y` you had to hold down the 
meta key. This makes it possible to release the meta key between
key presses.
This commit is contained in:
probablycorey
2013-11-01 11:15:01 -07:00
parent 9e8b1fb661
commit b22d64745f
2 changed files with 5 additions and 1 deletions

View File

@@ -203,6 +203,7 @@ describe "Keymap", ->
describe "when a second keystroke added to the first to match a multi-stroke binding completely", ->
it "triggers the event associated with the matched multi-stroke binding", ->
expect(keymap.handleKeyEvent(keydownEvent('x', target: fragment[0], ctrlKey: true))).toBeFalsy()
expect(keymap.handleKeyEvent(keydownEvent('ctrl', target: fragment[0]))).toBeFalsy() # This simulates actual key event behavior
expect(keymap.handleKeyEvent(keydownEvent('c', target: fragment[0], ctrlKey: true))).toBeFalsy()
expect(quitHandler).toHaveBeenCalled()

View File

@@ -177,7 +177,10 @@ class Keymap
multiKeystrokeStringForEvent: (event) ->
currentKeystroke = @keystrokeStringForEvent(event)
if @queuedKeystrokes
@queuedKeystrokes + ' ' + currentKeystroke
if currentKeystroke in Modifiers
@queuedKeystrokes
else
@queuedKeystrokes + ' ' + currentKeystroke
else
currentKeystroke