From d0bd76072b6ed529b25ea6002f2a2183bb639db9 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Tue, 7 Apr 2015 15:58:44 -0700 Subject: [PATCH 01/15] Inline platform system menu --- build/tasks/compile-packages-slug-task.coffee | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/build/tasks/compile-packages-slug-task.coffee b/build/tasks/compile-packages-slug-task.coffee index 4e24f948e..ed9c2e9e4 100644 --- a/build/tasks/compile-packages-slug-task.coffee +++ b/build/tasks/compile-packages-slug-task.coffee @@ -6,6 +6,13 @@ _ = require 'underscore-plus' module.exports = (grunt) -> {spawn, rm} = require('./task-helpers')(grunt) + getMenu = (appDir) -> + menusPath = path.join(appDir, 'menus') + menuPath = path.join(menusPath, process.platform) + menu = CSON.readFileSync(menuPath) if fs.isFileSync(menuPath) + rm menusPath + menu ? {} + grunt.registerTask 'compile-packages-slug', 'Add bundled package metadata information to the main package.json file', -> appDir = fs.realpathSync(grunt.config.get('atom.appDir')) @@ -50,5 +57,6 @@ module.exports = (grunt) -> metadata = grunt.file.readJSON(path.join(appDir, 'package.json')) metadata._atomPackages = packages + metadata._menu = getMenu(appDir) grunt.file.write(path.join(appDir, 'package.json'), JSON.stringify(metadata)) From f36584903ff9d579962978d67e2e275008df9101 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Tue, 7 Apr 2015 16:51:57 -0700 Subject: [PATCH 02/15] Inline all keymaps into package.json --- build/tasks/compile-packages-slug-task.coffee | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/build/tasks/compile-packages-slug-task.coffee b/build/tasks/compile-packages-slug-task.coffee index ed9c2e9e4..574ce89d4 100644 --- a/build/tasks/compile-packages-slug-task.coffee +++ b/build/tasks/compile-packages-slug-task.coffee @@ -13,6 +13,12 @@ module.exports = (grunt) -> rm menusPath menu ? {} + getKeymaps = (appDir) -> + keymapsPath = path.join(appDir, 'keymaps') + keymaps = fs.listSync(keymapsPath, ['.cson', '.json']).map (keymapPath) -> CSON.readFileSync(keymapPath) + rm keymapsPath + keymaps ? [] + grunt.registerTask 'compile-packages-slug', 'Add bundled package metadata information to the main package.json file', -> appDir = fs.realpathSync(grunt.config.get('atom.appDir')) @@ -58,5 +64,6 @@ module.exports = (grunt) -> metadata = grunt.file.readJSON(path.join(appDir, 'package.json')) metadata._atomPackages = packages metadata._menu = getMenu(appDir) + metadata._keymaps = getKeymaps(appDir) grunt.file.write(path.join(appDir, 'package.json'), JSON.stringify(metadata)) From bdca781fb8edfa9f4cbcac63c489a8cc0ab7dd0a Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Tue, 7 Apr 2015 16:52:22 -0700 Subject: [PATCH 03/15] Add atom prefix to keys --- build/tasks/compile-packages-slug-task.coffee | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build/tasks/compile-packages-slug-task.coffee b/build/tasks/compile-packages-slug-task.coffee index 574ce89d4..c5af73911 100644 --- a/build/tasks/compile-packages-slug-task.coffee +++ b/build/tasks/compile-packages-slug-task.coffee @@ -63,7 +63,7 @@ module.exports = (grunt) -> metadata = grunt.file.readJSON(path.join(appDir, 'package.json')) metadata._atomPackages = packages - metadata._menu = getMenu(appDir) - metadata._keymaps = getKeymaps(appDir) + metadata._atomMenu = getMenu(appDir) + metadata._atomKeymaps = getKeymaps(appDir) grunt.file.write(path.join(appDir, 'package.json'), JSON.stringify(metadata)) From 0560687e966449e71652240c1f306ee7a5216d5f Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Tue, 7 Apr 2015 16:52:39 -0700 Subject: [PATCH 04/15] Remove unneeded default --- build/tasks/compile-packages-slug-task.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/tasks/compile-packages-slug-task.coffee b/build/tasks/compile-packages-slug-task.coffee index c5af73911..0d95f3e89 100644 --- a/build/tasks/compile-packages-slug-task.coffee +++ b/build/tasks/compile-packages-slug-task.coffee @@ -17,7 +17,7 @@ module.exports = (grunt) -> keymapsPath = path.join(appDir, 'keymaps') keymaps = fs.listSync(keymapsPath, ['.cson', '.json']).map (keymapPath) -> CSON.readFileSync(keymapPath) rm keymapsPath - keymaps ? [] + keymaps grunt.registerTask 'compile-packages-slug', 'Add bundled package metadata information to the main package.json file', -> appDir = fs.realpathSync(grunt.config.get('atom.appDir')) From d30b61f7c9a5a1046311a53d275319271a1bf476 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Tue, 7 Apr 2015 16:54:55 -0700 Subject: [PATCH 05/15] Load platform menu from package.json --- src/menu-manager.coffee | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/menu-manager.coffee b/src/menu-manager.coffee index 1991cba95..29fdbce25 100644 --- a/src/menu-manager.coffee +++ b/src/menu-manager.coffee @@ -8,6 +8,11 @@ fs = require 'fs-plus' MenuHelpers = require './menu-helpers' +try + platformMenu = require('../package.json')?._atomMenu +catch error + platformMenu = null + # Extended: Provides a registry for menu items that you'd like to appear in the # application menu. # @@ -144,10 +149,13 @@ class MenuManager @sendToBrowserProcess(@template, keystrokesByCommand) loadPlatformItems: -> - menusDirPath = path.join(@resourcePath, 'menus') - platformMenuPath = fs.resolve(menusDirPath, process.platform, ['cson', 'json']) - {menu} = CSON.readFileSync(platformMenuPath) - @add(menu) + if platformMenuPath + @add(menu) + else + menusDirPath = path.join(@resourcePath, 'menus') + platformMenuPath = fs.resolve(menusDirPath, process.platform, ['cson', 'json']) + {menu} = CSON.readFileSync(platformMenuPath) + @add(menu) # Merges an item in a submenu aware way such that new items are always # appended to the bottom of existing menus where possible. From 0d3d72c18114a5e5a63602ab94a3606a665a0f59 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Tue, 7 Apr 2015 17:24:38 -0700 Subject: [PATCH 06/15] Add missing extension --- build/tasks/compile-packages-slug-task.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/tasks/compile-packages-slug-task.coffee b/build/tasks/compile-packages-slug-task.coffee index 0d95f3e89..3deed46c0 100644 --- a/build/tasks/compile-packages-slug-task.coffee +++ b/build/tasks/compile-packages-slug-task.coffee @@ -8,7 +8,7 @@ module.exports = (grunt) -> getMenu = (appDir) -> menusPath = path.join(appDir, 'menus') - menuPath = path.join(menusPath, process.platform) + menuPath = path.join(menusPath, "#{process.platform}.cson") menu = CSON.readFileSync(menuPath) if fs.isFileSync(menuPath) rm menusPath menu ? {} From 50688973e65416b17866d2d2f3cbddf9aa6c5c5f Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Tue, 7 Apr 2015 17:25:02 -0700 Subject: [PATCH 07/15] Load keymaps from package.json --- build/tasks/compile-packages-slug-task.coffee | 10 +++++++++- src/keymap-extensions.coffee | 14 +++++++++++++- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/build/tasks/compile-packages-slug-task.coffee b/build/tasks/compile-packages-slug-task.coffee index 3deed46c0..e9db9b8fa 100644 --- a/build/tasks/compile-packages-slug-task.coffee +++ b/build/tasks/compile-packages-slug-task.coffee @@ -3,6 +3,8 @@ CSON = require 'season' fs = require 'fs-plus' _ = require 'underscore-plus' +OtherPlatforms = ['darwin', 'freebsd', 'linux', 'sunos', 'win32'].filter (platform) -> platform isnt process.platform + module.exports = (grunt) -> {spawn, rm} = require('./task-helpers')(grunt) @@ -15,7 +17,13 @@ module.exports = (grunt) -> getKeymaps = (appDir) -> keymapsPath = path.join(appDir, 'keymaps') - keymaps = fs.listSync(keymapsPath, ['.cson', '.json']).map (keymapPath) -> CSON.readFileSync(keymapPath) + keymaps = {} + for keymapPath in fs.listSync(keymapsPath, ['.cson', '.json']) + name = path.basename(keymapPath, path.extname(keymapPath)) + continue unless OtherPlatforms.indexOf(name) is -1 + + keymap = CSON.readFileSync(keymapPath) + keymaps[path.basename(keymapPath)] = keymap rm keymapsPath keymaps diff --git a/src/keymap-extensions.coffee b/src/keymap-extensions.coffee index 551c6580d..3d1ca3547 100644 --- a/src/keymap-extensions.coffee +++ b/src/keymap-extensions.coffee @@ -5,11 +5,23 @@ CSON = require 'season' {jQuery} = require 'space-pen' Grim = require 'grim' +try + bundledKeymaps = require('../package.json')?._atomKeymaps +catch error + bundledKeymaps = null + KeymapManager::onDidLoadBundledKeymaps = (callback) -> @emitter.on 'did-load-bundled-keymaps', callback KeymapManager::loadBundledKeymaps = -> - @loadKeymap(path.join(@resourcePath, 'keymaps')) + keymapsPath = path.join(@resourcePath, 'keymaps') + if bundledKeymaps? + for keymapName, keymap of bundledKeymaps + keymapPath = path.join(keymapsPath, keymapName) + @add(keymapPath, keymap) + else + @loadKeymap(keymapsPath) + @emit 'bundled-keymaps-loaded' if Grim.includeDeprecatedAPIs @emitter.emit 'did-load-bundled-keymaps' From ab79f2cf50d9089af441cc7f9003f6bd08fed2ad Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Tue, 7 Apr 2015 17:28:02 -0700 Subject: [PATCH 08/15] :art: Drop unneeded detail: --- src/keymap-extensions.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/keymap-extensions.coffee b/src/keymap-extensions.coffee index 3d1ca3547..06ff95cea 100644 --- a/src/keymap-extensions.coffee +++ b/src/keymap-extensions.coffee @@ -63,7 +63,7 @@ KeymapManager::subscribeToFileReadFailure = -> else error.message - atom.notifications.addError(message, {detail: detail, dismissable: true}) + atom.notifications.addError(message, {detail, dismissable: true}) # This enables command handlers registered via jQuery to call # `.abortKeyBinding()` on the `jQuery.Event` object passed to the handler. From 3954a5fd84d791f66704137bcfdac7711e20747b Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Tue, 7 Apr 2015 17:32:00 -0700 Subject: [PATCH 09/15] .cson -> .json --- build/tasks/compile-packages-slug-task.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/tasks/compile-packages-slug-task.coffee b/build/tasks/compile-packages-slug-task.coffee index e9db9b8fa..e31dc52e2 100644 --- a/build/tasks/compile-packages-slug-task.coffee +++ b/build/tasks/compile-packages-slug-task.coffee @@ -10,7 +10,7 @@ module.exports = (grunt) -> getMenu = (appDir) -> menusPath = path.join(appDir, 'menus') - menuPath = path.join(menusPath, "#{process.platform}.cson") + menuPath = path.join(menusPath, "#{process.platform}.json") menu = CSON.readFileSync(menuPath) if fs.isFileSync(menuPath) rm menusPath menu ? {} From c69af727cf5b9889e6a634310afac14e71b0cd51 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Tue, 7 Apr 2015 17:34:48 -0700 Subject: [PATCH 10/15] Don't default menu value --- build/tasks/compile-packages-slug-task.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/tasks/compile-packages-slug-task.coffee b/build/tasks/compile-packages-slug-task.coffee index e31dc52e2..f3b04683e 100644 --- a/build/tasks/compile-packages-slug-task.coffee +++ b/build/tasks/compile-packages-slug-task.coffee @@ -13,7 +13,7 @@ module.exports = (grunt) -> menuPath = path.join(menusPath, "#{process.platform}.json") menu = CSON.readFileSync(menuPath) if fs.isFileSync(menuPath) rm menusPath - menu ? {} + menu getKeymaps = (appDir) -> keymapsPath = path.join(appDir, 'keymaps') From 4b8bb9e1d9fe927d0dd7566d068616608c463a92 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Tue, 7 Apr 2015 17:39:50 -0700 Subject: [PATCH 11/15] platformMenuPath -> platformMenu --- src/menu-manager.coffee | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/menu-manager.coffee b/src/menu-manager.coffee index 29fdbce25..d0a95dd1f 100644 --- a/src/menu-manager.coffee +++ b/src/menu-manager.coffee @@ -149,8 +149,8 @@ class MenuManager @sendToBrowserProcess(@template, keystrokesByCommand) loadPlatformItems: -> - if platformMenuPath - @add(menu) + if platformMenu? + @add(platformMenu) else menusDirPath = path.join(@resourcePath, 'menus') platformMenuPath = fs.resolve(menusDirPath, process.platform, ['cson', 'json']) From 83541c01b59e0d8374e25e2460c1e6e61943cebf Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Tue, 7 Apr 2015 18:00:08 -0700 Subject: [PATCH 12/15] Pull out menu property from _atomMenu --- src/menu-manager.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/menu-manager.coffee b/src/menu-manager.coffee index d0a95dd1f..6d4e4c77c 100644 --- a/src/menu-manager.coffee +++ b/src/menu-manager.coffee @@ -9,7 +9,7 @@ fs = require 'fs-plus' MenuHelpers = require './menu-helpers' try - platformMenu = require('../package.json')?._atomMenu + platformMenu = require('../package.json')?._atomMenu?.menu catch error platformMenu = null From ca67d33ebef514cdc4d879907809adf12bb979f5 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Tue, 7 Apr 2015 18:00:23 -0700 Subject: [PATCH 13/15] Use inlined context menu from package.json when available --- src/context-menu-manager.coffee | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/context-menu-manager.coffee b/src/context-menu-manager.coffee index 00b635251..7446c6ac0 100644 --- a/src/context-menu-manager.coffee +++ b/src/context-menu-manager.coffee @@ -8,6 +8,11 @@ Grim = require 'grim' MenuHelpers = require './menu-helpers' {validateSelector} = require './selector-validator' +try + platformContextMenu = require('../package.json')?._atomMenu?['context-menu'] +catch error + platformContextMenu = null + SpecificityCache = {} # Extended: Provides a registry for commands that you'd like to appear in the @@ -49,10 +54,13 @@ class ContextMenuManager atom.keymaps.onDidLoadBundledKeymaps => @loadPlatformItems() loadPlatformItems: -> - menusDirPath = path.join(@resourcePath, 'menus') - platformMenuPath = fs.resolve(menusDirPath, process.platform, ['cson', 'json']) - map = CSON.readFileSync(platformMenuPath) - atom.contextMenu.add(map['context-menu']) + if platformContextMenu? + @add(platformContextMenu) + else + menusDirPath = path.join(@resourcePath, 'menus') + platformMenuPath = fs.resolve(menusDirPath, process.platform, ['cson', 'json']) + map = CSON.readFileSync(platformMenuPath) + @add(map['context-menu']) # Public: Add context menu items scoped by CSS selectors. # From 80787ef1e20c1dbadd76fe45e90050e40966c0d8 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Wed, 8 Apr 2015 09:29:04 -0700 Subject: [PATCH 14/15] Remove try/catch around package.json requiring No other requires are ever guarded against and the package.json should be assumed to be valid JSON. --- src/context-menu-manager.coffee | 6 +----- src/keymap-extensions.coffee | 5 +---- src/menu-manager.coffee | 5 +---- src/package.coffee | 5 +---- 4 files changed, 4 insertions(+), 17 deletions(-) diff --git a/src/context-menu-manager.coffee b/src/context-menu-manager.coffee index 7446c6ac0..8397da33d 100644 --- a/src/context-menu-manager.coffee +++ b/src/context-menu-manager.coffee @@ -8,11 +8,7 @@ Grim = require 'grim' MenuHelpers = require './menu-helpers' {validateSelector} = require './selector-validator' -try - platformContextMenu = require('../package.json')?._atomMenu?['context-menu'] -catch error - platformContextMenu = null - +platformContextMenu = require('../package.json')?._atomMenu?['context-menu'] SpecificityCache = {} # Extended: Provides a registry for commands that you'd like to appear in the diff --git a/src/keymap-extensions.coffee b/src/keymap-extensions.coffee index 06ff95cea..7ffd3d7ef 100644 --- a/src/keymap-extensions.coffee +++ b/src/keymap-extensions.coffee @@ -5,10 +5,7 @@ CSON = require 'season' {jQuery} = require 'space-pen' Grim = require 'grim' -try - bundledKeymaps = require('../package.json')?._atomKeymaps -catch error - bundledKeymaps = null +bundledKeymaps = require('../package.json')?._atomKeymaps KeymapManager::onDidLoadBundledKeymaps = (callback) -> @emitter.on 'did-load-bundled-keymaps', callback diff --git a/src/menu-manager.coffee b/src/menu-manager.coffee index 6d4e4c77c..bd42dddb9 100644 --- a/src/menu-manager.coffee +++ b/src/menu-manager.coffee @@ -8,10 +8,7 @@ fs = require 'fs-plus' MenuHelpers = require './menu-helpers' -try - platformMenu = require('../package.json')?._atomMenu?.menu -catch error - platformMenu = null +platformMenu = require('../package.json')?._atomMenu?.menu # Extended: Provides a registry for menu items that you'd like to appear in the # application menu. diff --git a/src/package.coffee b/src/package.coffee index dd6701527..74c4f0eb8 100644 --- a/src/package.coffee +++ b/src/package.coffee @@ -11,10 +11,7 @@ Q = require 'q' ModuleCache = require './module-cache' ScopedProperties = require './scoped-properties' -try - packagesCache = require('../package.json')?._atomPackages ? {} -catch error - packagesCache = {} +packagesCache = require('../package.json')?._atomPackages ? {} # Loads and activates a package's main module and resources such as # stylesheets, keymaps, grammar, editor properties, and menus. From 6d61588467c529e99f5bcac7368d66f0ca9e2583 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Wed, 8 Apr 2015 09:40:23 -0700 Subject: [PATCH 15/15] Only look for JSON keymaps --- build/tasks/compile-packages-slug-task.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/tasks/compile-packages-slug-task.coffee b/build/tasks/compile-packages-slug-task.coffee index f3b04683e..613a4a380 100644 --- a/build/tasks/compile-packages-slug-task.coffee +++ b/build/tasks/compile-packages-slug-task.coffee @@ -18,7 +18,7 @@ module.exports = (grunt) -> getKeymaps = (appDir) -> keymapsPath = path.join(appDir, 'keymaps') keymaps = {} - for keymapPath in fs.listSync(keymapsPath, ['.cson', '.json']) + for keymapPath in fs.listSync(keymapsPath, ['.json']) name = path.basename(keymapPath, path.extname(keymapPath)) continue unless OtherPlatforms.indexOf(name) is -1