diff --git a/src/app/atom-package.coffee b/src/app/atom-package.coffee index e8a8b262b..e4e51efa6 100644 --- a/src/app/atom-package.coffee +++ b/src/app/atom-package.coffee @@ -11,7 +11,17 @@ class AtomPackage extends Package load: -> try rootView.activatePackage(@module) - extensionKeymapPath = require.resolve(fs.join(@name, "src/keymap"), verifyExistence: false) - require extensionKeymapPath if fs.exists(extensionKeymapPath) + @loadKeymaps() catch e console.error "Failed to load package named '#{@name}'", e.stack + + loadKeymaps: -> + for keymapPath in @getKeymapPaths() + keymap.load(keymapPath) + + getKeymapPaths: -> + keymapsDirPath = fs.join(@path, 'keymaps') + if fs.exists keymapsDirPath + fs.list keymapsDirPath + else + [] diff --git a/src/app/keymap.coffee b/src/app/keymap.coffee index 21710495a..ab9b70d07 100644 --- a/src/app/keymap.coffee +++ b/src/app/keymap.coffee @@ -15,18 +15,29 @@ class Keymap @bindingSetsByFirstKeystroke = {} bindDefaultKeys: -> - @bindKeys "*", - 'meta-n': 'new-window' - 'meta-,': 'open-user-configuration' - 'meta-o': 'open' - 'meta-O': 'open-unstable' - 'meta-w': 'core:close' + @add + 'body': + 'meta-n': 'new-window' + 'meta-,': 'open-user-configuration' + 'meta-o': 'open' + 'meta-O': 'open-unstable' + 'meta-w': 'core:close' $(document).command 'new-window', => atom.newWindow() $(document).command 'open-user-configuration', => atom.open(config.configDirPath) $(document).command 'open', => atom.open() $(document).command 'open-unstable', => atom.openUnstable() + loadDirectory: (directoryPath) -> + @load(filePath) for filePath in fs.list(directoryPath) + + load: (path) -> + @add(fs.readObject(path)) + + add: (keymap) -> + for selector, bindings of keymap + @bindKeys(selector, bindings) + bindKeys: (selector, bindings) -> bindingSet = new BindingSet(selector, bindings, @bindingSets.length) @bindingSets.unshift(bindingSet) diff --git a/src/app/keymaps/apple.coffee b/src/app/keymaps/apple.cson similarity index 92% rename from src/app/keymaps/apple.coffee rename to src/app/keymaps/apple.cson index 4426970b9..33d8fa28c 100644 --- a/src/app/keymaps/apple.coffee +++ b/src/app/keymaps/apple.cson @@ -1,10 +1,10 @@ -window.keymap.bindKeys 'body' +'body': 'meta-up': 'core:move-to-top' 'meta-down': 'core:move-to-bottom' 'meta-shift-up': 'core:select-to-top' 'meta-shift-down': 'core:select-to-bottom' -window.keymap.bindKeys '.editor' +'.editor': 'meta-right': 'editor:move-to-end-of-line' 'meta-left': 'editor:move-to-beginning-of-line' 'alt-left': 'editor:move-to-beginning-of-word' diff --git a/src/app/keymaps/atom.coffee b/src/app/keymaps/atom.cson similarity index 92% rename from src/app/keymaps/atom.coffee rename to src/app/keymaps/atom.cson index 6ca9d46d4..afbd7f049 100644 --- a/src/app/keymaps/atom.coffee +++ b/src/app/keymaps/atom.cson @@ -1,4 +1,4 @@ -window.keymap.bindKeys 'body' +'body': 'enter': 'core:confirm' 'escape': 'core:cancel' 'meta-w': 'core:close' @@ -29,6 +29,6 @@ window.keymap.bindKeys 'body' 'alt-meta-i': 'toggle-dev-tools' -window.keymap.bindKeys '.tool-panel' +'.tool-panel': 'meta-escape': 'tool-panel:unfocus' 'escape': 'core:close' diff --git a/src/app/keymaps/editor.coffee b/src/app/keymaps/editor.cson similarity index 97% rename from src/app/keymaps/editor.coffee rename to src/app/keymaps/editor.cson index 2d54e81b0..76c6afe9b 100644 --- a/src/app/keymaps/editor.coffee +++ b/src/app/keymaps/editor.cson @@ -1,4 +1,4 @@ -window.keymap.bindKeys '.editor', +'.editor': 'meta-s': 'editor:save' 'enter': 'editor:newline' 'meta-enter': 'editor:newline-below' diff --git a/src/app/keymaps/emacs.coffee b/src/app/keymaps/emacs.cson similarity index 91% rename from src/app/keymaps/emacs.coffee rename to src/app/keymaps/emacs.cson index 4574e188d..108ac95cf 100644 --- a/src/app/keymaps/emacs.coffee +++ b/src/app/keymaps/emacs.cson @@ -1,4 +1,4 @@ -window.keymap.bindKeys 'body', +'body': 'ctrl-p': 'core:move-up' 'ctrl-n': 'core:move-down' 'ctrl-b': 'core:move-left' @@ -10,7 +10,7 @@ window.keymap.bindKeys 'body', 'ctrl-h': 'core:backspace' 'ctrl-d': 'core:delete' -window.keymap.bindKeys '.editor', +'.editor': 'alt-f': 'editor:move-to-end-of-word' 'alt-F': 'editor:select-to-end-of-word' 'alt-b': 'editor:move-to-beginning-of-word' diff --git a/src/app/keymaps/git.coffee b/src/app/keymaps/git.cson similarity index 58% rename from src/app/keymaps/git.coffee rename to src/app/keymaps/git.cson index 341607ddc..a4d89c3a5 100644 --- a/src/app/keymaps/git.coffee +++ b/src/app/keymaps/git.cson @@ -1,2 +1,2 @@ -window.keymap.bindKeys '.editor', +'.editor': 'alt-meta-z': 'editor:checkout-head-revision' diff --git a/src/app/keymaps/select-list.coffee b/src/app/keymaps/select-list.cson similarity index 57% rename from src/app/keymaps/select-list.coffee rename to src/app/keymaps/select-list.cson index 4aca5bb92..1776b851c 100644 --- a/src/app/keymaps/select-list.coffee +++ b/src/app/keymaps/select-list.cson @@ -1,4 +1,4 @@ -window.keymap.bindKeys ".select-list .mini.editor input", +".select-list .mini.editor input": 'enter': 'core:confirm', 'escape': 'core:cancel' 'meta-w': 'core:cancel' diff --git a/src/app/window.coffee b/src/app/window.coffee index d888f031a..94fccad2d 100644 --- a/src/app/window.coffee +++ b/src/app/window.coffee @@ -56,7 +56,7 @@ windowAdditions = @keymap = new Keymap() @keymap.bindDefaultKeys() - require(keymapPath) for keymapPath in fs.list(require.resolve("keymaps")) + @keymap.loadDirectory(require.resolve('keymaps')) @_handleKeyEvent = (e) => @keymap.handleKeyEvent(e) $(document).on 'keydown', @_handleKeyEvent diff --git a/src/packages/autocomplete/keymaps/autocomplete.cson b/src/packages/autocomplete/keymaps/autocomplete.cson new file mode 100644 index 000000000..f27c6106d --- /dev/null +++ b/src/packages/autocomplete/keymaps/autocomplete.cson @@ -0,0 +1,8 @@ +'.editor': + 'ctrl-space': 'autocomplete:attach' + +'.autocomplete .editor': + 'ctrl-space': 'core:cancel' + +'.autocomplete .mini.editor input': + 'enter': 'core:confirm' diff --git a/src/packages/autocomplete/src/keymap.coffee b/src/packages/autocomplete/src/keymap.coffee deleted file mode 100644 index 9fd13b6c5..000000000 --- a/src/packages/autocomplete/src/keymap.coffee +++ /dev/null @@ -1,8 +0,0 @@ -window.keymap.bindKeys '.editor', - 'ctrl-space': 'autocomplete:attach' - -window.keymap.bindKeys '.autocomplete .editor', - 'ctrl-space': 'core:cancel' - -window.keymap.bindKeys ".autocomplete .mini.editor input", - 'enter': 'core:confirm' diff --git a/src/packages/command-panel/src/keymap.coffee b/src/packages/command-panel/keymaps/command-panel.cson similarity index 73% rename from src/packages/command-panel/src/keymap.coffee rename to src/packages/command-panel/keymaps/command-panel.cson index 18bf0b6c7..90b1d19fa 100644 --- a/src/packages/command-panel/src/keymap.coffee +++ b/src/packages/command-panel/keymaps/command-panel.cson @@ -1,12 +1,12 @@ -window.keymap.bindKeys '*' +'body': 'meta-:': 'command-panel:toggle-preview' 'meta-;': 'command-panel:toggle' 'meta-F': 'command-panel:find-in-project' -window.keymap.bindKeys '.command-panel .preview-list, .command-panel .editor input', +'.command-panel .preview-list, .command-panel .editor input': 'enter': 'core:confirm' -window.keymap.bindKeys '.editor', +'.editor': 'meta-g': 'command-panel:repeat-relative-address' 'meta-G': 'command-panel:repeat-relative-address-in-reverse' 'meta-e': 'command-panel:set-selection-as-regex-address' diff --git a/src/packages/event-palette/keymaps/event-palette.cson b/src/packages/event-palette/keymaps/event-palette.cson new file mode 100644 index 000000000..09f9c8dfc --- /dev/null +++ b/src/packages/event-palette/keymaps/event-palette.cson @@ -0,0 +1,5 @@ +'body, .event-palette .editor': + 'meta-p': 'event-palette:toggle' + +'.event-palette .editor': + 'meta-p': 'event-palette:toggle' diff --git a/src/packages/event-palette/src/keymap.coffee b/src/packages/event-palette/src/keymap.coffee deleted file mode 100644 index 46c6b2aed..000000000 --- a/src/packages/event-palette/src/keymap.coffee +++ /dev/null @@ -1,5 +0,0 @@ -window.keymap.bindKeys 'body, .event-palette .editor' - 'meta-p': 'event-palette:toggle' - -window.keymap.bindKeys '.event-palette .editor' - 'meta-p': 'event-palette:toggle' diff --git a/src/packages/fuzzy-finder/src/keymap.coffee b/src/packages/fuzzy-finder/keymaps/fuzzy-finder.cson similarity index 75% rename from src/packages/fuzzy-finder/src/keymap.coffee rename to src/packages/fuzzy-finder/keymaps/fuzzy-finder.cson index c7ea886dc..fca322bed 100644 --- a/src/packages/fuzzy-finder/src/keymap.coffee +++ b/src/packages/fuzzy-finder/keymaps/fuzzy-finder.cson @@ -1,4 +1,3 @@ -window.keymap.bindKeys 'body' +'body': 'meta-t': 'fuzzy-finder:toggle-file-finder' 'meta-b': 'fuzzy-finder:toggle-buffer-finder' - diff --git a/src/packages/markdown-preview/keymaps/markdown-preview.cson b/src/packages/markdown-preview/keymaps/markdown-preview.cson new file mode 100644 index 000000000..d98f00093 --- /dev/null +++ b/src/packages/markdown-preview/keymaps/markdown-preview.cson @@ -0,0 +1,5 @@ +'.editor': + 'ctrl-m': 'markdown-preview:toggle' + +'.markdown-preview': + 'ctrl-m': 'markdown-preview:toggle' diff --git a/src/packages/markdown-preview/src/keymap.coffee b/src/packages/markdown-preview/src/keymap.coffee deleted file mode 100644 index 15ec00c38..000000000 --- a/src/packages/markdown-preview/src/keymap.coffee +++ /dev/null @@ -1,5 +0,0 @@ -window.keymap.bindKeys '.editor', - 'ctrl-m': 'markdown-preview:toggle' - -window.keymap.bindKeys '.markdown-preview', - 'ctrl-m': 'markdown-preview:toggle' diff --git a/src/packages/outline-view/src/keymap.coffee b/src/packages/outline-view/keymaps/outline-view.cson similarity index 69% rename from src/packages/outline-view/src/keymap.coffee rename to src/packages/outline-view/keymaps/outline-view.cson index 661633522..e47463687 100644 --- a/src/packages/outline-view/src/keymap.coffee +++ b/src/packages/outline-view/keymaps/outline-view.cson @@ -1,6 +1,6 @@ -window.keymap.bindKeys '.editor' +'.editor': 'meta-j': 'outline-view:toggle-file-outline' 'meta-.': 'outline-view:jump-to-declaration' -window.keymap.bindKeys 'body' +'body': 'meta-J': 'outline-view:toggle-project-outline' diff --git a/src/packages/snippets/src/keymap.coffee b/src/packages/snippets/keymaps/snippets.cson similarity index 100% rename from src/packages/snippets/src/keymap.coffee rename to src/packages/snippets/keymaps/snippets.cson diff --git a/src/packages/tree-view/src/keymap.coffee b/src/packages/tree-view/keymaps/tree-view.cson similarity index 74% rename from src/packages/tree-view/src/keymap.coffee rename to src/packages/tree-view/keymaps/tree-view.cson index d87689b68..1e198d26d 100644 --- a/src/packages/tree-view/src/keymap.coffee +++ b/src/packages/tree-view/keymaps/tree-view.cson @@ -1,8 +1,8 @@ -window.keymap.bindKeys '#root-view' +'#root-view': 'meta-\\': 'tree-view:toggle' 'meta-|': 'tree-view:reveal-active-file' -window.keymap.bindKeys '.tree-view' +'.tree-view': 'right': 'tree-view:expand-directory' 'left': 'tree-view:collapse-directory' 'enter': 'tree-view:open-selected-entry' @@ -11,6 +11,6 @@ window.keymap.bindKeys '.tree-view' 'delete': 'tree-view:remove' 'backspace': 'tree-view:remove' -window.keymap.bindKeys '.tree-view-dialog .mini.editor' +'.tree-view-dialog .mini.editor': 'enter': 'core:confirm' 'escape': 'core:cancel' diff --git a/src/stdlib/fs.coffee b/src/stdlib/fs.coffee index a58aa499c..e3b87eb07 100644 --- a/src/stdlib/fs.coffee +++ b/src/stdlib/fs.coffee @@ -160,3 +160,11 @@ module.exports = '.mkdown' '.ron' ], ext) + + readObject: (path) -> + contents = @read(path) + if @extension(path) is '.cson' + {CoffeeScript} = require 'coffee-script' + CoffeeScript.eval(contents, bare: true) + else + JSON.parse(contents)