2014-06-22 06:56:00 +00:00
|
|
|
fs = require 'fs'
|
|
|
|
path = require 'path'
|
|
|
|
module = require 'module'
|
|
|
|
util = require 'util'
|
2013-04-15 07:39:54 +00:00
|
|
|
|
2013-12-15 06:20:28 +00:00
|
|
|
# Expose information of current process.
|
2014-05-21 14:44:43 +00:00
|
|
|
process.type = 'browser'
|
2014-03-16 05:24:25 +00:00
|
|
|
process.resourcesPath = path.resolve process.argv[1], '..', '..', '..', '..'
|
2013-12-15 06:20:28 +00:00
|
|
|
|
|
|
|
# We modified the original process.argv to let node.js load the atom.js,
|
|
|
|
# we need to restore it here.
|
2013-12-11 15:59:03 +00:00
|
|
|
process.argv.splice 1, 1
|
|
|
|
|
2014-01-31 08:40:20 +00:00
|
|
|
# Pick out switches appended by atom-shell.
|
|
|
|
startMark = process.argv.indexOf '--atom-shell-switches-start'
|
|
|
|
endMark = process.argv.indexOf '--atom-shell-switches-end'
|
2014-07-31 08:58:59 +00:00
|
|
|
process.argv.splice startMark, endMark - startMark + 1
|
2014-01-31 08:40:20 +00:00
|
|
|
|
2013-07-07 03:20:30 +00:00
|
|
|
# Add browser/api/lib to require's search paths,
|
2013-09-27 03:02:08 +00:00
|
|
|
# which contains javascript part of Atom's built-in libraries.
|
2014-06-22 06:56:00 +00:00
|
|
|
globalPaths = module.globalPaths
|
2014-03-16 05:24:25 +00:00
|
|
|
globalPaths.push path.join process.resourcesPath, 'atom', 'browser', 'api', 'lib'
|
2013-04-24 08:43:01 +00:00
|
|
|
|
2013-12-11 15:59:03 +00:00
|
|
|
# Do loading in next tick since we still need some initialize work before
|
|
|
|
# native bindings can work.
|
|
|
|
setImmediate ->
|
2014-01-13 05:57:08 +00:00
|
|
|
# Import common settings.
|
|
|
|
require path.resolve(__dirname, '..', '..', 'common', 'lib', 'init.js')
|
|
|
|
|
2013-12-29 14:32:26 +00:00
|
|
|
if process.platform is 'win32'
|
|
|
|
# Redirect node's console to use our own implementations, since node can not
|
|
|
|
# handle console output when running as GUI program.
|
2014-02-12 12:17:14 +00:00
|
|
|
print = (args...) ->
|
|
|
|
process.log util.format(args...)
|
|
|
|
console.log = console.error = console.warn = print
|
|
|
|
process.stdout.write = process.stderr.write = print
|
2013-12-29 14:32:26 +00:00
|
|
|
|
|
|
|
# Always returns EOF for stdin stream.
|
|
|
|
Readable = require('stream').Readable
|
|
|
|
stdin = new Readable
|
|
|
|
stdin.push null
|
|
|
|
process.__defineGetter__ 'stdin', -> stdin
|
|
|
|
|
2013-12-11 15:59:03 +00:00
|
|
|
# Don't quit on fatal error.
|
|
|
|
process.on 'uncaughtException', (error) ->
|
|
|
|
# Show error in GUI.
|
|
|
|
message = error.stack ? "#{error.name}: #{error.message}"
|
|
|
|
require('dialog').showMessageBox
|
|
|
|
type: 'warning'
|
2014-09-01 19:02:03 +00:00
|
|
|
title: 'A javascript error occured in the browser'
|
2013-12-11 15:59:03 +00:00
|
|
|
message: 'uncaughtException'
|
|
|
|
detail: message
|
|
|
|
buttons: ['OK']
|
2013-04-15 07:39:54 +00:00
|
|
|
|
2013-12-11 15:59:03 +00:00
|
|
|
# Load the RPC server.
|
|
|
|
require './rpc-server.js'
|
2013-04-24 08:43:01 +00:00
|
|
|
|
2013-12-11 15:59:03 +00:00
|
|
|
# Now we try to load app's package.json.
|
|
|
|
packageJson = null
|
2013-04-15 07:39:54 +00:00
|
|
|
|
2013-12-11 15:59:03 +00:00
|
|
|
packagePath = path.join process.resourcesPath, 'app'
|
|
|
|
try
|
|
|
|
# First we try to load process.resourcesPath/app
|
|
|
|
packageJson = JSON.parse(fs.readFileSync(path.join(packagePath, 'package.json')))
|
|
|
|
catch error
|
|
|
|
# If not found then we load browser/default_app
|
2014-03-16 07:19:09 +00:00
|
|
|
packagePath = path.join process.resourcesPath, 'default_app'
|
2013-12-11 15:59:03 +00:00
|
|
|
packageJson = JSON.parse(fs.readFileSync(path.join(packagePath, 'package.json')))
|
2013-04-15 07:39:54 +00:00
|
|
|
|
2013-12-11 15:59:03 +00:00
|
|
|
# Set application's version.
|
|
|
|
app = require 'app'
|
|
|
|
app.setVersion packageJson.version if packageJson.version?
|
2013-12-05 03:30:06 +00:00
|
|
|
|
2013-12-11 15:59:03 +00:00
|
|
|
# Set application's name.
|
|
|
|
if packageJson.productName?
|
|
|
|
app.setName packageJson.productName
|
|
|
|
else if packageJson.name?
|
|
|
|
app.setName packageJson.name
|
2013-12-05 03:30:06 +00:00
|
|
|
|
2014-09-18 11:12:24 +00:00
|
|
|
# Set application's desktop name.
|
|
|
|
if packageJson.desktopName?
|
|
|
|
app.setDesktopName packageJson.desktopName
|
|
|
|
else
|
2014-09-18 14:58:17 +00:00
|
|
|
app.setDesktopName '#{app.getName()}.desktop'
|
2014-09-18 11:12:24 +00:00
|
|
|
|
2014-08-28 06:58:15 +00:00
|
|
|
# Load the chrome extension support.
|
|
|
|
require './chrome-extension.js'
|
|
|
|
|
2013-12-11 15:59:03 +00:00
|
|
|
# Finally load app's main.js and transfer control to C++.
|
2014-06-22 06:56:00 +00:00
|
|
|
module._load path.join(packagePath, packageJson.main), module, true
|