/ src / initialize-application-window.js
initialize-application-window.js
  1  const AtomEnvironment = require('./atom-environment');
  2  const ApplicationDelegate = require('./application-delegate');
  3  const Clipboard = require('./clipboard');
  4  const TextEditor = require('./text-editor');
  5  
  6  require('./text-editor-component');
  7  require('./file-system-blob-store');
  8  require('./native-compile-cache');
  9  require('./compile-cache');
 10  require('./module-cache');
 11  
 12  if (global.isGeneratingSnapshot) {
 13    require('about');
 14    require('archive-view');
 15    require('autocomplete-atom-api');
 16    require('autocomplete-css');
 17    require('autocomplete-html');
 18    require('autocomplete-plus');
 19    require('autocomplete-snippets');
 20    require('autoflow');
 21    require('autosave');
 22    require('background-tips');
 23    require('bookmarks');
 24    require('bracket-matcher');
 25    require('command-palette');
 26    require('deprecation-cop');
 27    require('dev-live-reload');
 28    require('encoding-selector');
 29    require('exception-reporting');
 30    require('dalek');
 31    require('find-and-replace');
 32    require('fuzzy-finder');
 33    require('github');
 34    require('git-diff');
 35    require('go-to-line');
 36    require('grammar-selector');
 37    require('image-view');
 38    require('incompatible-packages');
 39    require('keybinding-resolver');
 40    require('language-c');
 41    require('language-html');
 42    require('language-javascript');
 43    require('language-ruby');
 44    require('language-rust-bundled');
 45    require('language-typescript');
 46    require('line-ending-selector');
 47    require('link');
 48    require('markdown-preview');
 49    require('metrics');
 50    require('notifications');
 51    require('open-on-github');
 52    require('package-generator');
 53    require('settings-view');
 54    require('snippets');
 55    require('spell-check');
 56    require('status-bar');
 57    require('styleguide');
 58    require('symbols-view');
 59    require('tabs');
 60    require('timecop');
 61    require('tree-view');
 62    require('update-package-dependencies');
 63    require('welcome');
 64    require('whitespace');
 65    require('wrap-guide');
 66  }
 67  
 68  const clipboard = new Clipboard();
 69  TextEditor.setClipboard(clipboard);
 70  TextEditor.viewForItem = item => atom.views.getView(item);
 71  
 72  global.atom = new AtomEnvironment({
 73    clipboard,
 74    applicationDelegate: new ApplicationDelegate(),
 75    enablePersistence: true
 76  });
 77  
 78  TextEditor.setScheduler(global.atom.views);
 79  global.atom.preloadPackages();
 80  
 81  // Like sands through the hourglass, so are the days of our lives.
 82  module.exports = function({ blobStore }) {
 83    const { updateProcessEnv } = require('./update-process-env');
 84    const path = require('path');
 85    require('./window');
 86    const getWindowLoadSettings = require('./get-window-load-settings');
 87    const { ipcRenderer } = require('electron');
 88    const { resourcePath, devMode } = getWindowLoadSettings();
 89    require('./electron-shims');
 90  
 91    // Add application-specific exports to module search path.
 92    const exportsPath = path.join(resourcePath, 'exports');
 93    require('module').globalPaths.push(exportsPath);
 94    process.env.NODE_PATH = exportsPath;
 95  
 96    // Make React faster
 97    if (!devMode && process.env.NODE_ENV == null) {
 98      process.env.NODE_ENV = 'production';
 99    }
100  
101    global.atom.initialize({
102      window,
103      document,
104      blobStore,
105      configDirPath: process.env.ATOM_HOME,
106      env: process.env
107    });
108  
109    return global.atom.startEditorWindow().then(function() {
110      // Workaround for focus getting cleared upon window creation
111      const windowFocused = function() {
112        window.removeEventListener('focus', windowFocused);
113        setTimeout(() => document.querySelector('atom-workspace').focus(), 0);
114      };
115      window.addEventListener('focus', windowFocused);
116  
117      ipcRenderer.on('environment', (event, env) => updateProcessEnv(env));
118    });
119  };