mirror of
https://github.com/atom/atom.git
synced 2026-02-10 14:45:11 -05:00
Remove KeyBinder and CommandMap.
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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 = []
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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) |
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user