   #   so they can be removed later.
   # bindings - An {Object} whose top-level keys point at sub-objects mapping
   #   keystroke patterns to commands.
-
   addKeyBindings: (source, keyBindingsBySelector) ->
     for selector, keyBindings of keyBindingsBySelector
       @addKeyBindingsForSelector(source, selector, keyBindings)

      @addKeyBindings(bindingsPath, season.readFileSync(bindingsPath))
      @watchKeyBindings(bindingsPath) if options?.watch

  watchKeyBindings: (filePath) ->
    unless @watchSubscriptions[filePath]?.cancelled is false
      @watchSubscriptions[filePath] =

  # For testing purposes
  getOtherPlatforms: -> OtherPlatforms

  keyBindingsForKeystrokesAndTarget: (keystrokes, target) ->
    @keyBindings
      .filter (binding) ->
        binding.keystrokes.indexOf(keystrokes) is 0 \
          and target.webkitMatchesSelector(binding.selector)
      .sort (a, b) -> a.compare(b)

  dispatchCommandEvent: (keyboardEvent, target, command) ->
    return true if command is 'native!'
