Merge pull request #9831 from atom/as-user-keybindings-priority

Do not override user-defined keymaps when reloading packages
This commit is contained in:
Antonio Scandurra
2015-12-04 21:34:20 +01:00
3 changed files with 53 additions and 2 deletions

View File

@@ -15,7 +15,7 @@
"electronVersion": "0.34.5",
"dependencies": {
"async": "0.2.6",
"atom-keymap": "^6.1.1",
"atom-keymap": "^6.2.0",
"babel-core": "^5.8.21",
"bootstrap": "^3.3.4",
"cached-run-in-this-context": "0.4.0",

View File

@@ -1,6 +1,9 @@
path = require 'path'
Package = require '../src/package'
temp = require 'temp'
fs = require 'fs-plus'
{Disposable} = require 'atom'
{buildKeydownEvent} = require '../src/keymap-extensions'
{mockLocalStorage} = require './spec-helper'
describe "PackageManager", ->
@@ -562,6 +565,54 @@ describe "PackageManager", ->
atom.config.set("core.packagesWithKeymapsDisabled", [])
expect(atom.keymaps.findKeyBindings(keystrokes: 'ctrl-z', target: element1)[0].command).toBe 'keymap-1'
describe "when the package is de-activated and re-activated", ->
[element, events, userKeymapPath] = []
beforeEach ->
userKeymapPath = path.join(temp.path(), "user-keymaps.cson")
spyOn(atom.keymaps, "getUserKeymapPath").andReturn(userKeymapPath)
element = createTestElement('test-1')
jasmine.attachToDOM(element)
events = []
element.addEventListener 'user-command', (e) -> events.push(e)
element.addEventListener 'test-1', (e) -> events.push(e)
afterEach ->
element.remove()
# Avoid leaking user keymap subscription
atom.keymaps.watchSubscriptions[userKeymapPath].dispose()
delete atom.keymaps.watchSubscriptions[userKeymapPath]
it "doesn't override user-defined keymaps", ->
fs.writeFileSync userKeymapPath, """
".test-1":
"ctrl-z": "user-command"
"""
atom.keymaps.loadUserKeymap()
waitsForPromise ->
atom.packages.activatePackage("package-with-keymaps")
runs ->
atom.keymaps.handleKeyboardEvent(buildKeydownEvent("z", ctrl: true, target: element))
expect(events.length).toBe(1)
expect(events[0].type).toBe("user-command")
atom.packages.deactivatePackage("package-with-keymaps")
waitsForPromise ->
atom.packages.activatePackage("package-with-keymaps")
runs ->
atom.keymaps.handleKeyboardEvent(buildKeydownEvent("z", ctrl: true, target: element))
expect(events.length).toBe(2)
expect(events[1].type).toBe("user-command")
describe "menu loading", ->
beforeEach ->
atom.contextMenu.definitions = []

View File

@@ -32,7 +32,7 @@ KeymapManager::loadUserKeymap = ->
return unless fs.isFileSync(userKeymapPath)
try
@loadKeymap(userKeymapPath, watch: true, suppressErrors: true)
@loadKeymap(userKeymapPath, watch: true, suppressErrors: true, priority: 100)
catch error
if error.message.indexOf('Unable to watch path') > -1
message = """