From 1aa99c379f98f01ccc5fe00ffe60df81fc987dfa Mon Sep 17 00:00:00 2001 From: Corey Johnson & Nathan Sobo Date: Wed, 11 Jan 2012 11:42:22 -0800 Subject: [PATCH] Move GlobalKeymap instance to App. Clear bindings between examples. --- spec/atom/root-view-spec.coffee | 4 +++- spec/spec-helper.coffee | 5 +++++ src/atom/app.coffee | 7 ++++++- src/atom/global-keymap.coffee | 3 +++ src/atom/root-view.coffee | 10 ++-------- 5 files changed, 19 insertions(+), 10 deletions(-) diff --git a/spec/atom/root-view-spec.coffee b/spec/atom/root-view-spec.coffee index 38c26b278..bc0f0ec49 100644 --- a/spec/atom/root-view-spec.coffee +++ b/spec/atom/root-view-spec.coffee @@ -10,6 +10,7 @@ describe "RootView", -> beforeEach -> url = require.resolve 'fixtures/dir/a' rootView = RootView.build {url} + rootView.enableKeymap() project = rootView.project describe "initialize", -> @@ -86,7 +87,7 @@ describe "RootView", -> beforeEach -> commandHandler = jasmine.createSpy('commandHandler') rootView.on('foo-command', commandHandler) - rootView.globalKeymap.bindKeys('*', 'x': 'foo-command') + atom.globalKeymap.bindKeys('*', 'x': 'foo-command') describe "when a key is typed in the editor that has a binding in the keymap", -> it "triggers the key binding's command as an event and stops its propagation", -> @@ -99,6 +100,7 @@ describe "RootView", -> describe "when a keydown event is triggered on the RootView (not originating from Ace)", -> it "triggers matching keybindings for that event", -> event = keydownEvent 'x', target: rootView[0] + rootView.trigger(event) expect(commandHandler).toHaveBeenCalled() diff --git a/spec/spec-helper.coffee b/spec/spec-helper.coffee index 0c9526da5..554ce73c0 100644 --- a/spec/spec-helper.coffee +++ b/spec/spec-helper.coffee @@ -6,6 +6,7 @@ BindingSet = require 'binding-set' afterEach -> (new Native).resetMainMenu() + atom.globalKeymap.reset() window.atom = new (require 'app') @@ -25,3 +26,7 @@ $.fn.resultOfTrigger = (type) -> event = $.Event(type) this.trigger(event) event.result + +$.fn.enableKeymap = -> + @on 'keydown', (e) => atom.globalKeymap.handleKeyEvent(e) + diff --git a/src/atom/app.coffee b/src/atom/app.coffee index 37fd07187..4b3b0726e 100644 --- a/src/atom/app.coffee +++ b/src/atom/app.coffee @@ -1,14 +1,19 @@ Native = require 'native' +GlobalKeymap = require 'global-keymap' +$ = require 'jquery' module.exports = class App + globalKeymap: null native: null constructor: -> @native = new Native + @globalKeymap = new GlobalKeymap + $(document).on 'keydown', (e) => console.log e; @globalKeymap.handleKeyEvent(e) bindKeys: (selector, bindings) -> - window.rootView.bindKeys(selector, bindings) + @globalKeymap.bindKeys(selector, bindings) open: (url) -> OSX.NSApp.open url diff --git a/src/atom/global-keymap.coffee b/src/atom/global-keymap.coffee index 093f3d8e2..1a7bbdc82 100644 --- a/src/atom/global-keymap.coffee +++ b/src/atom/global-keymap.coffee @@ -23,3 +23,6 @@ class GlobalKeymap return true currentNode = currentNode.parent() false + + reset: -> + @BindingSets = [] diff --git a/src/atom/root-view.coffee b/src/atom/root-view.coffee index 55ae3ec1c..a79944846 100644 --- a/src/atom/root-view.coffee +++ b/src/atom/root-view.coffee @@ -22,22 +22,16 @@ class RootView extends Template globalKeymap: null initialize: ({url}) -> - @createGlobalKeymap() + @editor.keyEventHandler = atom.globalKeymap @createProject(url) - @bindKeys '*' + atom.bindKeys '*' 'meta-s': 'save' 'meta-w': 'close' 'meta-t': 'toggle-file-finder' @on 'toggle-file-finder', => @toggleFileFinder() - - createGlobalKeymap: -> - @globalKeymap = new GlobalKeymap - @on 'keydown', (e) => @globalKeymap.handleKeyEvent(e) - @editor.keyEventHandler = @globalKeymap - createProject: (url) -> if url @project = new Project(fs.directory(url))