Remove KeyBinder and CommandMap.

This commit is contained in:
Corey Johnson & Nathan Sobo
2012-01-11 09:57:30 -08:00
parent 2a80a72d64
commit e58f699681
9 changed files with 11 additions and 260 deletions

View File

@@ -1,14 +1,11 @@
Native = require 'native'
KeyBinder = require 'key-binder'
module.exports =
class App
native: null
keyBinder: null
constructor: ->
@native = new Native
@keyBinder = new KeyBinder
open: (url) ->
OSX.NSApp.open url

View File

@@ -1,70 +0,0 @@
_ = require 'underscore'
KeyBinder = require 'key-binder'
module.exports =
class CommandMap
delegate: null
mappings: null
bufferedEvents: null
namedKeys:
backspace: 8, tab: 9, clear: 12,
enter: 13, 'return': 13,
esc: 27, escape: 27, space: 32,
left: 37, up: 38,
right: 39, down: 40,
del: 46, 'delete': 46,
home: 36, end: 35,
pageup: 33, pagedown: 34,
',': 188, '.': 190, '/': 191,
'`': 192, '-': 189, '=': 187,
';': 186, '\'': 222,
'[': 219, ']': 221, '\\': 220
inputTimeout: 200
constructor: (@delegate) ->
@mappings = {}
@bufferedEvents = []
mapKey: (pattern, action) ->
@mappings[pattern] = action
handleKeyEvent: (event) ->
window.clearTimeout(@inputTimeoutHandle) if @inputTimeoutHandle
@bufferedEvents.push(event)
candidatePatterns =
(pattern for pattern of @mappings when @keyEventsMatchPatternPrefix(@bufferedEvents, pattern))
if candidatePatterns.length > 1
@inputTimeoutHandle = _.delay (=> @triggerActionForBufferedKeyEvents()), @inputTimeout
else if candidatePatterns.length == 1
@triggerActionForBufferedKeyEvents()
else
@clearBufferedEvents()
triggerActionForBufferedKeyEvents: ->
for pattern, action of @mappings
if @keyEventsMatchPattern(@bufferedEvents, pattern)
@delegate[action](event)
@clearBufferedEvents()
keyEventsMatchPattern: (events, pattern) ->
patternKeys = @parseKeyPattern(pattern)
return false unless events.length == patternKeys.length
_.all(_.zip(events, patternKeys), ([event, pattern]) ->
event.which == pattern.which)
keyEventsMatchPatternPrefix: (events, pattern) ->
patternKeys = @parseKeyPattern(pattern)
return false if events.length > patternKeys.length
_.all(_.zip(events, patternKeys[0...events.length]), ([event, pattern]) ->
event.which == pattern.which)
parseKeyPattern: (pattern) ->
for char in pattern
{ which: char.toUpperCase().charCodeAt(0) }
clearBufferedEvents: ->
@bufferedEvents = []

View File

@@ -1,40 +0,0 @@
module.exports =
class KeyBinder
namedKeys:
backspace: 8, tab: 9, clear: 12,
enter: 13, 'return': 13,
esc: 27, escape: 27, space: 32,
left: 37, up: 38,
right: 39, down: 40,
del: 46, 'delete': 46,
home: 36, end: 35,
pageup: 33, pagedown: 34,
',': 188, '.': 190, '/': 191,
'`': 192, '-': 189, '=': 187,
';': 186, '\'': 222,
'[': 219, ']': 221, '\\': 220
keyEventMatchesPattern: (event, pattern) ->
pattern = @parseKeyPattern pattern
pattern.ctrlKey == event.ctrlKey and
pattern.altKey == event.altKey and
pattern.shiftKey == event.shiftKey and
pattern.metaKey == event.metaKey and
pattern.which == event.which
parseKeyPattern: (pattern) ->
[modifiers..., key] = pattern.split '+'
if @namedKeys[key]
charCode = @namedKeys[key]
key = null
else
charCode = key.toUpperCase().charCodeAt 0
ctrlKey: 'ctrl' in modifiers
altKey: 'alt' in modifiers
shiftKey: 'shift' in modifiers
metaKey: 'meta' in modifiers
which: charCode
key: key

View File

@@ -51,10 +51,11 @@ class Native
title = _.last(itemPathComponents)
unless submenu.itemWithTitle(title)
item = OSX.AtomMenuItem.alloc.initWithTitle_itemPath(title, itemPath).autorelease
item.setKeyEquivalentModifierMask 0 # Because it Cocoa defaults it to NSCommandKeyMask
item.setKeyEquivalentModifierMask 0 # Because in Cocoa defaults it to NSCommandKeyMask
if keyPattern
keys = atom.keyBinder.parseKeyPattern keyPattern
bindingSet = new (require('binding-set'))("*", {})
keys = bindingSet.parseKeyPattern keyPattern
modifierMask = (keys.metaKey and OSX.NSCommandKeyMask ) |
(keys.shiftKey and OSX.NSShiftKeyMask) |

View File

@@ -53,7 +53,8 @@ $.fn.view = ->
$.fn.bindKey = (pattern, action) ->
@on 'keydown', (event) =>
if atom.keyBinder.keyEventMatchesPattern(event, pattern)
bindingSet = new (require('binding-set'))("*", {})
if bindingSet.eventMatchesPattern(event, pattern)
if _.isString(action)
this.view()[action]()
else