From 1e51750b6cec8b72dd33f865afc6a5a158feb15d Mon Sep 17 00:00:00 2001 From: Corey Johnson & Nathan Sobo Date: Tue, 26 Mar 2013 12:03:48 -0600 Subject: [PATCH] Remove a package's keymaps when it is deactivated --- spec/app/atom-spec.coffee | 6 ++++++ src/app/atom-package.coffee | 17 +++++++---------- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/spec/app/atom-spec.coffee b/spec/app/atom-spec.coffee index c479f58b3..33485475b 100644 --- a/spec/app/atom-spec.coffee +++ b/spec/app/atom-spec.coffee @@ -150,6 +150,12 @@ describe "the `atom` global", -> expect(syntax.selectGrammar('a.alot').name).toBe 'Null Grammar' expect(syntax.selectGrammar('a.alittle').name).toBe 'Null Grammar' + it "removes the package's keymaps", -> + atom.activatePackage('package-with-keymaps') + atom.deactivatePackage('package-with-keymaps') + expect(keymap.bindingsForElement($$ -> @div class: 'test-1')['ctrl-z']).toBeUndefined() + expect(keymap.bindingsForElement($$ -> @div class: 'test-2')['ctrl-z']).toBeUndefined() + describe "texmate packages", -> it "removes the package's grammars", -> expect(syntax.selectGrammar("file.rb").name).toBe "Null Grammar" diff --git a/src/app/atom-package.coffee b/src/app/atom-package.coffee index dc27d70ac..e50ec880b 100644 --- a/src/app/atom-package.coffee +++ b/src/app/atom-package.coffee @@ -32,7 +32,7 @@ class AtomPackage extends Package this activate: ({immediate}={}) -> - keymap.add(map) for map in @keymaps + keymap.add(path, map) for [path, map] in @keymaps applyStylesheet(path, content) for [path, content] in @stylesheets syntax.addGrammar(grammar) for grammar in @grammars @@ -55,21 +55,17 @@ class AtomPackage extends Package @metadata ?= {} loadKeymaps: -> - @keymaps = [] + @keymaps = @getKeymapPaths().map (path) -> [path, CSON.readObject(path)] + getKeymapPaths: -> keymapsDirPath = fsUtils.join(@path, 'keymaps') - keymapExtensions = ['cson', 'json', ''] - if @metadata.keymaps - for path in @metadata.keymaps - @keymaps.push(CSON.readObject(fsUtils.resolve(keymapsDirPath, path, keymapExtensions))) + @metadata.keymaps.map (name) -> fsUtils.resolve(keymapsDirPath, name, ['cson', 'json', '']) else - for path in fsUtils.list(keymapsDirPath, ['cson', 'json', '']) ? [] - @keymaps.push(CSON.readObject(path)) + fsUtils.list(keymapsDirPath, ['cson', 'json']) ? [] loadStylesheets: -> - @stylesheets = [] - @stylesheets.push([path, loadStylesheet(path)]) for path in @getStylesheetPaths() + @stylesheets = @getStylesheetPaths().map (path) -> [path, loadStylesheet(path)] getStylesheetPaths: -> stylesheetDirPath = fsUtils.join(@path, 'stylesheets') @@ -98,6 +94,7 @@ class AtomPackage extends Package deactivate: -> syntax.removeGrammar(grammar) for grammar in @grammars + keymap.remove(path) for [path] in @keymaps @mainModule?.deactivate?() requireMainModule: ->