       # the missing characters.
       @simulateTextInput(event) if event.defaultPrevented and event.type is 'keydown'
 
+    # Manage the keystroke queue state. State is updated separately for clarity.
+
+    @bindingsToDisable.push(dispatchedExactMatch) if dispatchedExactMatch
     if hasPartialMatches and shouldUsePartialMatches
-      event.preventDefault()
-
       enableTimeout = (
         @pendingStateTimeoutHandle? or
         dispatchedExactMatch? or

    dispatchedExactMatch = null
    partialMatches = @findPartialMatches(partialMatchCandidates, target)
    hasPartialMatches = partialMatches.length > 0

    # Determine if the current keystrokes match any bindings *exactly*. If we
    # do find and exact match, the next step depends on whether we have any

            shouldUsePartialMatches = false

          if @dispatchCommandEvent(exactMatchCandidate.command, target, event)
            dispatchedExactMatch = exactMatchCandidate
            eventHandled = true
            break
        currentTarget = currentTarget.parentElement

    # Emit events. These are done on their own for clarity.

    if dispatchedExactMatch?
      @emitter.emit 'did-match-binding', {
        keystrokes,
        eventType: event.type,
        binding: dispatchedExactMatch,
        keyboardEventTarget: target
      }
    else if hasPartialMatches and shouldUsePartialMatches
      event.preventDefault()
      @emitter.emit 'did-partially-match-binding', {
        keystrokes,
        eventType: event.type,
        partiallyMatchedBindings: partialMatches,
        keyboardEventTarget: target
      }
    else if not dispatchedExactMatch? and not hasPartialMatches
      @emitter.emit 'did-fail-to-match-binding', {
        keystrokes,
        eventType: event.type,
