From cc44508b589a21dbc916255ff53a9731845ea76c Mon Sep 17 00:00:00 2001 From: Corey Johnson & Nathan Sobo Date: Fri, 14 Dec 2012 16:38:44 -0800 Subject: [PATCH] Register extensions in `core.extensions` on `Config.load` --- src/app/config.coffee | 33 ++++++++++++++++++++++++--------- src/app/root-view.coffee | 4 +++- 2 files changed, 27 insertions(+), 10 deletions(-) diff --git a/src/app/config.coffee b/src/app/config.coffee index 4d7112fb5..3050e9303 100644 --- a/src/app/config.coffee +++ b/src/app/config.coffee @@ -2,17 +2,22 @@ fs = require 'fs' _ = require 'underscore' EventEmitter = require 'event-emitter' +configDirPath = fs.absolute("~/.atom") +configJsonPath = fs.join(configDirPath, "config.json") +userInitScriptPath = fs.join(configDirPath, "atom.coffee") +bundledExtensionsDirPath = fs.join(resourcePath, "src/extensions") +userExtensionsDirPath = fs.join(configDirPath, "extensions") + module.exports = class Config - configDirPath: fs.absolute("~/.atom") - configJsonPath: fs.absolute("~/.atom/config.json") - userInitScriptPath: fs.absolute("~/.atom/atom.coffee") + configDirPath: configDirPath load: -> - if fs.exists(@configJsonPath) - userConfig = JSON.parse(fs.read(@configJsonPath)) + if fs.exists(configJsonPath) + userConfig = JSON.parse(fs.read(configJsonPath)) _.extend(this, userConfig) @assignDefaults() + @registerNewExtensions() @requireUserInitScript() assignDefaults: -> @@ -21,6 +26,18 @@ class Config @editor ?= {} _.defaults(@editor, require('editor').configDefaults) + registerNewExtensions: -> + registeredExtensions = _.pluck(@core.extensions, 'name') + for extensionName in _.unique(@listExtensionNames()) + unless _.contains(registeredExtensions, extensionName) + console.log "registering", extensionName + @core.extensions.push(name: extensionName, enabled: true) + @update() + + listExtensionNames: -> + fs.list(bundledExtensionsDirPath).concat(fs.list(userExtensionsDirPath)).map (path) -> + fs.base(path) + update: (keyPathString, value) -> @setValueAtKeyPath(keyPathString.split('.'), value) if keyPathString @save() @@ -31,14 +48,12 @@ class Config delete keysToWrite.eventHandlersByEventName delete keysToWrite.eventHandlersByNamespace delete keysToWrite.configDirPath - delete keysToWrite.configJsonPath - delete keysToWrite.userInitScriptPath - fs.write(@configJsonPath, JSON.stringify(keysToWrite, undefined, 2) + "\n") + fs.write(configJsonPath, JSON.stringify(keysToWrite, undefined, 2) + "\n") requireUserInitScript: -> try console.log @userInitScriptPath - require @userInitScriptPath if fs.exists(@userInitScriptPath) + require userInitScriptPath if fs.exists(userInitScriptPath) catch error console.error "Failed to load `#{@userInitScriptPath}`", error.stack, error diff --git a/src/app/root-view.coffee b/src/app/root-view.coffee index 54835e21d..24790ca5c 100644 --- a/src/app/root-view.coffee +++ b/src/app/root-view.coffee @@ -15,7 +15,9 @@ TextMateTheme = require 'text-mate-theme' module.exports = class RootView extends View - @configDefaults: {} + @configDefaults: { + extensions: [] + } @content: -> @div id: 'root-view', tabindex: -1, =>