From be463abe42947bc3c5cacade4473de3ca24d69d7 Mon Sep 17 00:00:00 2001 From: Corey Johnson & Nathan Sobo Date: Wed, 29 Feb 2012 11:33:15 -0800 Subject: [PATCH] Move keymap from app to window --- spec/atom/root-view-spec.coffee | 3 ++- spec/spec-helper.coffee | 4 ++-- src/atom/app.coffee | 9 --------- src/atom/editor.coffee | 2 +- src/atom/file-finder.coffee | 2 +- src/atom/root-view.coffee | 10 ++-------- src/atom/vim-mode.coffee | 6 +++--- src/atom/window.coffee | 17 +++++++++++++---- 8 files changed, 24 insertions(+), 29 deletions(-) diff --git a/spec/atom/root-view-spec.coffee b/spec/atom/root-view-spec.coffee index be3dd0e30..e1534f604 100644 --- a/spec/atom/root-view-spec.coffee +++ b/spec/atom/root-view-spec.coffee @@ -91,7 +91,8 @@ describe "RootView", -> beforeEach -> commandHandler = jasmine.createSpy('commandHandler') rootView.on('foo-command', commandHandler) - atom.globalKeymap.bindKeys('*', 'x': 'foo-command') + + window.keymap.bindKeys('*', 'x': 'foo-command') describe "when a keydown event is triggered on the RootView (not originating from Ace)", -> it "triggers matching keybindings for that event", -> diff --git a/spec/spec-helper.coffee b/spec/spec-helper.coffee index 304810397..55274b355 100644 --- a/spec/spec-helper.coffee +++ b/spec/spec-helper.coffee @@ -9,11 +9,11 @@ require 'window' window.showConsole() beforeEach -> + window.keymap = new GlobalKeymap window.resetTimeouts() afterEach -> (new Native).resetMainMenu() - atom.globalKeymap.reset() $('#jasmine-content').empty() # Use underscore's definition of equality for toEqual assertions @@ -102,7 +102,7 @@ $.fn.resultOfTrigger = (type) -> event.result $.fn.enableKeymap = -> - @on 'keydown', (e) => atom.globalKeymap.handleKeyEvent(e) + @on 'keydown', (e) => window.keymap.handleKeyEvent(e) $.fn.attachToDom = -> $('#jasmine-content').append(this) diff --git a/src/atom/app.coffee b/src/atom/app.coffee index 0eadca294..f4edfffce 100644 --- a/src/atom/app.coffee +++ b/src/atom/app.coffee @@ -1,26 +1,17 @@ EventEmitter = require 'event-emitter' Native = require 'native' -GlobalKeymap = require 'global-keymap' $ = require 'jquery' _ = require 'underscore' module.exports = class App - globalKeymap: null native: null windows: null constructor: (@loadPath, nativeMethods)-> - @globalKeymap = new GlobalKeymap @native = new Native(nativeMethods) @windows = [] - bindKeys: (selector, bindings) -> - @globalKeymap.bindKeys(selector, bindings) - - bindKey: (selector, pattern, eventName) -> - @globalKeymap.bindKey(selector, pattern, eventName) - open: (url) -> @native.open url diff --git a/src/atom/editor.coffee b/src/atom/editor.coffee index b822d41af..0687f091b 100644 --- a/src/atom/editor.coffee +++ b/src/atom/editor.coffee @@ -40,7 +40,7 @@ class Editor extends View @setBuffer(new Buffer) bindKeys: -> - atom.bindKeys '*:not(.editor *)', + window.keymap.bindKeys '*:not(.editor *)', right: 'move-right' left: 'move-left' down: 'move-down' diff --git a/src/atom/file-finder.coffee b/src/atom/file-finder.coffee index 7269227ec..3fcb555b7 100644 --- a/src/atom/file-finder.coffee +++ b/src/atom/file-finder.coffee @@ -17,7 +17,7 @@ class FileFinder extends View @maxResults = 10 @populateUrlList() - atom.bindKeys ".file-finder", + window.keymap.bindKeys ".file-finder", 'up': 'move-up' 'down': 'move-down' 'enter': 'select' diff --git a/src/atom/root-view.coffee b/src/atom/root-view.coffee index fb7b90fd7..b6dc23ac6 100644 --- a/src/atom/root-view.coffee +++ b/src/atom/root-view.coffee @@ -7,7 +7,6 @@ Buffer = require 'buffer' Editor = require 'editor' FileFinder = require 'file-finder' Project = require 'project' -GlobalKeymap = require 'global-keymap' VimMode = require 'vim-mode' module.exports = @@ -18,13 +17,11 @@ class RootView extends View @div id: 'main', outlet: 'main', => @subview 'editor', new Editor - globalKeymap: null - initialize: ({url}) -> - @editor.keyEventHandler = atom.globalKeymap + @editor.keyEventHandler = window.keymap @createProject(url) - atom.bindKeys '*' + window.keymap.bindKeys '*' 'meta-s': 'save' 'meta-w': 'close' 'meta-t': 'toggle-file-finder' @@ -43,9 +40,6 @@ class RootView extends View @project = new Project(fs.directory(url)) @editor.setBuffer(@project.open(url)) if fs.isFile(url) - bindKeys: (selector, bindings) -> - @globalKeymap.bindKeys(selector, bindings) - addPane: (view) -> pane = $('
') pane.append(view) diff --git a/src/atom/vim-mode.coffee b/src/atom/vim-mode.coffee index dcb953f38..3fb5500fe 100644 --- a/src/atom/vim-mode.coffee +++ b/src/atom/vim-mode.coffee @@ -15,13 +15,13 @@ class VimMode @opStack = [] @activateCommandMode() - atom.bindKeys '.editor', 'escape': 'activate-command-mode' + window.keymap.bindKeys '.editor', 'escape': 'activate-command-mode' @editor.on 'activate-command-mode', => @activateCommandMode() @setupCommandMode() setupCommandMode: -> - atom.bindKeys '.command-mode', (e) => + window.keymap.bindKeys '.command-mode', (e) => if e.keystroke.match /^\d$/ return 'command-mode:numeric-prefix' if e.keystroke.match /^.$/ @@ -62,7 +62,7 @@ class VimMode for pattern, commandName of bindings prefixedBindings[pattern] = "command-mode:#{commandName}" - atom.bindKeys ".command-mode", prefixedBindings + window.keymap.bindKeys ".command-mode", prefixedBindings handleCommands: (commands) -> _.each commands, (fn, commandName) => diff --git a/src/atom/window.coffee b/src/atom/window.coffee index a185ba31e..a1e922774 100644 --- a/src/atom/window.coffee +++ b/src/atom/window.coffee @@ -1,8 +1,8 @@ fs = require 'fs' _ = require 'underscore' $ = require 'jquery' -fs = require 'fs' +GlobalKeymap = require 'global-keymap' RootView = require 'root-view' # This a weirdo file. We don't create a Window class, we just add stuff to @@ -11,20 +11,28 @@ RootView = require 'root-view' windowAdditions = rootView: null menuItemActions: null + keymap: null startup: (url) -> @menuItemActions = {} - @rootView = new RootView {url} - $('body').append @rootView + @attachRootView(url) @registerEventHandlers() @bindMenuItems() - $(this).on 'close', => @close() $(window).focus() + atom.windowOpened this + + @keymap = new GlobalKeymap() + $(document).on 'keydown', (e) -> @keymap.handleKeyEvent(e) shutdown: -> @rootView.remove() $(window).unbind('focus') $(window).unbind('blur') + atom.windowClosed this + + attachRootView: (url) -> + @rootView = new RootView {url} + $('body').append @rootView requireStylesheet: (path) -> fullPath = require.resolve(path) @@ -40,6 +48,7 @@ windowAdditions = @menuItemActions[path] = {action: action, pattern: pattern} registerEventHandlers: -> + $(window).on 'close', => @close() $(window).focus => @registerMenuItems() $(window).blur -> atom.native.resetMainMenu()