diff --git a/src/atom.coffee b/src/atom.coffee index 07569171e..7a2982101 100644 --- a/src/atom.coffee +++ b/src/atom.coffee @@ -27,6 +27,8 @@ class Atom initialize: -> @unsubscribe() + {devMode, resourcePath} = atom.getLoadSettings() + Config = require './config' Keymap = require './keymap' PackageManager = require './package-manager' @@ -35,20 +37,20 @@ class Atom ThemeManager = require './theme-manager' ContextMenuManager = require './context-menu-manager' - @packages = new PackageManager() - - #TODO Remove once packages have been updated to not touch atom.packageStates directly - @__defineGetter__ 'packageStates', => @packages.packageStates - @__defineSetter__ 'packageStates', (packageStates) => @packages.packageStates = packageStates - - @subscribe @packages, 'loaded', => @watchThemes() @themes = new ThemeManager() - @contextMenu = new ContextMenuManager(@getLoadSettings().devMode) + @contextMenu = new ContextMenuManager(devMode) @config = new Config() @pasteboard = new Pasteboard() @keymap = new Keymap() @syntax = deserialize(@getWindowState('syntax')) ? new Syntax() + @packages = new PackageManager({devMode, resourcePath, configDirPath: @config.getDirectoryPath()}) + @subscribe @packages, 'loaded', => @watchThemes() + + #TODO Remove once packages have been updated to not touch atom.packageStates directly + @__defineGetter__ 'packageStates', => @packages.packageStates + @__defineSetter__ 'packageStates', (packageStates) => @packages.packageStates = packageStates + getCurrentWindow: -> remote.getCurrentWindow() diff --git a/src/package-manager.coffee b/src/package-manager.coffee index 70eaec4aa..a2f026b2d 100644 --- a/src/package-manager.coffee +++ b/src/package-manager.coffee @@ -8,7 +8,11 @@ module.exports = class PackageManager _.extend @prototype, EventEmitter - constructor: -> + constructor: ({configDirPath, devMode, @resourcePath}) -> + @packageDirPaths = [path.join(configDirPath, "packages")] + if devMode + @packageDirPaths.unshift(path.join(configDirPath, "dev", "packages")) + @loadedPackages = {} @activePackages = {} @packageStates = {} @@ -83,10 +87,10 @@ class PackageManager resolvePackagePath: (name) -> return name if fsUtils.isDirectorySync(name) - packagePath = fsUtils.resolve(config.packageDirPaths..., name) + packagePath = fsUtils.resolve(@packageDirPaths..., name) return packagePath if fsUtils.isDirectorySync(packagePath) - packagePath = path.join(window.resourcePath, 'node_modules', name) + packagePath = path.join(@resourcePath, 'node_modules', name) return packagePath if @isInternalPackage(packagePath) isInternalPackage: (packagePath) -> @@ -108,11 +112,11 @@ class PackageManager getAvailablePackagePaths: -> packagePaths = [] - for packageDirPath in config.packageDirPaths + for packageDirPath in @packageDirPaths for packagePath in fsUtils.listSync(packageDirPath) packagePaths.push(packagePath) if fsUtils.isDirectorySync(packagePath) - for packagePath in fsUtils.listSync(path.join(window.resourcePath, 'node_modules')) + for packagePath in fsUtils.listSync(path.join(@resourcePath, 'node_modules')) packagePaths.push(packagePath) if @isInternalPackage(packagePath) _.uniq(packagePaths)