From 1efda55761c29fbe2e7afe8df608c0f192b6cda0 Mon Sep 17 00:00:00 2001 From: Wliu Date: Mon, 10 Oct 2016 14:19:30 -0400 Subject: [PATCH 001/184] Redirect apm scripts to use the actual apm ones --- resources/win/apm.cmd | 2 +- resources/win/apm.sh | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/resources/win/apm.cmd b/resources/win/apm.cmd index 510168983..371172c43 100644 --- a/resources/win/apm.cmd +++ b/resources/win/apm.cmd @@ -1,3 +1,3 @@ @echo off -"%~dp0\..\app\apm\bin\node.exe" "%~dp0\..\app\apm\lib\cli.js" %* +"%~dp0\..\app\apm\bin\apm.cmd" %* diff --git a/resources/win/apm.sh b/resources/win/apm.sh index b50a70a82..99ccfec69 100644 --- a/resources/win/apm.sh +++ b/resources/win/apm.sh @@ -1,4 +1,3 @@ #!/bin/sh -directory=$(dirname "$0") -"$directory/../app/apm/bin/node.exe" "$directory/../app/apm/lib/cli.js" "$@" +"$(dirname "$0")/../app/apm/apm.sh" "$@" From c29b8be17729a1b3959fb3ffe45588ff839ffe13 Mon Sep 17 00:00:00 2001 From: "Jan T. Sott" Date: Wed, 19 Oct 2016 09:29:37 +0200 Subject: [PATCH 002/184] Add language-nlf All features of `language-nlf` have been merged into `language-nsis`. The former will no longer be updated. --- script/deprecated-packages.json | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/script/deprecated-packages.json b/script/deprecated-packages.json index 08f4d1186..12638967e 100644 --- a/script/deprecated-packages.json +++ b/script/deprecated-packages.json @@ -866,6 +866,10 @@ "hasDeprecations": true, "latestHasDeprecations": true }, + "language-nlf": { + "hasAlternative": true, + "alternative": "language-nsis" + }, "language-rspec": { "version": "<=0.2.1", "hasDeprecations": true, From f5f9916880741e826a009b20db3cbcd86cbf2a97 Mon Sep 17 00:00:00 2001 From: Ian Olsen Date: Tue, 20 Sep 2016 17:08:30 -0700 Subject: [PATCH 003/184] add new pane switch events for MRU UI --- src/pane.coffee | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/src/pane.coffee b/src/pane.coffee index e4003ad35..9035e78e0 100644 --- a/src/pane.coffee +++ b/src/pane.coffee @@ -234,6 +234,39 @@ class Pane extends Model onDidChangeActiveItem: (callback) -> @emitter.on 'did-change-active-item', callback + # Public: Invoke the given callback when {::activateNextRecentlyUsedItem} + # has been called, either initiating or continuing a forward MRU traversal of + # pane items. + # + # * `callback` {Function} to be called with when the active item changes. + # * `nextRecentlyUsedItem` The next MRU item, now being set active + # + # Returns a {Disposable} on which `.dispose()` can be called to unsubscribe. + onChooseNextMRUItem: (callback) -> + @emitter.on 'choose-next-mru-item', callback + + # Public: Invoke the given callback when {::activatePreviousRecentlyUsedItem} + # has been called, either initiating or continuing a reverse MRU traversal of + # pane items. + # + # * `callback` {Function} to be called with when the active item changes. + # * `previousRecentlyUsedItem` The previous MRU item, now being set active + # + # Returns a {Disposable} on which `.dispose()` can be called to unsubscribe. + onChooseLastMRUItem: (callback) -> + @emitter.on 'choose-last-mru-item', callback + + # Public: Invoke the given callback when {::moveActiveItemToTopOfStack} + # has been called, terminating an MRU traversal of pane items and moving the + # current active item to the top of the stack. Typically bound to a modifier + # (e.g. CTRL) key up event. + # + # * `callback` {Function} to be called with when the MRU traversal is done. + # + # Returns a {Disposable} on which `.dispose()` can be called to unsubscribe. + onDoneChoosingMRUItem: (callback) -> + @emitter.on 'done-choosing-mru-item', callback + # Public: Invoke the given callback with the current and future values of # {::getActiveItem}. # @@ -334,6 +367,7 @@ class Pane extends Model @itemStackIndex = @itemStack.length if @itemStackIndex is 0 @itemStackIndex = @itemStackIndex - 1 nextRecentlyUsedItem = @itemStack[@itemStackIndex] + @emitter.emit 'choose-next-mru-item', nextRecentlyUsedItem @setActiveItem(nextRecentlyUsedItem, modifyStack: false) # Makes the previous item in the itemStack active. @@ -343,12 +377,15 @@ class Pane extends Model @itemStackIndex = -1 @itemStackIndex = @itemStackIndex + 1 previousRecentlyUsedItem = @itemStack[@itemStackIndex] + @emitter.emit 'choose-last-mru-item', previousRecentlyUsedItem @setActiveItem(previousRecentlyUsedItem, modifyStack: false) # Moves the active item to the end of the itemStack once the ctrl key is lifted moveActiveItemToTopOfStack: -> delete @itemStackIndex @addItemToStack(@activeItem) + @emitter.emit 'done-choosing-mru-item' + # Public: Makes the next item active. activateNextItem: -> From b957b46c08088624f62fb6e9b80281b77f7b9c28 Mon Sep 17 00:00:00 2001 From: Barry Allard Date: Fri, 21 Oct 2016 00:34:34 -0700 Subject: [PATCH 004/184] atom.sh: fix for renamed .app Needed because `node-gyp` doesn't work with a space in `Atom Beta.app`, and developers/others want to multiple versions of Atom side-by-side. --- atom.sh | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/atom.sh b/atom.sh index a8c30fa19..27d939273 100755 --- a/atom.sh +++ b/atom.sh @@ -55,11 +55,17 @@ if [ $EXPECT_OUTPUT ]; then fi if [ $OS == 'Mac' ]; then + ATOM_APP="$(dirname "$(dirname "$(dirname "$(dirname "$(readlink "$0")")")")")" + if [ "$ATOM_APP" == . ]; then + unset ATOM_APP + else + ATOM_PATH="$(dirname "$ATOM_APP")" + ATOM_APP_NAME="$(basename "$ATOM_APP")" + fi + if [ -n "$BETA_VERSION" ]; then - ATOM_APP_NAME="Atom Beta.app" ATOM_EXECUTABLE_NAME="Atom Beta" else - ATOM_APP_NAME="Atom.app" ATOM_EXECUTABLE_NAME="Atom" fi From 25650e8de0b1ba3980322ba8a911c02621025357 Mon Sep 17 00:00:00 2001 From: Barry Allard Date: Mon, 24 Oct 2016 09:38:34 -0700 Subject: [PATCH 005/184] atom.sh: fix direct execute --- atom.sh | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/atom.sh b/atom.sh index 27d939273..47c902ce9 100755 --- a/atom.sh +++ b/atom.sh @@ -55,7 +55,12 @@ if [ $EXPECT_OUTPUT ]; then fi if [ $OS == 'Mac' ]; then - ATOM_APP="$(dirname "$(dirname "$(dirname "$(dirname "$(readlink "$0")")")")")" + if [ -L "$0" ]; then + SCRIPT="$(readlink "$0")" + else + SCRIPT="$0" + fi + ATOM_APP="$(dirname "$(dirname "$(dirname "$(dirname "$SCRIPT")")")")" if [ "$ATOM_APP" == . ]; then unset ATOM_APP else From 6472f069afb9d6a2b3cd4a64b589c7b372e877cf Mon Sep 17 00:00:00 2001 From: Lee Dohm Date: Sun, 6 Nov 2016 10:55:07 -0800 Subject: [PATCH 006/184] Improve core.openEmptyEditorOnStart description --- src/config-schema.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/config-schema.js b/src/config-schema.js index 63be1273f..00e6fb941 100644 --- a/src/config-schema.js +++ b/src/config-schema.js @@ -122,7 +122,7 @@ const configSchema = { ] }, openEmptyEditorOnStart: { - description: 'Automatically open an empty editor on startup.', + description: 'When checked opens an untitled editor on _File > New Window_; otherwise no buffer is opened.', type: 'boolean', default: true }, From 0a4001934617d5c0ff0626c572680032198001cf Mon Sep 17 00:00:00 2001 From: Lee Dohm Date: Sun, 6 Nov 2016 11:25:43 -0800 Subject: [PATCH 007/184] Add config schema for core.restorePreviousWindowsOnStart Additionally updates the description for core.openEmptyEditorOnStart to match. --- src/config-schema.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/config-schema.js b/src/config-schema.js index 00e6fb941..ee1e9deb1 100644 --- a/src/config-schema.js +++ b/src/config-schema.js @@ -122,7 +122,12 @@ const configSchema = { ] }, openEmptyEditorOnStart: { - description: 'When checked opens an untitled editor on _File > New Window_; otherwise no buffer is opened.', + description: 'When checked opens an untitled editor when loading a blank environment (such as with _File > New Window_ or when "Restore Previous Windows On Start" is unchecked); otherwise no buffer is opened when loading a blank environment. This setting has no effect when restoring a previous state.', + type: 'boolean', + default: true + }, + restorePreviousWindowsOnStart: { + description: 'When checked restores the last state of all Atom windows when started from the icon or `atom` by itself from the command line; otherwise a blank environment is loaded.', type: 'boolean', default: true }, From 03fe5c343ba0bf9616666cdf2ba6fd3cbd7dd3e3 Mon Sep 17 00:00:00 2001 From: Lee Dohm Date: Sun, 6 Nov 2016 11:30:03 -0800 Subject: [PATCH 008/184] Consistently use 'editor' in description --- src/config-schema.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/config-schema.js b/src/config-schema.js index ee1e9deb1..93abc1b54 100644 --- a/src/config-schema.js +++ b/src/config-schema.js @@ -122,7 +122,7 @@ const configSchema = { ] }, openEmptyEditorOnStart: { - description: 'When checked opens an untitled editor when loading a blank environment (such as with _File > New Window_ or when "Restore Previous Windows On Start" is unchecked); otherwise no buffer is opened when loading a blank environment. This setting has no effect when restoring a previous state.', + description: 'When checked opens an untitled editor when loading a blank environment (such as with _File > New Window_ or when "Restore Previous Windows On Start" is unchecked); otherwise no editor is opened when loading a blank environment. This setting has no effect when restoring a previous state.', type: 'boolean', default: true }, From c7f9a76d4b615ffbae8be7f941eccfdd4f3964d4 Mon Sep 17 00:00:00 2001 From: Hubot Date: Wed, 9 Nov 2016 13:55:16 -0600 Subject: [PATCH 009/184] 1.14.0-dev --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 2564e7bdd..68c5167c0 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "atom", "productName": "Atom", - "version": "1.13.0-dev", + "version": "1.14.0-dev", "description": "A hackable text editor for the 21st Century.", "main": "./src/main-process/main.js", "repository": { From 8e6efe928f24079b0a194bdd9a246848f740a0cb Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Thu, 10 Nov 2016 13:28:54 -0700 Subject: [PATCH 010/184] :arrow_up: find-and-replace --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 68c5167c0..79dcf3d19 100644 --- a/package.json +++ b/package.json @@ -100,7 +100,7 @@ "dev-live-reload": "0.47.0", "encoding-selector": "0.22.0", "exception-reporting": "0.40.0", - "find-and-replace": "0.204.1", + "find-and-replace": "0.204.2", "fuzzy-finder": "1.4.0", "git-diff": "1.2.0", "go-to-line": "0.31.2", From 6c5457b36ad8834a58e3a80674bb80b37bb62cfc Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Thu, 10 Nov 2016 14:14:00 -0700 Subject: [PATCH 011/184] :arrow_up: snippets --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 79dcf3d19..d0693f33f 100644 --- a/package.json +++ b/package.json @@ -116,7 +116,7 @@ "open-on-github": "1.2.1", "package-generator": "1.0.2", "settings-view": "0.244.0", - "snippets": "1.0.3", + "snippets": "1.0.4", "spell-check": "0.68.5", "status-bar": "1.6.0", "styleguide": "0.48.0", From e9b471a24fa9f039874d040c8b9f4e1e8f260fe2 Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Thu, 10 Nov 2016 14:14:09 -0700 Subject: [PATCH 012/184] :arrow_up: atom-keymap --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index d0693f33f..b20ea4480 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "electronVersion": "1.3.6", "dependencies": { "async": "0.2.6", - "atom-keymap": "7.1.1", + "atom-keymap": "7.1.2", "atom-space-pen-views": "^2.0.0", "atom-ui": "0.4.1", "babel-core": "5.8.38", From 7dfc99989fbf59f0bb2791c315fc7b02a757a474 Mon Sep 17 00:00:00 2001 From: Joe Fitzgerald Date: Thu, 10 Nov 2016 14:23:08 -0700 Subject: [PATCH 013/184] Timeout when invoking the shell, log information to the console - Partially addresses #13084 --- src/update-process-env.js | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/update-process-env.js b/src/update-process-env.js index 6544a6612..227f0914f 100644 --- a/src/update-process-env.js +++ b/src/update-process-env.js @@ -63,7 +63,18 @@ function getEnvFromShell (env) { return } - let {stdout} = spawnSync(env.SHELL, ['-ilc', 'command env'], {encoding: 'utf8'}) + let {stdout, error, status, signal} = spawnSync(env.SHELL, ['-ilc', 'command env'], {encoding: 'utf8', timeout: 5000}) + if (error) { + if (error.handle) { + error.handle() + } + console.log(error) + } + + if (status !== 0) { + console.log('warning: ' + env.SHELL + '-ilc "command env" failed with status (' + status + ') and signal (' + signal + ')') + } + if (stdout) { let result = {} for (let line of stdout.split('\n')) { From c6843cde818d2b76fb91a61eabf1b29c87e23bc8 Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Thu, 10 Nov 2016 15:07:15 -0700 Subject: [PATCH 014/184] :arrow_up: atom-keymap --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index b20ea4480..aead2f4ff 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "electronVersion": "1.3.6", "dependencies": { "async": "0.2.6", - "atom-keymap": "7.1.2", + "atom-keymap": "7.1.3", "atom-space-pen-views": "^2.0.0", "atom-ui": "0.4.1", "babel-core": "5.8.38", From 0d0a2ae7b13aae4ef921b6f8b681fc8b987728cd Mon Sep 17 00:00:00 2001 From: Damien Guard Date: Fri, 21 Oct 2016 16:47:25 -0700 Subject: [PATCH 015/184] Windows 64-bit version of Atom --- README.md | 7 ++--- appveyor.yml | 1 + docs/build-instructions/windows.md | 34 +++++++++------------ script/lib/compress-artifacts.js | 34 ++++++++++----------- script/lib/create-windows-installer.js | 3 +- script/lib/install-atom-dependencies.js | 4 --- script/lib/package-application.js | 10 +++--- script/package.json | 2 +- src/main-process/atom-application.coffee | 2 +- src/main-process/auto-update-manager.coffee | 4 ++- src/main-process/start.js | 2 +- 11 files changed, 48 insertions(+), 55 deletions(-) diff --git a/README.md b/README.md index bb6f6998e..53e11a986 100644 --- a/README.md +++ b/README.md @@ -33,15 +33,14 @@ Atom will automatically update when a new release is available. ### Windows -Download the latest [AtomSetup.exe installer](https://github.com/atom/atom/releases/latest). +Download the latest [Atom installer](https://github.com/atom/atom/releases/latest). AtomSetup.exe is 32-bit, AtomSetup-x64.exe for 64-bit systems. Atom will automatically update when a new release is available. -You can also download an `atom-windows.zip` file from the [releases page](https://github.com/atom/atom/releases/latest). +You can also download `atom-windows.zip` (32-bit) or `atom-x64-windows.zip` (64-bit) from the [releases page](https://github.com/atom/atom/releases/latest). The `.zip` version will not automatically update. -Using [chocolatey](https://chocolatey.org/)? Run `cinst Atom` to install -the latest version of Atom. +Using [chocolatey](https://chocolatey.org/)? Run `cinst Atom` to install the latest version of Atom. ### Debian Linux (Ubuntu) diff --git a/appveyor.yml b/appveyor.yml index f194661c7..af8260618 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -8,6 +8,7 @@ clone_depth: 10 platform: - x86 + - x64 environment: global: diff --git a/docs/build-instructions/windows.md b/docs/build-instructions/windows.md index 72656f4a7..68625b217 100644 --- a/docs/build-instructions/windows.md +++ b/docs/build-instructions/windows.md @@ -2,20 +2,20 @@ ## Requirements -* Node.js 4.4.x or later +* Node.js 4.4.x or later (the architecture of node available to the build system will determine whether you build 32-bit or 64-bit Atom) * Python v2.7.x - * The python.exe must be available at `%SystemDrive%\Python27\python.exe`. If it is installed elsewhere, you can create a symbolic link to the directory containing the python.exe using: `mklink /d %SystemDrive%\Python27 D:\elsewhere\Python27` + * The python.exe must be available at `%SystemDrive%\Python27\python.exe`. If it is installed elsewhere create a symbolic link to the directory containing the python.exe using: `mklink /d %SystemDrive%\Python27 D:\elsewhere\Python27` * Visual Studio, either: * [Visual C++ Build Tools 2015](http://landinghub.visualstudio.com/visual-cpp-build-tools) * [Visual Studio 2013 Update 5](https://www.visualstudio.com/en-us/downloads/download-visual-studio-vs) (Express Edition or better) * [Visual Studio 2015](https://www.visualstudio.com/en-us/downloads/download-visual-studio-vs) (Community Edition or better) - Whichever version you use, ensure that: + Also ensure that: * The default installation folder is chosen so the build tools can find it * If using Visual Studio make sure Visual C++ support is selected/installed * If using Visual C++ Build Tools make sure Windows 8 SDK is selected/installed * A `git` command is in your path - * Set the `GYP_MSVS_VERSION` environment variable to the Visual Studio/Build Tools version (`2013` or `2015`) e.g. ``[Environment]::SetEnvironmentVariable("GYP_MSVS_VERSION", "2015", "User")`` in PowerShell or set it in Windows advanced system settings control panel. + * Set the `GYP_MSVS_VERSION` environment variable to the Visual Studio/Build Tools version (`2013` or `2015`) e.g. ``[Environment]::SetEnvironmentVariable("GYP_MSVS_VERSION", "2015", "User")`` in PowerShell (or set it in Windows advanced system settings). ## Instructions @@ -32,8 +32,8 @@ To also install the newly built application, use `script\build --create-windows- ### `script\build` Options * `--code-sign`: signs the application with the GitHub certificate specified in `$WIN_P12KEY_URL`. -* `--compress-artifacts`: zips the generated application as `out/atom-windows.zip` (requires 7-zip). -* `--create-windows-installer`: creates an `.msi`, an `.exe` and a `.nupkg` installer in the `out/` directory. +* `--compress-artifacts`: zips the generated application as `out\atom-windows.zip` (requires [7-Zip](http://www.7-zip.org)). +* `--create-windows-installer`: creates an `.msi`, an `.exe` and two `.nupkg` packages in the `out` directory. * `--install`: installs the application in `%LOCALAPPDATA%\Atom\app-dev\`. ### Running tests @@ -53,22 +53,18 @@ When building Atom from source, the `apm` command is not added to the system pat ### Common Errors * `node is not recognized` - * If you just installed Node.js, you'll need to restart Command Prompt before the `node` command is available on your Path. + * If you just installed Node.js, you'll need to restart Command Prompt before the `node` command is available on your path. * `msbuild.exe failed with exit code: 1` - * If you installed Visual Studio, ensure you have Visual C++ support installed. Go into Add/Remove Programs, select Visual Studio, press Modify, and then check the Visual C++ box. - * If you installed Visual C++ Build Tools, ensure you have Windows 8 SDK support installed. Go into Add/Remove Programs, select Visual Studio, press Modify and then check the Windows 8 SDK box. + * If using **Visual Studio**, ensure you have the **Visual C++** component installed. Go into Add/Remove Programs, select Visual Studio, press Modify, and then check the Visual C++ box. + * If using **Visual C++ Build Tools**, ensure you have the **Windows 8 SDK** component installed. Go into Add/Remove Programs, select Visual C++ Build Tools, press Modify and then check the Windows 8 SDK box. -* `script\build` stop with no error or warning shortly after displaying the versions of node, npm and Python +* `script\build` stops with no error or warning shortly after displaying the versions of node, npm and Python * Make sure that the path where you have checked out Atom does not include a space. For example, use `C:\atom` instead of `C:\my stuff\atom`. - -* `script\build` outputs only the Node.js and Python versions before returning - * Try moving the repository to `C:\atom`. Most likely, the path is too long. - See [issue #2200](https://github.com/atom/atom/issues/2200). + * Try moving the repository to `C:\atom`. Most likely, the path is too long. See [issue #2200](https://github.com/atom/atom/issues/2200). * `error MSB4025: The project file could not be loaded. Invalid character in the given encoding.` - * This can occur because your home directory (`%USERPROFILE%`) has non-ASCII - characters in it. This is a bug in [gyp](https://code.google.com/p/gyp/) + * This can occur because your home directory (`%USERPROFILE%`) has non-ASCII characters in it. This is a bug in [gyp](https://code.google.com/p/gyp/) which is used to build native Node.js modules and there is no known workaround. * https://github.com/TooTallNate/node-gyp/issues/297 * https://code.google.com/p/gyp/issues/detail?id=393 @@ -80,14 +76,14 @@ When building Atom from source, the `apm` command is not added to the system pat * See the next item. * `error MSB8020: The build tools for Visual Studio 201? (Platform Toolset = 'v1?0') cannot be found.` - * Try setting the `GYP_MSVS_VERSION` environment variable to 2013 or 2015 depending on what version of Visual Studio/Build Tools is installed and then `script\clean` followed by `script\build` (re-open the Command Prompt if you set the variable using the GUI). + * Try setting the `GYP_MSVS_VERSION` environment variable to **2013** or **2015** depending on what version of Visual Studio/Build Tools is installed and then `script\clean` followed by `script\build` (re-open the Command Prompt if you set the variable using the GUI). * `'node-gyp' is not recognized as an internal or external command, operable program or batch file.` * Try running `npm install -g node-gyp`, and run `script\build` again. * Other `node-gyp` errors on first build attempt, even though the right Node.js and Python versions are installed. - * Do try the build command one more time, as experience shows it often works on second try in many of these cases. + * Do try the build command one more time as experience shows it often works on second try in many cases. ### Windows build error reports in atom/atom * If all fails, use [this search](https://github.com/atom/atom/search?q=label%3Abuild-error+label%3Awindows&type=Issues) to get a list of reports about build errors on Windows, and see if yours has already been reported. -* If it hasn't, please open a new issue with your Windows version, architecture (x86 or amd64), and a screenshot of your build output, including the Node.js and Python versions. +* If it hasn't, please open a new issue with your Windows version, architecture (x86 or x64), and a screenshot of your build output, including the Node.js and Python versions. diff --git a/script/lib/compress-artifacts.js b/script/lib/compress-artifacts.js index 5287b64a7..54a637162 100644 --- a/script/lib/compress-artifacts.js +++ b/script/lib/compress-artifacts.js @@ -7,23 +7,7 @@ const spawnSync = require('./spawn-sync') const CONFIG = require('../config') module.exports = function (packagedAppPath) { - let appArchiveName - if (process.platform === 'darwin') { - appArchiveName = 'atom-mac.zip' - } else if (process.platform === 'win32') { - appArchiveName = 'atom-windows.zip' - } else { - let arch - if (process.arch === 'ia32') { - arch = 'i386' - } else if (process.arch === 'x64') { - arch = 'amd64' - } else { - arch = process.arch - } - appArchiveName = `atom-${arch}.tar.gz` - } - const appArchivePath = path.join(CONFIG.buildOutputPath, appArchiveName) + const appArchivePath = path.join(CONFIG.buildOutputPath, getArchiveName()) compress(packagedAppPath, appArchivePath) if (process.platform === 'darwin') { @@ -32,6 +16,22 @@ module.exports = function (packagedAppPath) { } } +function getArchiveName () { + switch (process.platform) { + case 'darwin': return 'atom-mac.zip' + case 'win32': return `atom-windows.zip` + default: return `atom-${getLinuxArchiveArch()}.tar.gz` + } +} + +function getLinuxArchiveArch () { + switch (process.arch) { + case 'ia32': return 'i386' + case 'x64' : return 'amd64' + default: return process.arch + } +} + function compress (inputDirPath, outputArchivePath) { if (fs.existsSync(outputArchivePath)) { console.log(`Deleting "${outputArchivePath}"`) diff --git a/script/lib/create-windows-installer.js b/script/lib/create-windows-installer.js index b8aa560d9..aebef9611 100644 --- a/script/lib/create-windows-installer.js +++ b/script/lib/create-windows-installer.js @@ -11,13 +11,14 @@ const spawnSync = require('./spawn-sync') const CONFIG = require('../config') module.exports = function (packagedAppPath, codeSign) { + const archSuffix = process.arch === 'ia32' ? '' : '-' + process.arch const options = { appDirectory: packagedAppPath, authors: 'GitHub Inc.', iconUrl: `https://raw.githubusercontent.com/atom/atom/master/resources/app-icons/${CONFIG.channel}/atom.ico`, loadingGif: path.join(CONFIG.repositoryRootPath, 'resources', 'win', 'loading.gif'), outputDirectory: CONFIG.buildOutputPath, - remoteReleases: `https://atom.io/api/updates?version=${CONFIG.appMetadata.version}`, + remoteReleases: `https://atom.io/api/updates${archSuffix}`, setupIcon: path.join(CONFIG.repositoryRootPath, 'resources', 'app-icons', CONFIG.channel, 'atom.ico') } diff --git a/script/lib/install-atom-dependencies.js b/script/lib/install-atom-dependencies.js index 5a66132f7..5c395a29b 100644 --- a/script/lib/install-atom-dependencies.js +++ b/script/lib/install-atom-dependencies.js @@ -12,10 +12,6 @@ module.exports = function () { // Set our target (Electron) version so that node-pre-gyp can download the // proper binaries. installEnv.npm_config_target = CONFIG.appMetadata.electronVersion; - // Force 32-bit modules on Windows. (Ref.: https://github.com/atom/atom/issues/10450) - if (process.platform === 'win32') { - installEnv.npm_config_target_arch = 'ia32' - } childProcess.execFileSync( CONFIG.getApmBinPath(), ['--loglevel=error', 'install'], diff --git a/script/lib/package-application.js b/script/lib/package-application.js index 8c5ee7a4e..a9cd4372a 100644 --- a/script/lib/package-application.js +++ b/script/lib/package-application.js @@ -18,12 +18,7 @@ module.exports = function () { 'app-bundle-id': 'com.github.atom', 'app-copyright': `Copyright © 2014-${(new Date()).getFullYear()} GitHub, Inc. All rights reserved.`, 'app-version': CONFIG.appMetadata.version, - 'arch': (() => { - if (process.platform === 'linux') { - return process.arch - } else { - return process.platform === 'win32' ? 'ia32' : 'x64' - }})(), + 'arch': process.platform === 'darwin' ? 'x64' : process.arch, // OS X is 64-bit only 'asar': {unpack: buildAsarUnpackGlobExpression()}, 'build-version': CONFIG.appMetadata.version, 'download': {cache: CONFIG.electronDownloadPath}, @@ -174,6 +169,9 @@ function renamePackagedAppDir (packageOutputDirPath) { } else { const appName = CONFIG.channel === 'beta' ? 'Atom Beta' : 'Atom' packagedAppPath = path.join(CONFIG.buildOutputPath, appName) + if (process.platform === 'win32' && process.arch !== 'ia32') { + packagedAppPath += ` ${process.arch}` + } if (fs.existsSync(packagedAppPath)) fs.removeSync(packagedAppPath) fs.renameSync(packageOutputDirPath, packagedAppPath) } diff --git a/script/package.json b/script/package.json index 1f4cf782f..2ba28ba41 100644 --- a/script/package.json +++ b/script/package.json @@ -9,7 +9,7 @@ "csslint": "1.0.2", "donna": "1.0.13", "electron-packager": "7.3.0", - "electron-winstaller": "2.3.4", + "electron-winstaller": "2.4.0", "fs-extra": "0.30.0", "glob": "7.0.3", "joanna": "0.0.6", diff --git a/src/main-process/atom-application.coffee b/src/main-process/atom-application.coffee index 440b1af99..067721e05 100644 --- a/src/main-process/atom-application.coffee +++ b/src/main-process/atom-application.coffee @@ -34,7 +34,7 @@ class AtomApplication unless options.socketPath? if process.platform is 'win32' userNameSafe = new Buffer(process.env.USERNAME).toString('base64') - options.socketPath = "\\\\.\\pipe\\atom-#{options.version}-#{userNameSafe}-sock" + options.socketPath = "\\\\.\\pipe\\atom-#{options.version}-#{userNameSafe}-#{process.arch}-sock" else options.socketPath = path.join(os.tmpdir(), "atom-#{options.version}-#{process.env.USER}.sock") diff --git a/src/main-process/auto-update-manager.coffee b/src/main-process/auto-update-manager.coffee index a4a45ce73..8fdba844d 100644 --- a/src/main-process/auto-update-manager.coffee +++ b/src/main-process/auto-update-manager.coffee @@ -17,13 +17,15 @@ class AutoUpdateManager constructor: (@version, @testMode, resourcePath, @config) -> @state = IdleState @iconPath = path.resolve(__dirname, '..', '..', 'resources', 'atom.png') - @feedUrl = "https://atom.io/api/updates?version=#{@version}" process.nextTick => @setupAutoUpdater() setupAutoUpdater: -> if process.platform is 'win32' + archSuffix = if process.arch is 'ia32' then '' else '-' + process.arch + @feedUrl = "https://atom.io/api/updates#{archSuffix}" autoUpdater = require './auto-updater-win32' else + @feedUrl = "https://atom.io/api/updates?version=#{@version}" {autoUpdater} = require 'electron' autoUpdater.on 'error', (event, message) => diff --git a/src/main-process/start.js b/src/main-process/start.js index 84ae9b8c2..d4161e325 100644 --- a/src/main-process/start.js +++ b/src/main-process/start.js @@ -39,7 +39,7 @@ module.exports = function start (resourcePath, startTime) { } // NB: This prevents Win10 from showing dupe items in the taskbar - app.setAppUserModelId('com.squirrel.atom.atom') + app.setAppUserModelId('com.squirrel.atom.' + process.arch) function addPathToOpen (event, pathToOpen) { event.preventDefault() From aaf1c72f5ac6a807f204027c6797825d64c22d33 Mon Sep 17 00:00:00 2001 From: Damien Guard Date: Thu, 10 Nov 2016 22:34:51 -0800 Subject: [PATCH 016/184] Make build pass on x64 before atom.io is ready --- script/lib/create-windows-installer.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/script/lib/create-windows-installer.js b/script/lib/create-windows-installer.js index aebef9611..7de22833b 100644 --- a/script/lib/create-windows-installer.js +++ b/script/lib/create-windows-installer.js @@ -22,6 +22,11 @@ module.exports = function (packagedAppPath, codeSign) { setupIcon: path.join(CONFIG.repositoryRootPath, 'resources', 'app-icons', CONFIG.channel, 'atom.ico') } + // Remove this once an x64 version is published or atom.io is returning blank instead of 404 for RELEASES-X64 + if (process.arch === 'x64') { + options.remoteReleases = null + } + const certPath = path.join(os.tmpdir(), 'win.p12') const signing = codeSign && process.env.WIN_P12KEY_URL From 31eb91c0a7b4b23fd229282d51374b820f5b7936 Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Fri, 11 Nov 2016 08:49:29 +0100 Subject: [PATCH 017/184] :arrow_up: line-ending-selector Refs: https://github.com/atom/line-ending-selector/pull/35 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index aead2f4ff..9c7e57743 100644 --- a/package.json +++ b/package.json @@ -108,7 +108,7 @@ "image-view": "0.60.0", "incompatible-packages": "0.26.1", "keybinding-resolver": "0.35.0", - "line-ending-selector": "0.5.0", + "line-ending-selector": "0.5.1", "link": "0.31.2", "markdown-preview": "0.159.1", "metrics": "1.0.0", From e34bc188d0c88c65fa9d3adfd8a4058b8e7f710d Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Fri, 11 Nov 2016 18:39:18 +0100 Subject: [PATCH 018/184] Make updateProcessEnv asynchronous Signed-off-by: Nathan Sobo --- spec/update-process-env-spec.js | 81 +++++++++++++----------- src/atom-environment.coffee | 5 +- src/initialize-application-window.coffee | 2 - src/update-process-env.js | 22 ++++--- 4 files changed, 61 insertions(+), 49 deletions(-) diff --git a/spec/update-process-env-spec.js b/spec/update-process-env-spec.js index 8c9db2b16..55600febd 100644 --- a/spec/update-process-env-spec.js +++ b/spec/update-process-env-spec.js @@ -1,6 +1,7 @@ /** @babel */ /* eslint-env jasmine */ +import {it, fit, ffit, fffit, beforeEach, afterEach} from './async-spec-helpers' import path from 'path' import temp from 'temp' import child_process from 'child_process' @@ -22,7 +23,7 @@ describe('updateProcessEnv(launchEnv)', function () { }) describe('when the launch environment appears to come from a shell', function () { - it('updates process.env to match the launch environment', function () { + it('updates process.env to match the launch environment', async function () { process.env = { WILL_BE_DELETED: 'hi', NODE_ENV: 'the-node-env', @@ -32,7 +33,7 @@ describe('updateProcessEnv(launchEnv)', function () { const initialProcessEnv = process.env - updateProcessEnv({ATOM_DISABLE_SHELLING_OUT_FOR_ENVIRONMENT: 'true', PWD: '/the/dir', TERM: 'xterm-something', KEY1: 'value1', KEY2: 'value2'}) + await updateProcessEnv({ATOM_DISABLE_SHELLING_OUT_FOR_ENVIRONMENT: 'true', PWD: '/the/dir', TERM: 'xterm-something', KEY1: 'value1', KEY2: 'value2'}) expect(process.env).toEqual({ ATOM_DISABLE_SHELLING_OUT_FOR_ENVIRONMENT: 'true', PWD: '/the/dir', @@ -50,7 +51,7 @@ describe('updateProcessEnv(launchEnv)', function () { expect(process.env).toBe(initialProcessEnv) }) - it('allows ATOM_HOME to be overwritten only if the new value is a valid path', function () { + it('allows ATOM_HOME to be overwritten only if the new value is a valid path', async function () { let newAtomHomePath = temp.mkdirSync('atom-home') process.env = { @@ -60,7 +61,7 @@ describe('updateProcessEnv(launchEnv)', function () { ATOM_HOME: '/the/atom/home' } - updateProcessEnv({ATOM_DISABLE_SHELLING_OUT_FOR_ENVIRONMENT: 'true', PWD: '/the/dir'}) + await updateProcessEnv({ATOM_DISABLE_SHELLING_OUT_FOR_ENVIRONMENT: 'true', PWD: '/the/dir'}) expect(process.env).toEqual({ PWD: '/the/dir', ATOM_DISABLE_SHELLING_OUT_FOR_ENVIRONMENT: 'true', @@ -69,7 +70,7 @@ describe('updateProcessEnv(launchEnv)', function () { ATOM_HOME: '/the/atom/home' }) - updateProcessEnv({ATOM_DISABLE_SHELLING_OUT_FOR_ENVIRONMENT: 'true', PWD: '/the/dir', ATOM_HOME: path.join(newAtomHomePath, 'non-existent')}) + await updateProcessEnv({ATOM_DISABLE_SHELLING_OUT_FOR_ENVIRONMENT: 'true', PWD: '/the/dir', ATOM_HOME: path.join(newAtomHomePath, 'non-existent')}) expect(process.env).toEqual({ ATOM_DISABLE_SHELLING_OUT_FOR_ENVIRONMENT: 'true', PWD: '/the/dir', @@ -78,7 +79,7 @@ describe('updateProcessEnv(launchEnv)', function () { ATOM_HOME: '/the/atom/home' }) - updateProcessEnv({ATOM_DISABLE_SHELLING_OUT_FOR_ENVIRONMENT: 'true', PWD: '/the/dir', ATOM_HOME: newAtomHomePath}) + await updateProcessEnv({ATOM_DISABLE_SHELLING_OUT_FOR_ENVIRONMENT: 'true', PWD: '/the/dir', ATOM_HOME: newAtomHomePath}) expect(process.env).toEqual({ ATOM_DISABLE_SHELLING_OUT_FOR_ENVIRONMENT: 'true', PWD: '/the/dir', @@ -88,7 +89,7 @@ describe('updateProcessEnv(launchEnv)', function () { }) }) - it('allows ATOM_DISABLE_SHELLING_OUT_FOR_ENVIRONMENT to be preserved if set', function () { + it('allows ATOM_DISABLE_SHELLING_OUT_FOR_ENVIRONMENT to be preserved if set', async function () { process.env = { WILL_BE_DELETED: 'hi', NODE_ENV: 'the-node-env', @@ -96,7 +97,7 @@ describe('updateProcessEnv(launchEnv)', function () { ATOM_HOME: '/the/atom/home' } - updateProcessEnv({ATOM_DISABLE_SHELLING_OUT_FOR_ENVIRONMENT: 'true', PWD: '/the/dir', NODE_ENV: 'the-node-env', NODE_PATH: '/the/node/path', ATOM_HOME: '/the/atom/home'}) + await updateProcessEnv({ATOM_DISABLE_SHELLING_OUT_FOR_ENVIRONMENT: 'true', PWD: '/the/dir', NODE_ENV: 'the-node-env', NODE_PATH: '/the/node/path', ATOM_HOME: '/the/atom/home'}) expect(process.env).toEqual({ ATOM_DISABLE_SHELLING_OUT_FOR_ENVIRONMENT: 'true', PWD: '/the/dir', @@ -105,7 +106,7 @@ describe('updateProcessEnv(launchEnv)', function () { ATOM_HOME: '/the/atom/home' }) - updateProcessEnv({PWD: '/the/dir', NODE_ENV: 'the-node-env', NODE_PATH: '/the/node/path', ATOM_HOME: '/the/atom/home'}) + await updateProcessEnv({PWD: '/the/dir', NODE_ENV: 'the-node-env', NODE_PATH: '/the/node/path', ATOM_HOME: '/the/atom/home'}) expect(process.env).toEqual({ ATOM_DISABLE_SHELLING_OUT_FOR_ENVIRONMENT: 'true', PWD: '/the/dir', @@ -115,7 +116,7 @@ describe('updateProcessEnv(launchEnv)', function () { }) }) - it('allows an existing env variable to be updated', function () { + it('allows an existing env variable to be updated', async function () { process.env = { WILL_BE_UPDATED: 'old-value', NODE_ENV: 'the-node-env', @@ -123,7 +124,7 @@ describe('updateProcessEnv(launchEnv)', function () { ATOM_HOME: '/the/atom/home' } - updateProcessEnv(process.env) + await updateProcessEnv(process.env) expect(process.env).toEqual(process.env) let updatedEnv = { @@ -135,27 +136,31 @@ describe('updateProcessEnv(launchEnv)', function () { PWD: '/the/dir' } - updateProcessEnv(updatedEnv) + await updateProcessEnv(updatedEnv) expect(process.env).toEqual(updatedEnv) }) }) describe('when the launch environment does not come from a shell', function () { describe('on osx', function () { - it('updates process.env to match the environment in the user\'s login shell', function () { + it('updates process.env to match the environment in the user\'s login shell', async function () { process.platform = 'darwin' process.env.SHELL = '/my/custom/bash' - spyOn(child_process, 'spawnSync').andReturn({ - stdout: dedent` - FOO=BAR=BAZ=QUUX - TERM=xterm-something - PATH=/usr/bin:/bin:/usr/sbin:/sbin:/crazy/path - ` + spyOn(child_process, 'execFile').andCallFake((cmd, args, opts, callback) => { + expect(cmd).toBe('/my/custom/bash') + callback( + null, + dedent` + FOO=BAR=BAZ=QUUX + TERM=xterm-something + PATH=/usr/bin:/bin:/usr/sbin:/sbin:/crazy/path + ` + ) }) - updateProcessEnv(process.env) - expect(child_process.spawnSync.mostRecentCall.args[0]).toBe('/my/custom/bash') + await updateProcessEnv(process.env) + expect(process.env).toEqual({ FOO: 'BAR=BAZ=QUUX', TERM: 'xterm-something', @@ -163,25 +168,29 @@ describe('updateProcessEnv(launchEnv)', function () { }) // Doesn't error - updateProcessEnv(null) + await updateProcessEnv(null) }) }) describe('on linux', function () { - it('updates process.env to match the environment in the user\'s login shell', function () { + it('updates process.env to match the environment in the user\'s login shell', async function () { process.platform = 'linux' process.env.SHELL = '/my/custom/bash' - spyOn(child_process, 'spawnSync').andReturn({ - stdout: dedent` - FOO=BAR=BAZ=QUUX - TERM=xterm-something - PATH=/usr/bin:/bin:/usr/sbin:/sbin:/crazy/path - ` + spyOn(child_process, 'execFile').andCallFake((cmd, args, opts, callback) => { + expect(cmd).toBe('/my/custom/bash') + callback( + null, + dedent` + FOO=BAR=BAZ=QUUX + TERM=xterm-something + PATH=/usr/bin:/bin:/usr/sbin:/sbin:/crazy/path + ` + ) }) - updateProcessEnv(process.env) - expect(child_process.spawnSync.mostRecentCall.args[0]).toBe('/my/custom/bash') + await updateProcessEnv(process.env) + expect(process.env).toEqual({ FOO: 'BAR=BAZ=QUUX', TERM: 'xterm-something', @@ -189,18 +198,18 @@ describe('updateProcessEnv(launchEnv)', function () { }) // Doesn't error - updateProcessEnv(null) + await updateProcessEnv(null) }) }) describe('on windows', function () { - it('does not update process.env', function () { + it('does not update process.env', async function () { process.platform = 'win32' - spyOn(child_process, 'spawnSync') + spyOn(child_process, 'execFile') process.env = {FOO: 'bar'} - updateProcessEnv(process.env) - expect(child_process.spawnSync).not.toHaveBeenCalled() + await updateProcessEnv(process.env) + expect(child_process.execFile).not.toHaveBeenCalled() expect(process.env).toEqual({FOO: 'bar'}) }) }) diff --git a/src/atom-environment.coffee b/src/atom-environment.coffee index 848e6c6e8..4715feacc 100644 --- a/src/atom-environment.coffee +++ b/src/atom-environment.coffee @@ -675,7 +675,8 @@ class AtomEnvironment extends Model # Call this method when establishing a real application window. startEditorWindow: -> @unloaded = false - @loadState().then (state) => + updateProcessEnvPromise = updateProcessEnv(@getLoadSettings().env) + loadStatePromise = @loadState().then (state) => @windowDimensions = state?.windowDimensions @displayWindow().then => @commandInstaller.installAtomCommand false, (error) -> @@ -716,6 +717,8 @@ class AtomEnvironment extends Model @openInitialEmptyEditorIfNecessary() + Promise.all([loadStatePromise, updateProcessEnvPromise]) + serialize: (options) -> version: @constructor.version project: @project.serialize(options) diff --git a/src/initialize-application-window.coffee b/src/initialize-application-window.coffee index 2dbd85dcb..7d3a23db7 100644 --- a/src/initialize-application-window.coffee +++ b/src/initialize-application-window.coffee @@ -8,8 +8,6 @@ module.exports = ({blobStore}) -> {resourcePath, devMode, env} = getWindowLoadSettings() require './electron-shims' - updateProcessEnv(env) - # Add application-specific exports to module search path. exportsPath = path.join(resourcePath, 'exports') require('module').globalPaths.push(exportsPath) diff --git a/src/update-process-env.js b/src/update-process-env.js index 227f0914f..8a308f3d9 100644 --- a/src/update-process-env.js +++ b/src/update-process-env.js @@ -1,7 +1,7 @@ /** @babel */ import fs from 'fs' -import {spawnSync} from 'child_process' +import childProcess from 'child_process' const ENVIRONMENT_VARIABLES_TO_PRESERVE = new Set([ 'NODE_ENV', @@ -15,10 +15,10 @@ const PLATFORMS_KNOWN_TO_WORK = new Set([ 'linux' ]) -function updateProcessEnv (launchEnv) { +async function updateProcessEnv (launchEnv) { let envToAssign if (launchEnv && shouldGetEnvFromShell(launchEnv)) { - envToAssign = getEnvFromShell(launchEnv) + envToAssign = await getEnvFromShell(launchEnv) } else if (launchEnv && launchEnv.PWD) { envToAssign = launchEnv } @@ -58,23 +58,25 @@ function shouldGetEnvFromShell (env) { return true } -function getEnvFromShell (env) { +async function getEnvFromShell (env) { if (!shouldGetEnvFromShell(env)) { - return + return null } - let {stdout, error, status, signal} = spawnSync(env.SHELL, ['-ilc', 'command env'], {encoding: 'utf8', timeout: 5000}) + let {stdout, error} = await new Promise((resolve) => { + childProcess.execFile(env.SHELL, ['-ilc', 'command env'], {encoding: 'utf8', timeout: 5000}, (error, stdout) => { + resolve({stdout, error}) + }) + }) + if (error) { if (error.handle) { error.handle() } + console.log('warning: ' + env.SHELL + '-ilc "command env" failed with signal (' + error.signal + ')') console.log(error) } - if (status !== 0) { - console.log('warning: ' + env.SHELL + '-ilc "command env" failed with status (' + status + ') and signal (' + signal + ')') - } - if (stdout) { let result = {} for (let line of stdout.split('\n')) { From 9176a6429f1a1306d8a20609a5382ffb40d7fd40 Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Fri, 11 Nov 2016 19:08:34 +0100 Subject: [PATCH 019/184] Add `core:loaded-shell-environment` activation hook Signed-off-by: Nathan Sobo --- src/atom-environment.coffee | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/atom-environment.coffee b/src/atom-environment.coffee index 4715feacc..32cfa331d 100644 --- a/src/atom-environment.coffee +++ b/src/atom-environment.coffee @@ -13,6 +13,7 @@ StateStore = require './state-store' StorageFolder = require './storage-folder' {getWindowLoadSettings} = require './window-load-settings-helpers' registerDefaultCommands = require './register-default-commands' +{updateProcessEnv} = require './update-process-env' DeserializerManager = require './deserializer-manager' ViewRegistry = require './view-registry' @@ -676,6 +677,9 @@ class AtomEnvironment extends Model startEditorWindow: -> @unloaded = false updateProcessEnvPromise = updateProcessEnv(@getLoadSettings().env) + updateProcessEnvPromise.then => + @packages.triggerActivationHook('core:loaded-shell-environment') + loadStatePromise = @loadState().then (state) => @windowDimensions = state?.windowDimensions @displayWindow().then => From 2df096ab13337c659365934bdf4165a711b83925 Mon Sep 17 00:00:00 2001 From: Damien Guard Date: Fri, 11 Nov 2016 10:27:43 -0800 Subject: [PATCH 020/184] :arrow_up: apm 1.15.0 --- apm/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apm/package.json b/apm/package.json index 362a75702..890d9714e 100644 --- a/apm/package.json +++ b/apm/package.json @@ -6,6 +6,6 @@ "url": "https://github.com/atom/atom.git" }, "dependencies": { - "atom-package-manager": "1.14.0" + "atom-package-manager": "1.15.0" } } From 80bb4337e39162c72ad6bbd00493d24dc9381588 Mon Sep 17 00:00:00 2001 From: Damien Guard Date: Fri, 11 Nov 2016 10:28:19 -0800 Subject: [PATCH 021/184] Include arch in dependency cache key --- script/lib/dependencies-fingerprint.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/script/lib/dependencies-fingerprint.js b/script/lib/dependencies-fingerprint.js index 650efd99b..52b5d170a 100644 --- a/script/lib/dependencies-fingerprint.js +++ b/script/lib/dependencies-fingerprint.js @@ -22,7 +22,7 @@ module.exports = { // Include the electron minor version in the fingerprint since that changing requires a re-install const electronVersion = CONFIG.appMetadata.electronVersion.replace(/\.\d+$/, '') const apmVersion = CONFIG.apmMetadata.dependencies['atom-package-manager'] - const body = electronVersion + apmVersion + process.platform + process.version + const body = electronVersion + apmVersion + process.platform + process.version + process.arch return crypto.createHash('sha1').update(body).digest('hex') } } From 5a45461d608c3733fae82d7cb2ddf9c4942be587 Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Fri, 11 Nov 2016 19:38:54 +0100 Subject: [PATCH 022/184] Add a `getModel` method to editors' hidden input component ...to make it easy to access the editor in response to DOM events or when using document.activeElement. Signed-off-by: Nathan Sobo --- src/text-editor-component.coffee | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/text-editor-component.coffee b/src/text-editor-component.coffee index cccd2f4c8..8fa732fea 100644 --- a/src/text-editor-component.coffee +++ b/src/text-editor-component.coffee @@ -72,6 +72,10 @@ class TextEditorComponent @hiddenInputComponent = new InputComponent @scrollViewNode.appendChild(@hiddenInputComponent.getDomNode()) + # Add a getModel method to the hidden input component to make it easy to + # access the editor in response to DOM events or when using + # document.activeElement. + @hiddenInputComponent.getDomNode().getModel = => @editor @linesComponent = new LinesComponent({@presenter, @domElementPool, @assert, @grammars, @views}) @scrollViewNode.appendChild(@linesComponent.getDomNode()) From 990b49f4d799297f20e81cd5027df1abef74201c Mon Sep 17 00:00:00 2001 From: Max Brunsfeld Date: Fri, 11 Nov 2016 11:19:34 -0800 Subject: [PATCH 023/184] :arrow_up: text-buffer Fixes #13182 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 9c7e57743..29ae921f5 100644 --- a/package.json +++ b/package.json @@ -64,7 +64,7 @@ "sinon": "1.17.4", "source-map-support": "^0.3.2", "temp": "0.8.1", - "text-buffer": "9.4.1", + "text-buffer": "9.4.3", "typescript-simple": "1.0.0", "underscore-plus": "^1.6.6", "winreg": "^1.2.1", From 5ee3dbe7e0e71392a4057ce4807339765efd9ede Mon Sep 17 00:00:00 2001 From: Max Brunsfeld Date: Fri, 11 Nov 2016 12:03:38 -0800 Subject: [PATCH 024/184] Avoid redundant DisplayLayer resets in TextEditor.update --- src/text-editor.coffee | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/text-editor.coffee b/src/text-editor.coffee index 9cc7c83a4..497dd3c20 100644 --- a/src/text-editor.coffee +++ b/src/text-editor.coffee @@ -222,6 +222,7 @@ class TextEditor extends Model @backgroundWorkHandle = null update: (params) -> + currentSoftWrapColumn = @getSoftWrapColumn() displayLayerParams = {} for param in Object.keys(params) @@ -272,12 +273,16 @@ class TextEditor extends Model when 'softWrapAtPreferredLineLength' if value isnt @softWrapAtPreferredLineLength @softWrapAtPreferredLineLength = value - displayLayerParams.softWrapColumn = @getSoftWrapColumn() if @isSoftWrapped() + softWrapColumn = @getSoftWrapColumn() + if softWrapColumn isnt currentSoftWrapColumn + displayLayerParams.softWrapColumn = softWrapColumn when 'preferredLineLength' if value isnt @preferredLineLength @preferredLineLength = value - displayLayerParams.softWrapColumn = @getSoftWrapColumn() if @isSoftWrapped() + softWrapColumn = @getSoftWrapColumn() + if softWrapColumn isnt currentSoftWrapColumn + displayLayerParams.softWrapColumn = softWrapColumn when 'mini' if value isnt @mini @@ -322,12 +327,16 @@ class TextEditor extends Model when 'editorWidthInChars' if value > 0 and value isnt @editorWidthInChars @editorWidthInChars = value - displayLayerParams.softWrapColumn = @getSoftWrapColumn() if @isSoftWrapped() + softWrapColumn = @getSoftWrapColumn() + if softWrapColumn isnt currentSoftWrapColumn + displayLayerParams.softWrapColumn = softWrapColumn when 'width' if value isnt @width @width = value - displayLayerParams.softWrapColumn = @getSoftWrapColumn() if @isSoftWrapped() + softWrapColumn = @getSoftWrapColumn() + if softWrapColumn isnt currentSoftWrapColumn + displayLayerParams.softWrapColumn = softWrapColumn when 'scrollPastEnd' if value isnt @scrollPastEnd From 5509475173871733338d6689ec283bf1233a555c Mon Sep 17 00:00:00 2001 From: Max Brunsfeld Date: Fri, 11 Nov 2016 12:55:57 -0800 Subject: [PATCH 025/184] Ensure presenter forces DisplayLayer computations when rendering Signed-off-by: Nathan Sobo --- spec/text-editor-presenter-spec.coffee | 17 ----------------- src/text-editor-presenter.coffee | 21 ++++++++------------- 2 files changed, 8 insertions(+), 30 deletions(-) diff --git a/spec/text-editor-presenter-spec.coffee b/spec/text-editor-presenter-spec.coffee index 8af2f9abd..9eb4a15d2 100644 --- a/spec/text-editor-presenter-spec.coffee +++ b/spec/text-editor-presenter-spec.coffee @@ -165,23 +165,6 @@ describe "TextEditorPresenter", -> expect(stateFn(presenter).tiles[10]).toBeUndefined() expect(stateFn(presenter).tiles[12]).toBeUndefined() - it "excludes invalid tiles for screen rows to measure", -> - presenter = buildPresenter(explicitHeight: 6, scrollTop: 0, lineHeight: 1, tileSize: 2) - presenter.setScreenRowsToMeasure([20, 30]) # unexisting rows - - expect(stateFn(presenter).tiles[0]).toBeDefined() - expect(stateFn(presenter).tiles[2]).toBeDefined() - expect(stateFn(presenter).tiles[4]).toBeDefined() - expect(stateFn(presenter).tiles[6]).toBeDefined() - expect(stateFn(presenter).tiles[8]).toBeUndefined() - expect(stateFn(presenter).tiles[10]).toBeUndefined() - expect(stateFn(presenter).tiles[12]).toBeUndefined() - - presenter.setScreenRowsToMeasure([12]) - buffer.deleteRows(12, 13) - - expect(stateFn(presenter).tiles[12]).toBeUndefined() - describe "when there are block decorations", -> it "computes each tile's height and scrollTop based on block decorations' height", -> presenter = buildPresenter(explicitHeight: 120, scrollTop: 0, lineHeight: 10, tileSize: 2) diff --git a/src/text-editor-presenter.coffee b/src/text-editor-presenter.coffee index 22268af18..cc988bbea 100644 --- a/src/text-editor-presenter.coffee +++ b/src/text-editor-presenter.coffee @@ -306,9 +306,6 @@ class TextEditorPresenter getEndTileRow: -> @tileForRow(@endRow ? 0) - isValidScreenRow: (screenRow) -> - screenRow >= 0 and screenRow < @model.getApproximateScreenLineCount() - getScreenRowsToRender: -> startRow = @getStartTileRow() endRow = @getEndTileRow() + @tileSize @@ -320,7 +317,7 @@ class TextEditorPresenter if @screenRowsToMeasure? screenRows.push(@screenRowsToMeasure...) - screenRows = screenRows.filter @isValidScreenRow.bind(this) + screenRows = screenRows.filter (row) -> row >= 0 screenRows.sort (a, b) -> a - b _.uniq(screenRows, true) @@ -395,19 +392,17 @@ class TextEditorPresenter visibleTiles[tileStartRow] = true zIndex++ - if @mouseWheelScreenRow? and 0 <= @mouseWheelScreenRow < @model.getApproximateScreenLineCount() - mouseWheelTile = @tileForRow(@mouseWheelScreenRow) - - unless visibleTiles[mouseWheelTile]? - @lineNumberGutter.tiles[mouseWheelTile].display = "none" - @state.content.tiles[mouseWheelTile].display = "none" - visibleTiles[mouseWheelTile] = true + mouseWheelTileId = @tileForRow(@mouseWheelScreenRow) if @mouseWheelScreenRow? for id, tile of @state.content.tiles continue if visibleTiles.hasOwnProperty(id) - delete @state.content.tiles[id] - delete @lineNumberGutter.tiles[id] + if Number(id) is mouseWheelTileId + @state.content.tiles[id].display = "none" + @lineNumberGutter.tiles[id].display = "none" + else + delete @state.content.tiles[id] + delete @lineNumberGutter.tiles[id] updateLinesState: (tileState, screenRows) -> tileState.lines ?= {} From 8dad2a928c3187193ddf325caaa0f2c5fe458aae Mon Sep 17 00:00:00 2001 From: Damien Guard Date: Sun, 13 Nov 2016 08:29:21 -0800 Subject: [PATCH 026/184] :arrow_up: language-csharp 0.13.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 29ae921f5..d98ca1bcb 100644 --- a/package.json +++ b/package.json @@ -131,7 +131,7 @@ "language-c": "0.54.0", "language-clojure": "0.22.1", "language-coffee-script": "0.48.1", - "language-csharp": "0.12.1", + "language-csharp": "0.13.0", "language-css": "0.40.1", "language-gfm": "0.88.0", "language-git": "0.15.0", From d41c0ee7e09021d3456e6b306f4051e57668cfa4 Mon Sep 17 00:00:00 2001 From: Damien Guard Date: Sun, 13 Nov 2016 16:07:57 -0800 Subject: [PATCH 027/184] :arrow_up: apm v1.15.1 --- apm/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apm/package.json b/apm/package.json index 890d9714e..732ab208a 100644 --- a/apm/package.json +++ b/apm/package.json @@ -6,6 +6,6 @@ "url": "https://github.com/atom/atom.git" }, "dependencies": { - "atom-package-manager": "1.15.0" + "atom-package-manager": "1.15.1" } } From 1b2d2f029945c58cf4cd474ef1423856b35cf26c Mon Sep 17 00:00:00 2001 From: Joe Fitzgerald Date: Sun, 13 Nov 2016 07:32:32 -0700 Subject: [PATCH 028/184] Use child_process.spawn instead of execFile - Fixes #13084 - Kill child process on process exit, if it is running - Ensure env is set correctly when new windows are launched --- src/main-process/atom-application.coffee | 2 +- src/update-process-env.js | 30 +++++++++++++++++++++--- 2 files changed, 28 insertions(+), 4 deletions(-) diff --git a/src/main-process/atom-application.coffee b/src/main-process/atom-application.coffee index 067721e05..fc218782a 100644 --- a/src/main-process/atom-application.coffee +++ b/src/main-process/atom-application.coffee @@ -509,7 +509,7 @@ class AtomApplication openPaths: ({initialPaths, pathsToOpen, executedFrom, pidToKillWhenClosed, newWindow, devMode, safeMode, windowDimensions, profileStartup, window, clearWindowState, addToLastWindow, env}={}) -> if not pathsToOpen? or pathsToOpen.length is 0 return - + env = process.env unless env? devMode = Boolean(devMode) safeMode = Boolean(safeMode) clearWindowState = Boolean(clearWindowState) diff --git a/src/update-process-env.js b/src/update-process-env.js index 8a308f3d9..d8f5762ff 100644 --- a/src/update-process-env.js +++ b/src/update-process-env.js @@ -64,7 +64,31 @@ async function getEnvFromShell (env) { } let {stdout, error} = await new Promise((resolve) => { - childProcess.execFile(env.SHELL, ['-ilc', 'command env'], {encoding: 'utf8', timeout: 5000}, (error, stdout) => { + let cp + let error + let stdout = '' + const killer = () => { + if (cp) { + cp.kill() + } + } + process.once('exit', killer) + + cp = childProcess.spawn(env.SHELL, ['-ilc', 'command env'], {encoding: 'utf8', timeout: 5000, detached: true, stdio: ['ignore', 'pipe', process.stderr]}) + + const buffers = [] + cp.on('error', (e) => { + error = e + }) + cp.stdout.on('data', (data) => { + buffers.push(data) + }) + cp.on('close', (code, signal) => { + process.removeListener('exit', killer) + if (buffers.length) { + stdout = Buffer.concat(buffers).toString('utf8') + } + resolve({stdout, error}) }) }) @@ -73,11 +97,11 @@ async function getEnvFromShell (env) { if (error.handle) { error.handle() } - console.log('warning: ' + env.SHELL + '-ilc "command env" failed with signal (' + error.signal + ')') + console.log('warning: ' + env.SHELL + ' -ilc "command env" failed with signal (' + error.signal + ')') console.log(error) } - if (stdout) { + if (stdout && stdout.trim() !== '') { let result = {} for (let line of stdout.split('\n')) { if (line.includes('=')) { From d0a011e93ac4a967866cbd6ecbd5c2e106ce174a Mon Sep 17 00:00:00 2001 From: Joe Fitzgerald Date: Mon, 14 Nov 2016 16:23:10 -0700 Subject: [PATCH 029/184] Fix specs, rename cp > child_process --- package.json | 1 + spec/update-process-env-spec.js | 56 +++++++++++++++------------------ src/update-process-env.js | 18 +++++------ 3 files changed, 36 insertions(+), 39 deletions(-) diff --git a/package.json b/package.json index 29ae921f5..266374419 100644 --- a/package.json +++ b/package.json @@ -45,6 +45,7 @@ "marked": "^0.3.6", "minimatch": "^3.0.3", "mocha": "2.5.1", + "mock-spawn": "^0.2.6", "normalize-package-data": "^2.0.0", "nslog": "^3", "oniguruma": "6.1.0", diff --git a/spec/update-process-env-spec.js b/spec/update-process-env-spec.js index 55600febd..fc6fab6b2 100644 --- a/spec/update-process-env-spec.js +++ b/spec/update-process-env-spec.js @@ -7,17 +7,25 @@ import temp from 'temp' import child_process from 'child_process' import {updateProcessEnv, shouldGetEnvFromShell} from '../src/update-process-env' import dedent from 'dedent' +import {EventEmitter} from 'events' +import mockSpawn from 'mock-spawn' describe('updateProcessEnv(launchEnv)', function () { - let originalProcessEnv, originalProcessPlatform + let originalProcessEnv, originalProcessPlatform, originalSpawn, spawn beforeEach(function () { + originalSpawn = child_process.spawn + spawn = mockSpawn() + child_process.spawn = spawn originalProcessEnv = process.env originalProcessPlatform = process.platform process.env = {} }) afterEach(function () { + if (originalSpawn) { + child_process.spawn = originalSpawn + } process.env = originalProcessEnv process.platform = originalProcessPlatform }) @@ -146,21 +154,15 @@ describe('updateProcessEnv(launchEnv)', function () { it('updates process.env to match the environment in the user\'s login shell', async function () { process.platform = 'darwin' process.env.SHELL = '/my/custom/bash' - - spyOn(child_process, 'execFile').andCallFake((cmd, args, opts, callback) => { - expect(cmd).toBe('/my/custom/bash') - callback( - null, - dedent` - FOO=BAR=BAZ=QUUX - TERM=xterm-something - PATH=/usr/bin:/bin:/usr/sbin:/sbin:/crazy/path - ` - ) - }) - + spawn.setDefault(spawn.simple(0, dedent` + FOO=BAR=BAZ=QUUX + TERM=xterm-something + PATH=/usr/bin:/bin:/usr/sbin:/sbin:/crazy/path + `)) await updateProcessEnv(process.env) - + expect(spawn.calls.length).toBe(1) + expect(spawn.calls[0].command).toBe('/my/custom/bash') + expect(spawn.calls[0].args).toEqual(['-ilc', 'command env']) expect(process.env).toEqual({ FOO: 'BAR=BAZ=QUUX', TERM: 'xterm-something', @@ -176,21 +178,15 @@ describe('updateProcessEnv(launchEnv)', function () { it('updates process.env to match the environment in the user\'s login shell', async function () { process.platform = 'linux' process.env.SHELL = '/my/custom/bash' - - spyOn(child_process, 'execFile').andCallFake((cmd, args, opts, callback) => { - expect(cmd).toBe('/my/custom/bash') - callback( - null, - dedent` - FOO=BAR=BAZ=QUUX - TERM=xterm-something - PATH=/usr/bin:/bin:/usr/sbin:/sbin:/crazy/path - ` - ) - }) - + spawn.setDefault(spawn.simple(0, dedent` + FOO=BAR=BAZ=QUUX + TERM=xterm-something + PATH=/usr/bin:/bin:/usr/sbin:/sbin:/crazy/path + `)) await updateProcessEnv(process.env) - + expect(spawn.calls.length).toBe(1) + expect(spawn.calls[0].command).toBe('/my/custom/bash') + expect(spawn.calls[0].args).toEqual(['-ilc', 'command env']) expect(process.env).toEqual({ FOO: 'BAR=BAZ=QUUX', TERM: 'xterm-something', @@ -205,7 +201,7 @@ describe('updateProcessEnv(launchEnv)', function () { describe('on windows', function () { it('does not update process.env', async function () { process.platform = 'win32' - spyOn(child_process, 'execFile') + spyOn(child_process, 'spawn') process.env = {FOO: 'bar'} await updateProcessEnv(process.env) diff --git a/src/update-process-env.js b/src/update-process-env.js index d8f5762ff..7839547d8 100644 --- a/src/update-process-env.js +++ b/src/update-process-env.js @@ -1,7 +1,7 @@ /** @babel */ import fs from 'fs' -import childProcess from 'child_process' +import child_process from 'child_process' const ENVIRONMENT_VARIABLES_TO_PRESERVE = new Set([ 'NODE_ENV', @@ -64,31 +64,31 @@ async function getEnvFromShell (env) { } let {stdout, error} = await new Promise((resolve) => { - let cp + let childProcess let error let stdout = '' const killer = () => { - if (cp) { - cp.kill() + if (childProcess) { + childProcess.kill() } } process.once('exit', killer) - cp = childProcess.spawn(env.SHELL, ['-ilc', 'command env'], {encoding: 'utf8', timeout: 5000, detached: true, stdio: ['ignore', 'pipe', process.stderr]}) + childProcess = child_process.spawn(env.SHELL, ['-ilc', 'command env'], {encoding: 'utf8', timeout: 5000, detached: true, stdio: ['ignore', 'pipe', process.stderr]}) const buffers = [] - cp.on('error', (e) => { + childProcess.on('error', (e) => { error = e }) - cp.stdout.on('data', (data) => { + childProcess.stdout.on('data', (data) => { buffers.push(data) }) - cp.on('close', (code, signal) => { + childProcess.on('close', (code, signal) => { process.removeListener('exit', killer) if (buffers.length) { stdout = Buffer.concat(buffers).toString('utf8') } - + resolve({stdout, error}) }) }) From 3123a926871c9ee25bf495bbf3828f7434851e47 Mon Sep 17 00:00:00 2001 From: Joe Fitzgerald Date: Mon, 14 Nov 2016 16:29:13 -0700 Subject: [PATCH 030/184] :art: Fix spec, cleanup --- spec/update-process-env-spec.js | 2 +- src/update-process-env.js | 24 +++++++++++++----------- 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/spec/update-process-env-spec.js b/spec/update-process-env-spec.js index fc6fab6b2..2c714241f 100644 --- a/spec/update-process-env-spec.js +++ b/spec/update-process-env-spec.js @@ -205,7 +205,7 @@ describe('updateProcessEnv(launchEnv)', function () { process.env = {FOO: 'bar'} await updateProcessEnv(process.env) - expect(child_process.execFile).not.toHaveBeenCalled() + expect(child_process.spawn).not.toHaveBeenCalled() expect(process.env).toEqual({FOO: 'bar'}) }) }) diff --git a/src/update-process-env.js b/src/update-process-env.js index 7839547d8..52afcb1f5 100644 --- a/src/update-process-env.js +++ b/src/update-process-env.js @@ -101,18 +101,20 @@ async function getEnvFromShell (env) { console.log(error) } - if (stdout && stdout.trim() !== '') { - let result = {} - for (let line of stdout.split('\n')) { - if (line.includes('=')) { - let components = line.split('=') - let key = components.shift() - let value = components.join('=') - result[key] = value - } - } - return result + if (!stdout || stdout.trim() === '') { + return null } + + let result = {} + for (let line of stdout.split('\n')) { + if (line.includes('=')) { + let components = line.split('=') + let key = components.shift() + let value = components.join('=') + result[key] = value + } + } + return result } export default { updateProcessEnv, shouldGetEnvFromShell } From c83e71cb9d7220136fb0f9f11d49ce755bc6afc9 Mon Sep 17 00:00:00 2001 From: Joe Fitzgerald Date: Mon, 14 Nov 2016 17:02:12 -0700 Subject: [PATCH 031/184] =?UTF-8?q?Don=E2=80=99t=20detach=20child=20proces?= =?UTF-8?q?s,=20cleanup=20code?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/update-process-env.js | 28 ++++++++-------------------- 1 file changed, 8 insertions(+), 20 deletions(-) diff --git a/src/update-process-env.js b/src/update-process-env.js index 52afcb1f5..3f5b2c52e 100644 --- a/src/update-process-env.js +++ b/src/update-process-env.js @@ -17,11 +17,13 @@ const PLATFORMS_KNOWN_TO_WORK = new Set([ async function updateProcessEnv (launchEnv) { let envToAssign - if (launchEnv && shouldGetEnvFromShell(launchEnv)) { - envToAssign = await getEnvFromShell(launchEnv) - } else if (launchEnv && launchEnv.PWD) { - envToAssign = launchEnv - } + if (launchEnv) { + if (shouldGetEnvFromShell(launchEnv)) { + envToAssign = await getEnvFromShell(launchEnv) + } else if (launchEnv.PWD) { + envToAssign = launchEnv + } + } if (envToAssign) { for (let key in process.env) { @@ -59,23 +61,10 @@ function shouldGetEnvFromShell (env) { } async function getEnvFromShell (env) { - if (!shouldGetEnvFromShell(env)) { - return null - } - let {stdout, error} = await new Promise((resolve) => { - let childProcess let error let stdout = '' - const killer = () => { - if (childProcess) { - childProcess.kill() - } - } - process.once('exit', killer) - - childProcess = child_process.spawn(env.SHELL, ['-ilc', 'command env'], {encoding: 'utf8', timeout: 5000, detached: true, stdio: ['ignore', 'pipe', process.stderr]}) - + const childProcess = child_process.spawn(env.SHELL, ['-ilc', 'command env'], {encoding: 'utf8', stdio: ['ignore', 'pipe', process.stderr]}) const buffers = [] childProcess.on('error', (e) => { error = e @@ -84,7 +73,6 @@ async function getEnvFromShell (env) { buffers.push(data) }) childProcess.on('close', (code, signal) => { - process.removeListener('exit', killer) if (buffers.length) { stdout = Buffer.concat(buffers).toString('utf8') } From f73aa46cef736eaf668df1d001a5b3c69937c2f5 Mon Sep 17 00:00:00 2001 From: Joe Fitzgerald Date: Mon, 14 Nov 2016 17:09:01 -0700 Subject: [PATCH 032/184] Fix lint errors --- spec/update-process-env-spec.js | 12 ++++++------ src/update-process-env.js | 12 ++++++------ 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/spec/update-process-env-spec.js b/spec/update-process-env-spec.js index 2c714241f..73f0a1988 100644 --- a/spec/update-process-env-spec.js +++ b/spec/update-process-env-spec.js @@ -4,7 +4,7 @@ import {it, fit, ffit, fffit, beforeEach, afterEach} from './async-spec-helpers' import path from 'path' import temp from 'temp' -import child_process from 'child_process' +import childProcess from 'child_process' import {updateProcessEnv, shouldGetEnvFromShell} from '../src/update-process-env' import dedent from 'dedent' import {EventEmitter} from 'events' @@ -14,9 +14,9 @@ describe('updateProcessEnv(launchEnv)', function () { let originalProcessEnv, originalProcessPlatform, originalSpawn, spawn beforeEach(function () { - originalSpawn = child_process.spawn + originalSpawn = childProcess.spawn spawn = mockSpawn() - child_process.spawn = spawn + childProcess.spawn = spawn originalProcessEnv = process.env originalProcessPlatform = process.platform process.env = {} @@ -24,7 +24,7 @@ describe('updateProcessEnv(launchEnv)', function () { afterEach(function () { if (originalSpawn) { - child_process.spawn = originalSpawn + childProcess.spawn = originalSpawn } process.env = originalProcessEnv process.platform = originalProcessPlatform @@ -201,11 +201,11 @@ describe('updateProcessEnv(launchEnv)', function () { describe('on windows', function () { it('does not update process.env', async function () { process.platform = 'win32' - spyOn(child_process, 'spawn') + spyOn(childProcess, 'spawn') process.env = {FOO: 'bar'} await updateProcessEnv(process.env) - expect(child_process.spawn).not.toHaveBeenCalled() + expect(childProcess.spawn).not.toHaveBeenCalled() expect(process.env).toEqual({FOO: 'bar'}) }) }) diff --git a/src/update-process-env.js b/src/update-process-env.js index 3f5b2c52e..a7b7527a8 100644 --- a/src/update-process-env.js +++ b/src/update-process-env.js @@ -1,7 +1,7 @@ /** @babel */ import fs from 'fs' -import child_process from 'child_process' +import childProcess from 'child_process' const ENVIRONMENT_VARIABLES_TO_PRESERVE = new Set([ 'NODE_ENV', @@ -23,7 +23,7 @@ async function updateProcessEnv (launchEnv) { } else if (launchEnv.PWD) { envToAssign = launchEnv } - } + } if (envToAssign) { for (let key in process.env) { @@ -64,15 +64,15 @@ async function getEnvFromShell (env) { let {stdout, error} = await new Promise((resolve) => { let error let stdout = '' - const childProcess = child_process.spawn(env.SHELL, ['-ilc', 'command env'], {encoding: 'utf8', stdio: ['ignore', 'pipe', process.stderr]}) + const child = childProcess.spawn(env.SHELL, ['-ilc', 'command env'], {encoding: 'utf8', stdio: ['ignore', 'pipe', process.stderr]}) const buffers = [] - childProcess.on('error', (e) => { + child.on('error', (e) => { error = e }) - childProcess.stdout.on('data', (data) => { + child.stdout.on('data', (data) => { buffers.push(data) }) - childProcess.on('close', (code, signal) => { + child.on('close', (code, signal) => { if (buffers.length) { stdout = Buffer.concat(buffers).toString('utf8') } From e27ceba2666dc3c25aad33ca3f1a4985121f0e31 Mon Sep 17 00:00:00 2001 From: Ian Olsen Date: Tue, 15 Nov 2016 10:24:34 -0800 Subject: [PATCH 033/184] :arrow_up: atom-keymap@7.1.4 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 2b83d2fb8..3ae98c644 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "electronVersion": "1.3.6", "dependencies": { "async": "0.2.6", - "atom-keymap": "7.1.3", + "atom-keymap": "7.1.4", "atom-space-pen-views": "^2.0.0", "atom-ui": "0.4.1", "babel-core": "5.8.38", From 3f788ebe7ee763754e13a7469a0c640e10cfdb00 Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Tue, 15 Nov 2016 12:25:15 -0700 Subject: [PATCH 034/184] Forward compositionstart/end events to KeymapManager to avoid IME issues --- package.json | 2 +- src/window-event-handler.coffee | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 3ae98c644..623f3eef9 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "electronVersion": "1.3.6", "dependencies": { "async": "0.2.6", - "atom-keymap": "7.1.4", + "atom-keymap": "7.2.0", "atom-space-pen-views": "^2.0.0", "atom-ui": "0.4.1", "babel-core": "5.8.38", diff --git a/src/window-event-handler.coffee b/src/window-event-handler.coffee index 62ce4527a..dae06e25e 100644 --- a/src/window-event-handler.coffee +++ b/src/window-event-handler.coffee @@ -14,6 +14,8 @@ class WindowEventHandler @addEventListener(@document, 'keyup', @handleDocumentKeyEvent) @addEventListener(@document, 'keydown', @handleDocumentKeyEvent) + @addEventListener(@document, 'compositionstart', @handleDocumentCompositionStartEvent) + @addEventListener(@document, 'compositionend', @handleDocumentCompositionEndEvent) @addEventListener(@document, 'drop', @handleDocumentDrop) @addEventListener(@document, 'dragover', @handleDocumentDragover) @addEventListener(@document, 'contextmenu', @handleDocumentContextmenu) @@ -76,6 +78,12 @@ class WindowEventHandler @atomEnvironment.keymaps.handleKeyboardEvent(event) event.stopImmediatePropagation() + handleDocumentCompositionStartEvent: => + @atomEnvironment.keymaps.handleCompositionStart() + + handleDocumentCompositionEndEvent: => + @atomEnvironment.keymaps.handleCompositionEnd() + handleDrop: (event) -> event.preventDefault() event.stopPropagation() From 5839647366c287ae4b931618019c32e179c72ab9 Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Wed, 16 Nov 2016 08:53:53 -0700 Subject: [PATCH 035/184] Revert "Forward compositionstart/end events to KeymapManager to avoid IME issues" --- package.json | 2 +- src/window-event-handler.coffee | 8 -------- 2 files changed, 1 insertion(+), 9 deletions(-) diff --git a/package.json b/package.json index 623f3eef9..3ae98c644 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "electronVersion": "1.3.6", "dependencies": { "async": "0.2.6", - "atom-keymap": "7.2.0", + "atom-keymap": "7.1.4", "atom-space-pen-views": "^2.0.0", "atom-ui": "0.4.1", "babel-core": "5.8.38", diff --git a/src/window-event-handler.coffee b/src/window-event-handler.coffee index dae06e25e..62ce4527a 100644 --- a/src/window-event-handler.coffee +++ b/src/window-event-handler.coffee @@ -14,8 +14,6 @@ class WindowEventHandler @addEventListener(@document, 'keyup', @handleDocumentKeyEvent) @addEventListener(@document, 'keydown', @handleDocumentKeyEvent) - @addEventListener(@document, 'compositionstart', @handleDocumentCompositionStartEvent) - @addEventListener(@document, 'compositionend', @handleDocumentCompositionEndEvent) @addEventListener(@document, 'drop', @handleDocumentDrop) @addEventListener(@document, 'dragover', @handleDocumentDragover) @addEventListener(@document, 'contextmenu', @handleDocumentContextmenu) @@ -78,12 +76,6 @@ class WindowEventHandler @atomEnvironment.keymaps.handleKeyboardEvent(event) event.stopImmediatePropagation() - handleDocumentCompositionStartEvent: => - @atomEnvironment.keymaps.handleCompositionStart() - - handleDocumentCompositionEndEvent: => - @atomEnvironment.keymaps.handleCompositionEnd() - handleDrop: (event) -> event.preventDefault() event.stopPropagation() From 180e1526e7b0c5fdc2d5c113139627ebfe02ea0d Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Wed, 16 Nov 2016 10:49:34 -0700 Subject: [PATCH 036/184] :arrow_up: atom-keymap --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 3ae98c644..12c25b109 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "electronVersion": "1.3.6", "dependencies": { "async": "0.2.6", - "atom-keymap": "7.1.4", + "atom-keymap": "7.1.6", "atom-space-pen-views": "^2.0.0", "atom-ui": "0.4.1", "babel-core": "5.8.38", From 4f6397326d3da93c774e22f9f60a7b177d8c4000 Mon Sep 17 00:00:00 2001 From: Max Brunsfeld Date: Wed, 16 Nov 2016 09:59:43 -0800 Subject: [PATCH 037/184] :arrow_up: scandal --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 12c25b109..34467afbb 100644 --- a/package.json +++ b/package.json @@ -56,7 +56,7 @@ "random-words": "0.0.1", "resolve": "^1.1.6", "runas": "^3.1", - "scandal": "^2.2.1", + "scandal": "^2.2.2", "scoped-property-store": "^0.17.0", "scrollbar-style": "^3.2", "season": "^5.4.1", From 0d71ce590d60c47b3005b7b77b3e1be3fb7d26bf Mon Sep 17 00:00:00 2001 From: Max Brunsfeld Date: Wed, 16 Nov 2016 10:49:37 -0800 Subject: [PATCH 038/184] :arrow_down: scandal --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 34467afbb..9c59ae42b 100644 --- a/package.json +++ b/package.json @@ -56,7 +56,7 @@ "random-words": "0.0.1", "resolve": "^1.1.6", "runas": "^3.1", - "scandal": "^2.2.2", + "scandal": "2.2.1", "scoped-property-store": "^0.17.0", "scrollbar-style": "^3.2", "season": "^5.4.1", From 14a2c9f3f25bfe50fc07052f43f7cd58cff81464 Mon Sep 17 00:00:00 2001 From: Damien Guard Date: Mon, 14 Nov 2016 13:42:26 -0800 Subject: [PATCH 039/184] :arrow_up: metrics 1.1.2 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 9c59ae42b..1485b0625 100644 --- a/package.json +++ b/package.json @@ -112,7 +112,7 @@ "line-ending-selector": "0.5.1", "link": "0.31.2", "markdown-preview": "0.159.1", - "metrics": "1.0.0", + "metrics": "1.1.2", "notifications": "0.65.1", "open-on-github": "1.2.1", "package-generator": "1.0.2", From 1e9b0268e98c0d82f6f5d3d8c525c2008216b2b9 Mon Sep 17 00:00:00 2001 From: Damien Guard Date: Wed, 16 Nov 2016 10:54:12 -0800 Subject: [PATCH 040/184] :arrow_up: status-bar 1.7.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 1485b0625..1e3aec1c2 100644 --- a/package.json +++ b/package.json @@ -119,7 +119,7 @@ "settings-view": "0.244.0", "snippets": "1.0.4", "spell-check": "0.68.5", - "status-bar": "1.6.0", + "status-bar": "1.7.0", "styleguide": "0.48.0", "symbols-view": "0.113.1", "tabs": "0.103.1", From 13e501b12e562f308c935f896a59c21bc282620d Mon Sep 17 00:00:00 2001 From: Damien Guard Date: Wed, 16 Nov 2016 12:45:41 -0800 Subject: [PATCH 041/184] Stop using ctrl-alt-letter bindings on Win32 - they conflict on international keyboards. Changes; - window:reload is now ctrl-shift-r - window:run-package-specs is now ctrl-shift-y - application:add-project-folder is now ctrl-shift-a - editor:log-cursor-scope is no longer bound by default --- keymaps/win32.cson | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/keymaps/win32.cson b/keymaps/win32.cson index d43c124d4..16f99ddb6 100644 --- a/keymaps/win32.cson +++ b/keymaps/win32.cson @@ -12,11 +12,11 @@ 'ctrl-down': 'core:move-down' 'left': 'core:move-left' 'right': 'core:move-right' - 'ctrl-alt-r': 'window:reload' + 'ctrl-shift-r': 'window:reload' 'ctrl-shift-i': 'window:toggle-dev-tools' - 'ctrl-alt-p': 'window:run-package-specs' + 'ctrl-shift-y': 'window:run-package-specs' 'ctrl-shift-o': 'application:open-folder' - 'ctrl-alt-o': 'application:add-project-folder' + 'ctrl-shift-a': 'application:add-project-folder' 'ctrl-shift-left': 'pane:move-item-left' 'ctrl-shift-right': 'pane:move-item-right' 'f11': 'window:toggle-full-screen' @@ -78,9 +78,9 @@ 'ctrl-k alt-ctrl-w': 'pane:close-other-items' # Atom Specific 'ctrl-k ctrl-p': 'window:focus-previous-pane' 'ctrl-k ctrl-n': 'window:focus-next-pane' - 'ctrl-k ctrl-up': 'window:focus-pane-above' - 'ctrl-k ctrl-down': 'window:focus-pane-below' - 'ctrl-k ctrl-left': 'window:focus-pane-on-left' + 'ctrl-k ctrl-up': 'window:focus-pane-above' + 'ctrl-k ctrl-down': 'window:focus-pane-below' + 'ctrl-k ctrl-left': 'window:focus-pane-on-left' 'ctrl-k ctrl-right': 'window:focus-pane-on-right' 'alt-1': 'pane:show-item-1' 'alt-2': 'pane:show-item-2' @@ -113,7 +113,6 @@ # Sublime Parity 'ctrl-a': 'core:select-all' - 'ctrl-alt-shift-p': 'editor:log-cursor-scope' 'ctrl-k ctrl-u': 'editor:upper-case' 'ctrl-k ctrl-l': 'editor:lower-case' 'ctrl-l': 'editor:select-line' From 0ded18a981c667be1a5a0538cfe937d13643df07 Mon Sep 17 00:00:00 2001 From: Damien Guard Date: Wed, 16 Nov 2016 13:00:31 -0800 Subject: [PATCH 042/184] :arrow_up: electron from 1.3.7 to 1.3.9 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 1e3aec1c2..fee82d086 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ "url": "https://github.com/atom/atom/issues" }, "license": "MIT", - "electronVersion": "1.3.6", + "electronVersion": "1.3.9", "dependencies": { "async": "0.2.6", "atom-keymap": "7.1.6", From 47ee7c6665b6ff99d730d5294b4b853c0f170ca0 Mon Sep 17 00:00:00 2001 From: Damien Guard Date: Wed, 16 Nov 2016 15:08:05 -0800 Subject: [PATCH 043/184] Avoid additional ctrl-alt key shortcuts on Win32 --- keymaps/win32.cson | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/keymaps/win32.cson b/keymaps/win32.cson index 16f99ddb6..717322c6c 100644 --- a/keymaps/win32.cson +++ b/keymaps/win32.cson @@ -75,7 +75,7 @@ 'ctrl-k left': 'pane:split-left-and-copy-active-item' # Atom Specific 'ctrl-k right': 'pane:split-right-and-copy-active-item' # Atom Specific 'ctrl-k ctrl-w': 'pane:close' # Atom Specific - 'ctrl-k alt-ctrl-w': 'pane:close-other-items' # Atom Specific + 'ctrl-k ctrl-alt-w': 'pane:close-other-items' # Atom Specific 'ctrl-k ctrl-p': 'window:focus-previous-pane' 'ctrl-k ctrl-n': 'window:focus-next-pane' 'ctrl-k ctrl-up': 'window:focus-pane-above' @@ -119,9 +119,9 @@ 'atom-workspace atom-text-editor:not([mini])': # Atom specific - 'alt-ctrl-z': 'editor:checkout-head-revision' + 'ctrl-alt-shift-z': 'editor:checkout-head-revision' 'ctrl-<': 'editor:scroll-to-cursor' - 'alt-ctrl-f': 'editor:fold-selection' + 'ctrl-alt-shift-[': 'editor:fold-selection' # Sublime Parity 'ctrl-enter': 'editor:newline-below' From 113717021574ea7c1fbd387ce453c2db605d68bf Mon Sep 17 00:00:00 2001 From: Damien Guard Date: Wed, 16 Nov 2016 15:47:21 -0800 Subject: [PATCH 044/184] :arrow_up: autoflow --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index fee82d086..6df2a5126 100644 --- a/package.json +++ b/package.json @@ -91,7 +91,7 @@ "autocomplete-html": "0.7.2", "autocomplete-plus": "2.33.1", "autocomplete-snippets": "1.11.0", - "autoflow": "0.27.0", + "autoflow": "0.28.0", "autosave": "0.23.2", "background-tips": "0.26.1", "bookmarks": "0.43.2", From 0219953a48fd409c9765ce57cc1a51aca515128a Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Thu, 17 Nov 2016 08:24:22 +0100 Subject: [PATCH 045/184] :arrow_up: autocomplete-plus --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 6df2a5126..8cded5eab 100644 --- a/package.json +++ b/package.json @@ -89,7 +89,7 @@ "autocomplete-atom-api": "0.10.0", "autocomplete-css": "0.14.1", "autocomplete-html": "0.7.2", - "autocomplete-plus": "2.33.1", + "autocomplete-plus": "2.34.0", "autocomplete-snippets": "1.11.0", "autoflow": "0.28.0", "autosave": "0.23.2", From 3953575d06a9ca09af401ebcc948a28f46427dde Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Thu, 17 Nov 2016 11:07:27 -0700 Subject: [PATCH 046/184] :arrow_up: atom-keymap --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 8cded5eab..046425237 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "electronVersion": "1.3.9", "dependencies": { "async": "0.2.6", - "atom-keymap": "7.1.6", + "atom-keymap": "7.1.7", "atom-space-pen-views": "^2.0.0", "atom-ui": "0.4.1", "babel-core": "5.8.38", From e0c503bbd0f6277d76850a3181abce2aafafb78e Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Thu, 17 Nov 2016 14:32:36 -0700 Subject: [PATCH 047/184] :arrow_up: atom-keymap --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 046425237..78f23ed1e 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "electronVersion": "1.3.9", "dependencies": { "async": "0.2.6", - "atom-keymap": "7.1.7", + "atom-keymap": "7.1.8", "atom-space-pen-views": "^2.0.0", "atom-ui": "0.4.1", "babel-core": "5.8.38", From 6d250c5b712542b4becff20d3bd593013bb805f6 Mon Sep 17 00:00:00 2001 From: Damien Guard Date: Thu, 17 Nov 2016 14:11:27 -0800 Subject: [PATCH 048/184] Remap Linux bindings to avoid i8n keyboard symbols. --- keymaps/linux.cson | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/keymaps/linux.cson b/keymaps/linux.cson index 1f78739a9..45bdfb724 100644 --- a/keymaps/linux.cson +++ b/keymaps/linux.cson @@ -6,11 +6,11 @@ 'down': 'core:move-down' 'left': 'core:move-left' 'right': 'core:move-right' - 'ctrl-alt-r': 'window:reload' + 'ctrl-shift-r': 'window:reload' 'ctrl-shift-i': 'window:toggle-dev-tools' - 'ctrl-alt-p': 'window:run-package-specs' + 'ctrl-shift-y': 'window:run-package-specs' 'ctrl-shift-o': 'application:open-folder' - 'ctrl-alt-o': 'application:add-project-folder' + 'ctrl-shift-a': 'application:add-project-folder' 'ctrl-shift-pageup': 'pane:move-item-left' 'ctrl-shift-pagedown': 'pane:move-item-right' 'f11': 'window:toggle-full-screen' @@ -70,12 +70,12 @@ 'ctrl-k left': 'pane:split-left-and-copy-active-item' # Atom Specific 'ctrl-k right': 'pane:split-right-and-copy-active-item' # Atom Specific 'ctrl-k ctrl-w': 'pane:close' # Atom Specific - 'ctrl-k alt-ctrl-w': 'pane:close-other-items' # Atom Specific + 'ctrl-k ctrl-alt-w': 'pane:close-other-items' # Atom Specific 'ctrl-k ctrl-p': 'window:focus-previous-pane' 'ctrl-k ctrl-n': 'window:focus-next-pane' - 'ctrl-k ctrl-up': 'window:focus-pane-above' - 'ctrl-k ctrl-down': 'window:focus-pane-below' - 'ctrl-k ctrl-left': 'window:focus-pane-on-left' + 'ctrl-k ctrl-up': 'window:focus-pane-above' + 'ctrl-k ctrl-down': 'window:focus-pane-below' + 'ctrl-k ctrl-left': 'window:focus-pane-on-left' 'ctrl-k ctrl-right': 'window:focus-pane-on-right' 'alt-1': 'pane:show-item-1' 'alt-2': 'pane:show-item-2' @@ -108,16 +108,15 @@ # Sublime Parity 'ctrl-a': 'core:select-all' - 'ctrl-alt-shift-p': 'editor:log-cursor-scope' 'ctrl-k ctrl-u': 'editor:upper-case' 'ctrl-k ctrl-l': 'editor:lower-case' 'ctrl-l': 'editor:select-line' 'atom-workspace atom-text-editor:not([mini])': # Atom specific - 'alt-ctrl-z': 'editor:checkout-head-revision' + 'ctrl-alt-shift-z': 'editor:checkout-head-revision' 'ctrl-<': 'editor:scroll-to-cursor' - 'alt-ctrl-f': 'editor:fold-selection' + 'ctrl-alt-shift-[': 'editor:fold-selection' # Sublime Parity 'ctrl-enter': 'editor:newline-below' From 8ee0f0ee4788be0d10b039aa4b013f111406a7c3 Mon Sep 17 00:00:00 2001 From: Damien Guard Date: Thu, 17 Nov 2016 14:13:56 -0800 Subject: [PATCH 049/184] :arrow_up: autoflow --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 78f23ed1e..debb2704f 100644 --- a/package.json +++ b/package.json @@ -91,7 +91,7 @@ "autocomplete-html": "0.7.2", "autocomplete-plus": "2.34.0", "autocomplete-snippets": "1.11.0", - "autoflow": "0.28.0", + "autoflow": "0.29.0", "autosave": "0.23.2", "background-tips": "0.26.1", "bookmarks": "0.43.2", From 876fb360822f18e985e8a624397bf5b1e8cce6c1 Mon Sep 17 00:00:00 2001 From: Damien Guard Date: Thu, 17 Nov 2016 14:46:38 -0800 Subject: [PATCH 050/184] Remove checkout-head-revision binding to avoid i8n key conflicts on Linux and Windows --- keymaps/linux.cson | 1 - keymaps/win32.cson | 1 - 2 files changed, 2 deletions(-) diff --git a/keymaps/linux.cson b/keymaps/linux.cson index 45bdfb724..f5d040168 100644 --- a/keymaps/linux.cson +++ b/keymaps/linux.cson @@ -114,7 +114,6 @@ 'atom-workspace atom-text-editor:not([mini])': # Atom specific - 'ctrl-alt-shift-z': 'editor:checkout-head-revision' 'ctrl-<': 'editor:scroll-to-cursor' 'ctrl-alt-shift-[': 'editor:fold-selection' diff --git a/keymaps/win32.cson b/keymaps/win32.cson index 717322c6c..6966f2f0c 100644 --- a/keymaps/win32.cson +++ b/keymaps/win32.cson @@ -119,7 +119,6 @@ 'atom-workspace atom-text-editor:not([mini])': # Atom specific - 'ctrl-alt-shift-z': 'editor:checkout-head-revision' 'ctrl-<': 'editor:scroll-to-cursor' 'ctrl-alt-shift-[': 'editor:fold-selection' From 35346356942fa72a95105e9507b7032a15687296 Mon Sep 17 00:00:00 2001 From: Wliu <50Wliu@users.noreply.github.com> Date: Thu, 17 Nov 2016 20:27:55 -0500 Subject: [PATCH 051/184] :arrow_up: language-html@0.47.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index debb2704f..9de606997 100644 --- a/package.json +++ b/package.json @@ -137,7 +137,7 @@ "language-gfm": "0.88.0", "language-git": "0.15.0", "language-go": "0.43.0", - "language-html": "0.46.1", + "language-html": "0.47.1", "language-hyperlink": "0.16.1", "language-java": "0.24.0", "language-javascript": "0.122.0", From bfab74d617f87939397b155f82e9714d67be74ac Mon Sep 17 00:00:00 2001 From: simurai Date: Fri, 18 Nov 2016 17:31:08 +0900 Subject: [PATCH 052/184] :arrow_up: one-dark/light-ui@v1.9.0 --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 9de606997..a448ea8e1 100644 --- a/package.json +++ b/package.json @@ -78,8 +78,8 @@ "atom-light-ui": "0.46.0", "base16-tomorrow-dark-theme": "1.4.0", "base16-tomorrow-light-theme": "1.4.0", - "one-dark-ui": "1.8.2", - "one-light-ui": "1.8.2", + "one-dark-ui": "1.9.0", + "one-light-ui": "1.9.0", "one-dark-syntax": "1.6.0", "one-light-syntax": "1.6.0", "solarized-dark-syntax": "1.1.1", From f8b079551be880ef33d8564cbd3dbd4421b1da2a Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Fri, 18 Nov 2016 09:38:33 -0700 Subject: [PATCH 053/184] :arrow_up: atom-keymap --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index a448ea8e1..f6b91654c 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "electronVersion": "1.3.9", "dependencies": { "async": "0.2.6", - "atom-keymap": "7.1.8", + "atom-keymap": "7.1.9", "atom-space-pen-views": "^2.0.0", "atom-ui": "0.4.1", "babel-core": "5.8.38", From 8c796b22ecaa81f200c5e6a5c8b6fcc23f0d1a7f Mon Sep 17 00:00:00 2001 From: Damien Guard Date: Fri, 18 Nov 2016 11:26:48 -0800 Subject: [PATCH 054/184] Use ctrl-shift-f5 to reload on Win/Linux --- keymaps/linux.cson | 2 +- keymaps/win32.cson | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/keymaps/linux.cson b/keymaps/linux.cson index f5d040168..189559171 100644 --- a/keymaps/linux.cson +++ b/keymaps/linux.cson @@ -6,7 +6,7 @@ 'down': 'core:move-down' 'left': 'core:move-left' 'right': 'core:move-right' - 'ctrl-shift-r': 'window:reload' + 'ctrl-shift-f5': 'window:reload' 'ctrl-shift-i': 'window:toggle-dev-tools' 'ctrl-shift-y': 'window:run-package-specs' 'ctrl-shift-o': 'application:open-folder' diff --git a/keymaps/win32.cson b/keymaps/win32.cson index 6966f2f0c..b87759b1f 100644 --- a/keymaps/win32.cson +++ b/keymaps/win32.cson @@ -12,7 +12,7 @@ 'ctrl-down': 'core:move-down' 'left': 'core:move-left' 'right': 'core:move-right' - 'ctrl-shift-r': 'window:reload' + 'ctrl-shift-f5': 'window:reload' 'ctrl-shift-i': 'window:toggle-dev-tools' 'ctrl-shift-y': 'window:run-package-specs' 'ctrl-shift-o': 'application:open-folder' From 56be2e43e6f24e9b3bc5f7b2fc1679f57464d609 Mon Sep 17 00:00:00 2001 From: Lee Dohm Date: Sat, 19 Nov 2016 08:48:29 -0800 Subject: [PATCH 055/184] :arrow_up: language-git@0.16.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index f6b91654c..5dda2099a 100644 --- a/package.json +++ b/package.json @@ -135,7 +135,7 @@ "language-csharp": "0.13.0", "language-css": "0.40.1", "language-gfm": "0.88.0", - "language-git": "0.15.0", + "language-git": "0.16.0", "language-go": "0.43.0", "language-html": "0.47.1", "language-hyperlink": "0.16.1", From c8a398e6e9dfb203ec2b7eeecc4c89fdd7953b2a Mon Sep 17 00:00:00 2001 From: Christopher Chedeau Date: Sat, 19 Nov 2016 10:30:14 -0800 Subject: [PATCH 056/184] Fix prepending multiple gutters at once There's a bug when multiple gutters are prepended at once where their order is not correctly preserved in the dom. The issue is that we do not update indexInOldGutters even though we inserted a dom node in the old gutters dom. Honestly, I'm unconvinced that this entire logic is correct, but this fixes the use case we have in Nuclide so it's more correct than before :) Released under CC0 --- spec/gutter-container-component-spec.coffee | 19 +++++++++++++++++++ src/gutter-container-component.coffee | 1 + 2 files changed, 20 insertions(+) diff --git a/spec/gutter-container-component-spec.coffee b/spec/gutter-container-component-spec.coffee index 73a9d0f6c..c5efbaa8e 100644 --- a/spec/gutter-container-component-spec.coffee +++ b/spec/gutter-container-component-spec.coffee @@ -139,3 +139,22 @@ describe "GutterContainerComponent", -> expect(expectedCustomGutterNode1).toBe atom.views.getView(customGutter1) expectedCustomGutterNode3 = gutterContainerComponent.getDomNode().children.item(2) expect(expectedCustomGutterNode3).toBe atom.views.getView(customGutter3) + + it "reorders correctly when prepending multiple gutters at once", -> + lineNumberGutter = new Gutter(mockGutterContainer, {name: 'line-number'}) + testState = buildTestState([lineNumberGutter]) + gutterContainerComponent.updateSync(testState) + expect(gutterContainerComponent.getDomNode().children.length).toBe 1 + expectedCustomGutterNode = gutterContainerComponent.getDomNode().children.item(0) + expect(expectedCustomGutterNode).toBe atom.views.getView(lineNumberGutter) + + # Prepend two gutters at once + customGutter1 = new Gutter(mockGutterContainer, {name: 'first', priority: -200}) + customGutter2 = new Gutter(mockGutterContainer, {name: 'second', priority: -100}) + testState = buildTestState([customGutter1, customGutter2, lineNumberGutter]) + gutterContainerComponent.updateSync(testState) + expect(gutterContainerComponent.getDomNode().children.length).toBe 3 + expectedCustomGutterNode1 = gutterContainerComponent.getDomNode().children.item(0) + expect(expectedCustomGutterNode1).toBe atom.views.getView(customGutter1) + expectedCustomGutterNode2 = gutterContainerComponent.getDomNode().children.item(1) + expect(expectedCustomGutterNode2).toBe atom.views.getView(customGutter2) diff --git a/src/gutter-container-component.coffee b/src/gutter-container-component.coffee index 56b0fea84..ebb2d8597 100644 --- a/src/gutter-container-component.coffee +++ b/src/gutter-container-component.coffee @@ -103,6 +103,7 @@ class GutterContainerComponent @domNode.appendChild(gutterComponent.getDomNode()) else @domNode.insertBefore(gutterComponent.getDomNode(), @domNode.children[indexInOldGutters]) + indexInOldGutters += 1 # Remove any gutters that were not present in the new gutters state. for gutterComponentDescription in @gutterComponents From dfdb657ce2953cec5eb05523901084109a643abc Mon Sep 17 00:00:00 2001 From: Yisheng Cai Date: Sat, 19 Nov 2016 20:21:02 -0500 Subject: [PATCH 057/184] Move "Fold all" menu entry to above the "Unfold all" entry (issue#13262) --- menus/darwin.cson | 2 +- menus/linux.cson | 2 +- menus/win32.cson | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/menus/darwin.cson b/menus/darwin.cson index f16bfa981..055cd2405 100644 --- a/menus/darwin.cson +++ b/menus/darwin.cson @@ -108,9 +108,9 @@ submenu: [ { label: 'Fold', command: 'editor:fold-current-row' } { label: 'Unfold', command: 'editor:unfold-current-row' } + { label: 'Fold All', command: 'editor:fold-all' } { label: 'Unfold All', command: 'editor:unfold-all' } { type: 'separator' } - { label: 'Fold All', command: 'editor:fold-all' } { label: 'Fold Level 1', command: 'editor:fold-at-indent-level-1' } { label: 'Fold Level 2', command: 'editor:fold-at-indent-level-2' } { label: 'Fold Level 3', command: 'editor:fold-at-indent-level-3' } diff --git a/menus/linux.cson b/menus/linux.cson index c900d3d29..94fb90a30 100644 --- a/menus/linux.cson +++ b/menus/linux.cson @@ -81,9 +81,9 @@ submenu: [ { label: '&Fold', command: 'editor:fold-current-row' } { label: '&Unfold', command: 'editor:unfold-current-row' } + { label: 'Fol&d All', command: 'editor:fold-all' } { label: 'Unfold &All', command: 'editor:unfold-all' } { type: 'separator' } - { label: 'Fol&d All', command: 'editor:fold-all' } { label: 'Fold Level 1', command: 'editor:fold-at-indent-level-1' } { label: 'Fold Level 2', command: 'editor:fold-at-indent-level-2' } { label: 'Fold Level 3', command: 'editor:fold-at-indent-level-3' } diff --git a/menus/win32.cson b/menus/win32.cson index 7897709b7..70bb1487d 100644 --- a/menus/win32.cson +++ b/menus/win32.cson @@ -89,9 +89,9 @@ submenu: [ { label: '&Fold', command: 'editor:fold-current-row' } { label: '&Unfold', command: 'editor:unfold-current-row' } + { label: 'Fol&d All', command: 'editor:fold-all' } { label: 'Unfold &All', command: 'editor:unfold-all' } { type: 'separator' } - { label: 'Fol&d All', command: 'editor:fold-all' } { label: 'Fold Level 1', command: 'editor:fold-at-indent-level-1' } { label: 'Fold Level 2', command: 'editor:fold-at-indent-level-2' } { label: 'Fold Level 3', command: 'editor:fold-at-indent-level-3' } From e932d69f44c3ddbbfe8b609919ed78db61bddf7c Mon Sep 17 00:00:00 2001 From: Lee Dohm Date: Sun, 20 Nov 2016 09:27:53 -0800 Subject: [PATCH 058/184] :arrow_up: language-git@0.17.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 5dda2099a..507df5797 100644 --- a/package.json +++ b/package.json @@ -135,7 +135,7 @@ "language-csharp": "0.13.0", "language-css": "0.40.1", "language-gfm": "0.88.0", - "language-git": "0.16.0", + "language-git": "0.17.0", "language-go": "0.43.0", "language-html": "0.47.1", "language-hyperlink": "0.16.1", From 777675223ba2c2a359638da7428b17b9ba5f57a6 Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Sun, 20 Nov 2016 17:40:09 -0700 Subject: [PATCH 059/184] :arrow_up: atom-keymap --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 507df5797..bedb9bcf5 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "electronVersion": "1.3.9", "dependencies": { "async": "0.2.6", - "atom-keymap": "7.1.9", + "atom-keymap": "7.1.10", "atom-space-pen-views": "^2.0.0", "atom-ui": "0.4.1", "babel-core": "5.8.38", From aa2c0d52e2c552698e8573fd5e07d9dd9a639e1e Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Sun, 20 Nov 2016 17:43:52 -0700 Subject: [PATCH 060/184] :arrow_up: atom-keymap --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index bedb9bcf5..b1aebfcd4 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "electronVersion": "1.3.9", "dependencies": { "async": "0.2.6", - "atom-keymap": "7.1.10", + "atom-keymap": "7.1.11", "atom-space-pen-views": "^2.0.0", "atom-ui": "0.4.1", "babel-core": "5.8.38", From b4dd1cb17872a351bdc401bda99c0fbb32537ce5 Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Mon, 21 Nov 2016 10:32:09 +0100 Subject: [PATCH 061/184] :arrow_up: spell-check --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index b1aebfcd4..36edd2d02 100644 --- a/package.json +++ b/package.json @@ -118,7 +118,7 @@ "package-generator": "1.0.2", "settings-view": "0.244.0", "snippets": "1.0.4", - "spell-check": "0.68.5", + "spell-check": "0.69.0", "status-bar": "1.7.0", "styleguide": "0.48.0", "symbols-view": "0.113.1", From c5301b6bea789a6dfd428a5a5a03f1f0fa9fcf76 Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Mon, 21 Nov 2016 09:56:30 -0700 Subject: [PATCH 062/184] :arrow_up: atom-keymap --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 36edd2d02..9d61c3f5c 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "electronVersion": "1.3.9", "dependencies": { "async": "0.2.6", - "atom-keymap": "7.1.11", + "atom-keymap": "7.1.12", "atom-space-pen-views": "^2.0.0", "atom-ui": "0.4.1", "babel-core": "5.8.38", From 2a75e7d9284c8af9f75ba57dd46cdfa372b7f8c7 Mon Sep 17 00:00:00 2001 From: Akonwi Ngoh Date: Mon, 21 Nov 2016 11:57:35 -0500 Subject: [PATCH 063/184] :memo: Update documentation for ::getConfigValue Adds the `key` argument to the function documentation --- src/git-repository.coffee | 1 + 1 file changed, 1 insertion(+) diff --git a/src/git-repository.coffee b/src/git-repository.coffee index d47b2e37c..423a5ce2f 100644 --- a/src/git-repository.coffee +++ b/src/git-repository.coffee @@ -238,6 +238,7 @@ class GitRepository # Public: Returns the git configuration value specified by the key. # + # * `key` The {String} key for the configuration to lookup. # * `path` An optional {String} path in the repository to get this information # for, only needed if the repository has submodules. getConfigValue: (key, path) -> @getRepo(path).getConfigValue(key) From 442872e7acd7fcb071414a99440869bcbe52dc0d Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Mon, 21 Nov 2016 18:44:10 +0100 Subject: [PATCH 064/184] Call `openDevTools` on `WebContents` rather than on `BrowserWindow` Fixes #13171 --- static/index.js | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/static/index.js b/static/index.js index b76477e03..2966eafdf 100644 --- a/static/index.js +++ b/static/index.js @@ -116,14 +116,12 @@ }) } - var currentWindow = require('electron').remote.getCurrentWindow() - if (currentWindow.devToolsWebContents) { + const webContents = require('electron').remote.getCurrentWindow().webContents + if (webContents.devToolsWebContents) { profile() } else { - currentWindow.openDevTools() - currentWindow.once('devtools-opened', function () { - setTimeout(profile, 1000) - }) + webContents.once('devtools-opened', () => { setTimeout(profile, 1000) }) + webContents.openDevTools() } } From da864a8f182c73a68bed7ddfe5f3cef6a1edb58b Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Mon, 21 Nov 2016 19:04:14 +0100 Subject: [PATCH 065/184] Add libXScrnSaver dependency to the RPM package spec --- resources/linux/redhat/atom.spec.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/linux/redhat/atom.spec.in b/resources/linux/redhat/atom.spec.in index 0ee120b35..aff76e18c 100644 --- a/resources/linux/redhat/atom.spec.in +++ b/resources/linux/redhat/atom.spec.in @@ -7,7 +7,7 @@ URL: https://atom.io/ AutoReqProv: no # Avoid libchromiumcontent.so missing dependency Prefix: <%= installDir %> -Requires: lsb-core-noarch +Requires: lsb-core-noarch, libXScrnSaver %description <%= description %> From cab2e8f8a755a36b57985a3fa1fbf1f2f3417204 Mon Sep 17 00:00:00 2001 From: Max Brunsfeld Date: Mon, 21 Nov 2016 10:46:41 -0800 Subject: [PATCH 066/184] :arrow_up: scandal --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 9d61c3f5c..e42de676b 100644 --- a/package.json +++ b/package.json @@ -56,7 +56,7 @@ "random-words": "0.0.1", "resolve": "^1.1.6", "runas": "^3.1", - "scandal": "2.2.1", + "scandal": "2.2.2", "scoped-property-store": "^0.17.0", "scrollbar-style": "^3.2", "season": "^5.4.1", From bf056b0547a157540cfc8edf1fdb7b7b35193b54 Mon Sep 17 00:00:00 2001 From: Max Brunsfeld Date: Mon, 21 Nov 2016 11:05:50 -0800 Subject: [PATCH 067/184] Prevent generated files from being excluded in Workspace::scan test --- spec/workspace-spec.coffee | 1 + 1 file changed, 1 insertion(+) diff --git a/spec/workspace-spec.coffee b/spec/workspace-spec.coffee index 61f1e8266..aa47ebc2c 100644 --- a/spec/workspace-spec.coffee +++ b/spec/workspace-spec.coffee @@ -1139,6 +1139,7 @@ describe "Workspace", -> range: [[2, 6], [2, 11]] it "works on evil filenames", -> + atom.config.set('core.excludeVcsIgnoredPaths', false) platform.generateEvilFiles() atom.project.setPaths([path.join(__dirname, 'fixtures', 'evil-files')]) paths = [] From a55f55e417386d2e994956f90d3b6909c92d7bb7 Mon Sep 17 00:00:00 2001 From: Max Brunsfeld Date: Mon, 21 Nov 2016 12:45:39 -0800 Subject: [PATCH 068/184] :arrow_up: find-and-replace --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index e42de676b..3b5159bda 100644 --- a/package.json +++ b/package.json @@ -101,7 +101,7 @@ "dev-live-reload": "0.47.0", "encoding-selector": "0.22.0", "exception-reporting": "0.40.0", - "find-and-replace": "0.204.2", + "find-and-replace": "0.204.4", "fuzzy-finder": "1.4.0", "git-diff": "1.2.0", "go-to-line": "0.31.2", From 0122b7726a1e4eace2a9650b94d9e03c2926c944 Mon Sep 17 00:00:00 2001 From: Thomas Johansen Date: Tue, 22 Nov 2016 13:05:43 +0100 Subject: [PATCH 069/184] :arrow_up: language-git@0.180.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 3b5159bda..155a94661 100644 --- a/package.json +++ b/package.json @@ -135,7 +135,7 @@ "language-csharp": "0.13.0", "language-css": "0.40.1", "language-gfm": "0.88.0", - "language-git": "0.17.0", + "language-git": "0.18.0", "language-go": "0.43.0", "language-html": "0.47.1", "language-hyperlink": "0.16.1", From 5d313cead7b4901b55b67960b86a82ffed1df637 Mon Sep 17 00:00:00 2001 From: Damien Guard Date: Tue, 22 Nov 2016 22:40:52 -0800 Subject: [PATCH 070/184] Enable recent files, projects, new window task on Windows taskbar --- src/reopen-project-menu-manager.js | 25 +++++++++++++++++++++++++ src/workspace.coffee | 2 +- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/src/reopen-project-menu-manager.js b/src/reopen-project-menu-manager.js index 50c42e115..b651b6223 100644 --- a/src/reopen-project-menu-manager.js +++ b/src/reopen-project-menu-manager.js @@ -46,6 +46,31 @@ export default class ReopenProjectMenuManager { this.projects = this.historyManager.getProjects().slice(0, this.config.get('core.reopenProjectMenuCount')) const newMenu = ReopenProjectMenuManager.createProjectsMenu(this.projects) this.lastProjectMenu = this.menuManager.add([newMenu]) + this.updateWindowsJumpList() + } + + updateWindowsJumpList () { + if (process.platform !== 'win32') return + + if (this.app === undefined) { + this.app = require('remote').app + } + + this.app.setJumpList([ + { + type:'custom', + name:'Recent Projects', + items: this.projects.map(p => ({ + type: 'task', + title: ReopenProjectMenuManager.createLabel(p), + program: process.execPath, + args: p.paths.map(path => `"${path}"`).join(' ') })) + }, + { type: 'recent' }, + { items: [ + {type: 'task', title: 'New Window', program: process.execPath, args: '--new-window', description: 'Opens a new Atom window'} + ]} + ]) } dispose () { diff --git a/src/workspace.coffee b/src/workspace.coffee index 89c53b678..9c6dc3b80 100644 --- a/src/workspace.coffee +++ b/src/workspace.coffee @@ -441,7 +441,7 @@ class Workspace extends Model # Avoid adding URLs as recent documents to work-around this Spotlight crash: # https://github.com/atom/atom/issues/10071 - if uri? and not url.parse(uri).protocol? + if uri? and (not url.parse(uri).protocol? or process.platform is 'win32') @applicationDelegate.addRecentDocument(uri) pane = @paneContainer.paneForURI(uri) if searchAllPanes From 71638ccd0f3fd9813df7cf5800417e3fd0156b73 Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Wed, 23 Nov 2016 16:46:13 +0100 Subject: [PATCH 071/184] :arrow_up: atom-keymap --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 155a94661..fbd4f81d4 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "electronVersion": "1.3.9", "dependencies": { "async": "0.2.6", - "atom-keymap": "7.1.12", + "atom-keymap": "7.1.13", "atom-space-pen-views": "^2.0.0", "atom-ui": "0.4.1", "babel-core": "5.8.38", From f160ccecd15a844fcb121cdacf66695fbcd3efba Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Tue, 22 Nov 2016 12:36:32 +0100 Subject: [PATCH 072/184] Include relatedTarget when dispatching blur events from TextEditorElement --- src/text-editor-element.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/text-editor-element.coffee b/src/text-editor-element.coffee index 4a7d1598d..8f2538ede 100644 --- a/src/text-editor-element.coffee +++ b/src/text-editor-element.coffee @@ -141,7 +141,7 @@ class TextEditorElement extends HTMLElement inputNodeBlurred: (event) -> if event.relatedTarget isnt this - @dispatchEvent(new FocusEvent('blur', bubbles: false)) + @dispatchEvent(new FocusEvent('blur', relatedTarget: event.relatedTarget, bubbles: false)) addGrammarScopeAttribute: -> @dataset.grammar = @model.getGrammar()?.scopeName?.replace(/\./g, ' ') From c2793c3fd63fd75be467ffb02d6abd261272e5b3 Mon Sep 17 00:00:00 2001 From: Damien Guard Date: Wed, 23 Nov 2016 11:30:21 -0800 Subject: [PATCH 073/184] :arrow_up: notifications --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index fbd4f81d4..35633ac68 100644 --- a/package.json +++ b/package.json @@ -113,7 +113,7 @@ "link": "0.31.2", "markdown-preview": "0.159.1", "metrics": "1.1.2", - "notifications": "0.65.1", + "notifications": "0.65.2", "open-on-github": "1.2.1", "package-generator": "1.0.2", "settings-view": "0.244.0", From 4b20489335f228ce824b031b64024076f8bc97e1 Mon Sep 17 00:00:00 2001 From: Damien Guard Date: Wed, 23 Nov 2016 11:34:20 -0800 Subject: [PATCH 074/184] :arrow_up: archive-view --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 35633ac68..7c4564f9a 100644 --- a/package.json +++ b/package.json @@ -85,7 +85,7 @@ "solarized-dark-syntax": "1.1.1", "solarized-light-syntax": "1.1.1", "about": "1.7.2", - "archive-view": "0.62.0", + "archive-view": "0.62.2", "autocomplete-atom-api": "0.10.0", "autocomplete-css": "0.14.1", "autocomplete-html": "0.7.2", From 917e2b728b5320c92ce985c47f6b64ccd7f9ea67 Mon Sep 17 00:00:00 2001 From: Damien Guard Date: Wed, 23 Nov 2016 11:36:05 -0800 Subject: [PATCH 075/184] :arrow_up: welcome --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 7c4564f9a..d4fddccfb 100644 --- a/package.json +++ b/package.json @@ -126,7 +126,7 @@ "timecop": "0.33.2", "tree-view": "0.211.1", "update-package-dependencies": "0.10.0", - "welcome": "0.35.1", + "welcome": "0.35.2", "whitespace": "0.35.0", "wrap-guide": "0.39.0", "language-c": "0.54.0", From 78b5a7cd7644d487335cec3f8db89facee45a3a3 Mon Sep 17 00:00:00 2001 From: Damien Guard Date: Wed, 23 Nov 2016 13:09:36 -0800 Subject: [PATCH 076/184] Links to repos --- docs/build-instructions/build-status.md | 173 ++++++++++++------------ 1 file changed, 86 insertions(+), 87 deletions(-) diff --git a/docs/build-instructions/build-status.md b/docs/build-instructions/build-status.md index a17923224..c48c76307 100644 --- a/docs/build-instructions/build-status.md +++ b/docs/build-instructions/build-status.md @@ -2,111 +2,110 @@ | System | macOS | Windows | Dependencies | |--------|------|---------|--------------| -| Atom | [![macOS Build Status](https://travis-ci.org/atom/atom.svg?branch=master)](https://travis-ci.org/atom/atom) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/1tkktwh654w07eim?svg=true)](https://ci.appveyor.com/project/Atom/atom) | [![Dependency Status](https://david-dm.org/atom/atom.svg)](https://david-dm.org/atom/atom) | -| APM | [![macOS Build Status](https://travis-ci.org/atom/apm.svg?branch=master)](https://travis-ci.org/atom/apm) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/j6ixw374a397ugkb/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/apm/branch/master) | [![Dependency Status](https://david-dm.org/atom/apm.svg)](https://david-dm.org/atom/apm) | -| Electron | [![macOS Build Status](https://travis-ci.org/electron/electron.svg?branch=master)](https://travis-ci.org/electron/electron) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/kvxe4byi7jcxbe26/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/electron) | [![Dependency Status](https://david-dm.org/electron/electron/dev-status.svg)](https://david-dm.org/electron/electron) +| [Atom](https://github.com/atom/atom) | [![macOS Build Status](https://travis-ci.org/atom/atom.svg?branch=master)](https://travis-ci.org/atom/atom) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/1tkktwh654w07eim?svg=true)](https://ci.appveyor.com/project/Atom/atom) | [![Dependency Status](https://david-dm.org/atom/atom.svg)](https://david-dm.org/atom/atom) | +| [APM](https://github.com/atom/apm) | [![macOS Build Status](https://travis-ci.org/atom/apm.svg?branch=master)](https://travis-ci.org/atom/apm) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/j6ixw374a397ugkb/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/apm/branch/master) | [![Dependency Status](https://david-dm.org/atom/apm.svg)](https://david-dm.org/atom/apm) | +| [Electron](https://github.com/electron/electron) | [![macOS Build Status](https://travis-ci.org/electron/electron.svg?branch=master)](https://travis-ci.org/electron/electron) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/kvxe4byi7jcxbe26/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/electron) | [![Dependency Status](https://david-dm.org/electron/electron/dev-status.svg)](https://david-dm.org/electron/electron) ## Packages | Package | macOS | Windows | Dependencies | |---------|------|---------|--------------| -| About | [![macOS Build Status](https://travis-ci.org/atom/about.svg?branch=master)](https://travis-ci.org/atom/about) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/msprea3vq47l8oce/branch/master?svg=true)](https://ci.appveyor.com/project/atom/about/branch/master) | [![Dependency Status](https://david-dm.org/atom/about.svg)](https://david-dm.org/atom/about) | -| Archive View | [![macOS Build Status](https://travis-ci.org/atom/archive-view.svg?branch=master)](https://travis-ci.org/atom/archive-view) | [![Windows Build status](https://ci.appveyor.com/api/projects/status/u3qfgaod4lhriqlj/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/archive-view/branch/master) | [![Dependency Status](https://david-dm.org/atom/archive-view.svg)](https://david-dm.org/atom/archive-view) | -| AutoComplete Atom API | [![macOS Build Status](https://travis-ci.org/atom/autocomplete-atom-api.svg?branch=master)](https://travis-ci.org/atom/autocomplete-atom-api) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/1x3uqd9ddchpe555/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/autocomplete-atom-api/branch/master) | [![Dependency Status](https://david-dm.org/atom/autocomplete-atom-api.svg)](https://david-dm.org/atom/autocomplete-atom-api) | -| Atom Space Pen Views | [![macOS Build Status](https://travis-ci.org/atom/atom-space-pen-views.svg?branch=master)](https://travis-ci.org/atom/atom-space-pen-views) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/5lgv47has6n8uhuv/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/atom-space-pen-views/branch/master) | [![Dependency Status](https://david-dm.org/atom/atom-space-pen-views.svg)](https://david-dm.org/atom/atom-space-pen-views) | -| AutoComplete CSS | [![macOS Build Status](https://travis-ci.org/atom/autocomplete-css.svg?branch=master)](https://travis-ci.org/atom/autocomplete-css) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/k3e5uvpmpc5bkja9/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/autocomplete-css/branch/master) | [![Dependency Status](https://david-dm.org/atom/autocomplete-css.svg)](https://david-dm.org/atom/autocomplete-css) | -| AutoComplete HTML | [![macOS Build Status](https://travis-ci.org/atom/autocomplete-html.svg?branch=master)](https://travis-ci.org/atom/autocomplete-html) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/bsaqbg1fljpd9q1b/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/autocomplete-html/branch/master) | [![Dependency Status](https://david-dm.org/atom/autocomplete-html.svg)](https://david-dm.org/atom/autocomplete-html) | -| AutoComplete+ | [![macOS Build Status](https://travis-ci.org/atom/autocomplete-plus.svg?branch=master)](https://travis-ci.org/atom/autocomplete-plus) | [![Windows Build status](https://ci.appveyor.com/api/projects/status/9bpokrud2apgqsq0/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/autocomplete-plus/branch/master) | [![Dependency Status](https://david-dm.org/atom/autocomplete-plus.svg)](https://david-dm.org/atom/autocomplete-plus) | -| AutoComplete Snippets | [![macOS Build Status](https://travis-ci.org/atom/autocomplete-snippets.svg)](https://travis-ci.org/atom/autocomplete-snippets) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/72kfi83l6cw90joy/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/autocomplete-snippets/branch/master) | [![Dependency Status](https://david-dm.org/atom/autocomplete-snippets.svg)](https://david-dm.org/atom/autocomplete-snippets) | -| AutoFlow | [![macOS Build Status](https://travis-ci.org/atom/autoflow.svg?branch=master)](https://travis-ci.org/atom/autoflow) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/kpmsnkbooa29x907/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/autoflow/branch/master) | [![Dependency Status](https://david-dm.org/atom/autoflow.svg)](https://david-dm.org/atom/autoflow) | -| AutoSave | [![macOS Build Status](https://travis-ci.org/atom/autosave.svg?branch=master)](https://travis-ci.org/atom/autosave) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/3aktr9updp722fqx/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/autosave/branch/master) | [![Dependency Status](https://david-dm.org/atom/autosave.svg)](https://david-dm.org/atom/autosave) | -| Background Tips | [![macOS Build Status](https://travis-ci.org/atom/background-tips.svg?branch=master)](https://travis-ci.org/atom/background-tips) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/2utcugietl5vjc7w/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/background-tips/branch/master) | [![Dependency Status](https://david-dm.org/atom/background-tips.svg)](https://david-dm.org/atom/background-tips) | -| Bookmarks | [![macOS Build Status](https://travis-ci.org/atom/bookmarks.svg?branch=master)](https://travis-ci.org/atom/bookmarks) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/vjsf78pj4rw6ibcw/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/bookmarks/branch/master) | [![Dependency Status](https://david-dm.org/atom/bookmarks.svg)](https://david-dm.org/atom/bookmarks) | -| Bracket Matcher | [![macOS Build Status](https://travis-ci.org/atom/bracket-matcher.svg?branch=master)](https://travis-ci.org/atom/bracket-matcher) | [![Windows Build status](https://ci.appveyor.com/api/projects/status/rrsl2h7e0od26k54/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/bracket-matcher/branch/master) | [![Dependency Status](https://david-dm.org/atom/bracket-matcher.svg)](https://david-dm.org/atom/bracket-matcher) | -| Command Palette | [![macOS Build Status](https://travis-ci.org/atom/command-palette.svg?branch=master)](https://travis-ci.org/atom/command-palette) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/jqgwetayr0enorun/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/command-palette/branch/master) | [![Dependency Status](https://david-dm.org/atom/command-palette.svg)](https://david-dm.org/atom/command-palette) | -| Deprecation Cop | [![macOS Build Status](https://travis-ci.org/atom/deprecation-cop.svg?branch=master)](https://travis-ci.org/atom/deprecation-cop) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/0s870q5fj3vwihjx/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/deprecation-cop/branch/master) | [![Dependency Status](https://david-dm.org/atom/deprecation-cop.svg)](https://david-dm.org/atom/deprecation-cop) | -| Dev Live Reload | [![macOS Build Status](https://travis-ci.org/atom/dev-live-reload.svg?branch=master)](https://travis-ci.org/atom/dev-live-reload) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/g3sd27ylba1fun1v/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/dev-live-reload/branch/master) | [![Dependency Status](https://david-dm.org/atom/dev-live-reload.svg)](https://david-dm.org/atom/dev-live-reload) | -| Encoding Selector | [![macOS Build Status](https://travis-ci.org/atom/encoding-selector.svg?branch=master)](https://travis-ci.org/atom/encoding-selector) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/e08x6k2b68wpwxxc/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/encoding-selector/branch/master) | [![Dependency Status](https://david-dm.org/atom/encoding-selector.svg)](https://david-dm.org/atom/encoding-selector) | -| Exception Reporting | [![macOS Build Status](https://travis-ci.org/atom/exception-reporting.svg?branch=master)](https://travis-ci.org/atom/exception-reporting) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/i0pla7qbpv7celg2/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/exception-reporting/branch/master) | [![Dependency Status](https://david-dm.org/atom/exception-reporting.svg)](https://david-dm.org/atom/exception-reporting) | -| Find and Replace | [![macOS Build Status](https://travis-ci.org/atom/find-and-replace.svg?branch=master)](https://travis-ci.org/atom/find-and-replace) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/6w4baiiq5mw4nxky/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/find-and-replace/branch/master) | [![Dependency Status](https://david-dm.org/atom/find-and-replace.svg)](https://david-dm.org/atom/find-and-replace) | -| Fuzzy Finder | [![macOS Build Status](https://travis-ci.org/atom/fuzzy-finder.svg?branch=master)](https://travis-ci.org/atom/fuzzy-finder) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/b4b2dg5n9r1wdqad/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/fuzzy-finder/branch/master) | [![Dependency Status](https://david-dm.org/atom/fuzzy-finder.svg)](https://david-dm.org/atom/fuzzy-finder) | -| Git Diff | [![macOS Build Status](https://travis-ci.org/atom/git-diff.svg?branch=master)](https://travis-ci.org/atom/git-diff) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/9auj52cs0vso66nv/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/git-diff/branch/master) | [![Dependency Status](https://david-dm.org/atom/git-diff.svg)](https://david-dm.org/atom/git-diff) | -| Go to Line | [![macOS Build Status](https://travis-ci.org/atom/go-to-line.svg?branch=master)](https://travis-ci.org/atom/go-to-line) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/qf0isc8ulw4wxi0b/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/go-to-line/branch/master) | [![Dependency Status](https://david-dm.org/atom/go-to-line.svg)](https://david-dm.org/atom/go-to-line) | -| Grammar Selector | [![macOS Build Status](https://travis-ci.org/atom/grammar-selector.svg?branch=master)](https://travis-ci.org/atom/grammar-selector) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/pg8qss03bfh4ngqm/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/grammar-selector/branch/master) | [![Dependency Status](https://david-dm.org/atom/grammar-selector.svg)](https://david-dm.org/atom/grammar-selector) | -| Image View | [![macOS Build Status](https://travis-ci.org/atom/image-view.svg?branch=master)](https://travis-ci.org/atom/image-view) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/notavaawrswk0g10/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/image-view/branch/master) | [![Dependency Status](https://david-dm.org/atom/image-view.svg)](https://david-dm.org/atom/image-view) | -| Incompatible Packages | [![macOS Build Status](https://travis-ci.org/atom/incompatible-packages.svg?branch=master)](https://travis-ci.org/atom/incompatible-packages) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/neet595s038x7w70/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/incompatible-packages/branch/master) | [![Dependency Status](https://david-dm.org/atom/incompatible-packages.svg)](https://david-dm.org/atom/incompatible-packages) | -| Keybinding Resolver | [![macOS Build Status](https://travis-ci.org/atom/keybinding-resolver.svg?branch=master)](https://travis-ci.org/atom/keybinding-resolver) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/9jf31itx01hnn4nh/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/keybinding-resolver/branch/master) | [![Dependency Status](https://david-dm.org/atom/keybinding-resolver.svg)](https://david-dm.org/atom/keybinding-resolver) | -| Line Ending Selector | [![macOS Build Status](https://travis-ci.org/atom/line-ending-selector.svg?branch=master)](https://travis-ci.org/atom/line-ending-selector) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/b3743n9ojomlpn1g/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/line-ending-selector/branch/master) | [![Dependency Status](https://david-dm.org/atom/line-ending-selector.svg)](https://david-dm.org/atom/line-ending-selector) | -| Link | [![macOS Build Status](https://travis-ci.org/atom/link.svg?branch=master)](https://travis-ci.org/atom/link) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/1d3cb8ktd48k9vnl/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/link/branch/master) | [![Dependency Status](https://david-dm.org/atom/link.svg)](https://david-dm.org/atom/link) | -| Markdown Preview | [![macOS Build Status](https://travis-ci.org/atom/markdown-preview.svg?branch=master)](https://travis-ci.org/atom/markdown-preview) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/bvh0evhh4v6w9b29/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/markdown-preview/branch/master) | [![Dependency Status](https://david-dm.org/atom/markdown-preview.svg)](https://david-dm.org/atom/markdown-preview) | -| Metrics | [![macOS Build Status](https://travis-ci.org/atom/metrics.svg?branch=master)](https://travis-ci.org/atom/metrics) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/b5doi205xl3iex04/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/metrics/branch/master) | [![Dependency Status](https://david-dm.org/atom/metrics.svg)](https://david-dm.org/atom/metrics) | -| Notifications | [![macOS Build Status](https://travis-ci.org/atom/notifications.svg?branch=master)](https://travis-ci.org/atom/notifications) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/ps3p8tj2okw57x0e/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/notifications/branch/master) | [![Dependency Status](https://david-dm.org/atom/notifications.svg)](https://david-dm.org/atom/notifications) | -| Open on Github | [![macOS Build Status](https://travis-ci.org/atom/open-on-github.svg?branch=master)](https://travis-ci.org/atom/open-on-github) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/ccl6na4qsna5wncr/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/open-on-github/branch/master) | [![Dependency Status](https://david-dm.org/atom/open-on-github.svg)](https://david-dm.org/atom/open-on-github) | -| Package Generator | [![macOS Build Status](https://travis-ci.org/atom/package-generator.svg?branch=master)](https://travis-ci.org/atom/package-generator)| [![Windows Build Status](https://ci.appveyor.com/api/projects/status/7t1i4hdmljhigp9u/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/package-generator/branch/master) | [![Dependency Status](https://david-dm.org/atom/package-generator.svg)](https://david-dm.org/atom/package-generator) | -| Settings View | [![macOS Build Status](https://travis-ci.org/atom/settings-view.svg?branch=master)](https://travis-ci.org/atom/settings-view) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/hatgxg6k2g3grafq/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/settings-view/branch/master) | [![Dependency Status](https://david-dm.org/atom/settings-view.svg)](https://david-dm.org/atom/settings-view) | -| Snippets | [![macOS Build Status](https://travis-ci.org/atom/snippets.svg?branch=master)](https://travis-ci.org/atom/snippets) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/8hlc0onofkgbxw53/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/snippets/branch/master) | [![Dependency Status](https://david-dm.org/atom/snippets.svg)](https://david-dm.org/atom/snippets) | -| Spell Check | [![macOS Build Status](https://travis-ci.org/atom/spell-check.svg?branch=master)](https://travis-ci.org/atom/spell-check) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/1620a5reqw6kdolv/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/spell-check/branch/master) | [![Dependency Status](https://david-dm.org/atom/spell-check.svg)](https://david-dm.org/atom/spell-check) | -| Status Bar | [![macOS Build Status](https://travis-ci.org/atom/status-bar.svg?branch=master)](https://travis-ci.org/atom/status-bar) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/gu8tv4h6cnpeesg2/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/status-bar/branch/master) | [![Dependency Status](https://david-dm.org/atom/status-bar.svg)](https://david-dm.org/atom/status-bar) | -| Styleguide | [![macOS Build Status](https://travis-ci.org/atom/styleguide.svg?branch=master)](https://travis-ci.org/atom/styleguide) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/88dt9jxexkpindhw/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/styleguide/branch/master) | [![Dependency Status](https://david-dm.org/atom/styleguide.svg)](https://david-dm.org/atom/styleguide) | -| Symbols View | [![macOS Build Status](https://travis-ci.org/atom/symbols-view.svg?branch=master)](https://travis-ci.org/atom/symbols-view) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/al68vtv83x49eu5d/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/symbols-view/branch/master) | [![Dependency Status](https://david-dm.org/atom/symbols-view.svg)](https://david-dm.org/atom/symbols-view) | -| Tabs | [![macOS Build Status](https://travis-ci.org/atom/tabs.svg?branch=master)](https://travis-ci.org/atom/tabs) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/nf4hdmuk4i9xkfmb/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/tabs/branch/master) | [![Dependency Status](https://david-dm.org/atom/tabs.svg)](https://david-dm.org/atom/tabs) | -| Timecop | [![macOS Build Status](https://travis-ci.org/atom/timecop.svg?branch=master)](https://travis-ci.org/atom/timecop) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/37fhichmvx90sd97/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/timecop/branch/master) | [![Dependency Status](https://david-dm.org/atom/timecop.svg)](https://david-dm.org/atom/timecop) | -| Tree View | [![macOS Build Status](https://travis-ci.org/atom/tree-view.svg?branch=master)](https://travis-ci.org/atom/tree-view) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/com793ehi0hajrkd/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/tree-view/branch/master) | [![Dependency Status](https://david-dm.org/atom/tree-view.svg)](https://david-dm.org/atom/tree-view) | -| Update Package Dependencies | [![macOS Build Status](https://travis-ci.org/atom/update-package-dependencies.svg?branch=master)](https://travis-ci.org/atom/update-package-dependencies) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/5xqtoc3xk1e7lt2y/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/update-package-dependencies/branch/master) | [![Dependency Status](https://david-dm.org/atom/update-package-dependencies.svg)](https://david-dm.org/atom/update-package-dependencies) | -| Welcome | [![macOS Build Status](https://travis-ci.org/atom/welcome.svg?branch=master)](https://travis-ci.org/atom/welcome) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/c3ssyte35ivvnt62/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/welcome/branch/master) | [![Dependency Status](https://david-dm.org/atom/welcome.svg)](https://david-dm.org/atom/welcome) | -| Whitespace | [![macOS Build Status](https://travis-ci.org/atom/whitespace.svg?branch=master)](https://travis-ci.org/atom/whitespace) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/sf8pdb3ausdk1vtb/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/whitespace/branch/master) | [![Dependency Status](https://david-dm.org/atom/whitespace.svg)](https://david-dm.org/atom/whitespace) | -| Wrap Guide | [![macOS Build Status](https://travis-ci.org/atom/wrap-guide.svg?branch=master)](https://travis-ci.org/atom/wrap-guide) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/5qk1io3uar5j8hol/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/wrap-guide/branch/master) | [![Dependency Status](https://david-dm.org/atom/wrap-guide.svg)](https://david-dm.org/atom/wrap-guide) | +| [About](https://github.com/atom/about) | [![macOS Build Status](https://travis-ci.org/atom/about.svg?branch=master)](https://travis-ci.org/atom/about) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/msprea3vq47l8oce/branch/master?svg=true)](https://ci.appveyor.com/project/atom/about/branch/master) | [![Dependency Status](https://david-dm.org/atom/about.svg)](https://david-dm.org/atom/about) | +| [Archive View](https://github.com/atom/archive-view) | [![macOS Build Status](https://travis-ci.org/atom/archive-view.svg?branch=master)](https://travis-ci.org/atom/archive-view) | [![Windows Build status](https://ci.appveyor.com/api/projects/status/u3qfgaod4lhriqlj/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/archive-view/branch/master) | [![Dependency Status](https://david-dm.org/atom/archive-view.svg)](https://david-dm.org/atom/archive-view) | +| [AutoComplete Atom API](https://github.com/atom/autocomplete-atom-api) | [![macOS Build Status](https://travis-ci.org/atom/autocomplete-atom-api.svg?branch=master)](https://travis-ci.org/atom/autocomplete-atom-api) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/1x3uqd9ddchpe555/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/autocomplete-atom-api/branch/master) | [![Dependency Status](https://david-dm.org/atom/autocomplete-atom-api.svg)](https://david-dm.org/atom/autocomplete-atom-api) | +| [AutoComplete CSS](https://github.com/atom/autocomplete-css) | [![macOS Build Status](https://travis-ci.org/atom/autocomplete-css.svg?branch=master)](https://travis-ci.org/atom/autocomplete-css) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/k3e5uvpmpc5bkja9/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/autocomplete-css/branch/master) | [![Dependency Status](https://david-dm.org/atom/autocomplete-css.svg)](https://david-dm.org/atom/autocomplete-css) | +| [AutoComplete HTML](https://github.com/atom/autocomplete-html) | [![macOS Build Status](https://travis-ci.org/atom/autocomplete-html.svg?branch=master)](https://travis-ci.org/atom/autocomplete-html) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/bsaqbg1fljpd9q1b/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/autocomplete-html/branch/master) | [![Dependency Status](https://david-dm.org/atom/autocomplete-html.svg)](https://david-dm.org/atom/autocomplete-html) | +| [AutoComplete+](https://github.com/atom/autocomplete-plus) | [![macOS Build Status](https://travis-ci.org/atom/autocomplete-plus.svg?branch=master)](https://travis-ci.org/atom/autocomplete-plus) | [![Windows Build status](https://ci.appveyor.com/api/projects/status/9bpokrud2apgqsq0/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/autocomplete-plus/branch/master) | [![Dependency Status](https://david-dm.org/atom/autocomplete-plus.svg)](https://david-dm.org/atom/autocomplete-plus) | +| [AutoComplete Snippets](https://github.com/atom/autocomplete-snippets) | [![macOS Build Status](https://travis-ci.org/atom/autocomplete-snippets.svg)](https://travis-ci.org/atom/autocomplete-snippets) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/72kfi83l6cw90joy/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/autocomplete-snippets/branch/master) | [![Dependency Status](https://david-dm.org/atom/autocomplete-snippets.svg)](https://david-dm.org/atom/autocomplete-snippets) | +| [AutoFlow](https://github.com/atom/autoflow) | [![macOS Build Status](https://travis-ci.org/atom/autoflow.svg?branch=master)](https://travis-ci.org/atom/autoflow) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/kpmsnkbooa29x907/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/autoflow/branch/master) | [![Dependency Status](https://david-dm.org/atom/autoflow.svg)](https://david-dm.org/atom/autoflow) | +| [AutoSave](https://github.com/atom/autosave) | [![macOS Build Status](https://travis-ci.org/atom/autosave.svg?branch=master)](https://travis-ci.org/atom/autosave) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/3aktr9updp722fqx/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/autosave/branch/master) | [![Dependency Status](https://david-dm.org/atom/autosave.svg)](https://david-dm.org/atom/autosave) | +| [Background Tips](https://github.com/atom/background-tips) | [![macOS Build Status](https://travis-ci.org/atom/background-tips.svg?branch=master)](https://travis-ci.org/atom/background-tips) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/2utcugietl5vjc7w/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/background-tips/branch/master) | [![Dependency Status](https://david-dm.org/atom/background-tips.svg)](https://david-dm.org/atom/background-tips) | +| [Bookmarks](https://github.com/atom/bookmarks) | [![macOS Build Status](https://travis-ci.org/atom/bookmarks.svg?branch=master)](https://travis-ci.org/atom/bookmarks) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/vjsf78pj4rw6ibcw/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/bookmarks/branch/master) | [![Dependency Status](https://david-dm.org/atom/bookmarks.svg)](https://david-dm.org/atom/bookmarks) | +| [Bracket Matcher](https://github.com/atom/bracket-matcher) | [![macOS Build Status](https://travis-ci.org/atom/bracket-matcher.svg?branch=master)](https://travis-ci.org/atom/bracket-matcher) | [![Windows Build status](https://ci.appveyor.com/api/projects/status/rrsl2h7e0od26k54/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/bracket-matcher/branch/master) | [![Dependency Status](https://david-dm.org/atom/bracket-matcher.svg)](https://david-dm.org/atom/bracket-matcher) | +| [Command Palette](https://github.com/atom/command-palette) | [![macOS Build Status](https://travis-ci.org/atom/command-palette.svg?branch=master)](https://travis-ci.org/atom/command-palette) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/jqgwetayr0enorun/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/command-palette/branch/master) | [![Dependency Status](https://david-dm.org/atom/command-palette.svg)](https://david-dm.org/atom/command-palette) | +| [Deprecation Cop](https://github.com/atom/deprecation-cop) | [![macOS Build Status](https://travis-ci.org/atom/deprecation-cop.svg?branch=master)](https://travis-ci.org/atom/deprecation-cop) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/0s870q5fj3vwihjx/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/deprecation-cop/branch/master) | [![Dependency Status](https://david-dm.org/atom/deprecation-cop.svg)](https://david-dm.org/atom/deprecation-cop) | +| [Dev Live Reload](https://github.com/atom/dev-live-reload) | [![macOS Build Status](https://travis-ci.org/atom/dev-live-reload.svg?branch=master)](https://travis-ci.org/atom/dev-live-reload) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/g3sd27ylba1fun1v/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/dev-live-reload/branch/master) | [![Dependency Status](https://david-dm.org/atom/dev-live-reload.svg)](https://david-dm.org/atom/dev-live-reload) | +| [Encoding Selector](https://github.com/atom/encoding-selector) | [![macOS Build Status](https://travis-ci.org/atom/encoding-selector.svg?branch=master)](https://travis-ci.org/atom/encoding-selector) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/e08x6k2b68wpwxxc/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/encoding-selector/branch/master) | [![Dependency Status](https://david-dm.org/atom/encoding-selector.svg)](https://david-dm.org/atom/encoding-selector) | +| [Exception Reporting](https://github.com/atom/exception-reporting) | [![macOS Build Status](https://travis-ci.org/atom/exception-reporting.svg?branch=master)](https://travis-ci.org/atom/exception-reporting) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/i0pla7qbpv7celg2/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/exception-reporting/branch/master) | [![Dependency Status](https://david-dm.org/atom/exception-reporting.svg)](https://david-dm.org/atom/exception-reporting) | +| [Find and Replace](https://github.com/atom/find-and-replace) | [![macOS Build Status](https://travis-ci.org/atom/find-and-replace.svg?branch=master)](https://travis-ci.org/atom/find-and-replace) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/6w4baiiq5mw4nxky/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/find-and-replace/branch/master) | [![Dependency Status](https://david-dm.org/atom/find-and-replace.svg)](https://david-dm.org/atom/find-and-replace) | +| [Fuzzy Finder](https://github.com/atom/fuzzy-finder) | [![macOS Build Status](https://travis-ci.org/atom/fuzzy-finder.svg?branch=master)](https://travis-ci.org/atom/fuzzy-finder) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/b4b2dg5n9r1wdqad/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/fuzzy-finder/branch/master) | [![Dependency Status](https://david-dm.org/atom/fuzzy-finder.svg)](https://david-dm.org/atom/fuzzy-finder) | +| [Git Diff](https://github.com/atom/git-diff) | [![macOS Build Status](https://travis-ci.org/atom/git-diff.svg?branch=master)](https://travis-ci.org/atom/git-diff) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/9auj52cs0vso66nv/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/git-diff/branch/master) | [![Dependency Status](https://david-dm.org/atom/git-diff.svg)](https://david-dm.org/atom/git-diff) | +| [Go to Line](https://github.com/atom/go-to-line) | [![macOS Build Status](https://travis-ci.org/atom/go-to-line.svg?branch=master)](https://travis-ci.org/atom/go-to-line) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/qf0isc8ulw4wxi0b/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/go-to-line/branch/master) | [![Dependency Status](https://david-dm.org/atom/go-to-line.svg)](https://david-dm.org/atom/go-to-line) | +| [Grammar Selector](https://github.com/atom/grammar-selector) | [![macOS Build Status](https://travis-ci.org/atom/grammar-selector.svg?branch=master)](https://travis-ci.org/atom/grammar-selector) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/pg8qss03bfh4ngqm/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/grammar-selector/branch/master) | [![Dependency Status](https://david-dm.org/atom/grammar-selector.svg)](https://david-dm.org/atom/grammar-selector) | +| [Image View](https://github.com/atom/image-view) | [![macOS Build Status](https://travis-ci.org/atom/image-view.svg?branch=master)](https://travis-ci.org/atom/image-view) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/notavaawrswk0g10/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/image-view/branch/master) | [![Dependency Status](https://david-dm.org/atom/image-view.svg)](https://david-dm.org/atom/image-view) | +| [Incompatible Packages](https://github.com/atom/incompatible-packages) | [![macOS Build Status](https://travis-ci.org/atom/incompatible-packages.svg?branch=master)](https://travis-ci.org/atom/incompatible-packages) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/neet595s038x7w70/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/incompatible-packages/branch/master) | [![Dependency Status](https://david-dm.org/atom/incompatible-packages.svg)](https://david-dm.org/atom/incompatible-packages) | +| [Keybinding Resolver](https://github.com/atom/keybinding-resolver) | [![macOS Build Status](https://travis-ci.org/atom/keybinding-resolver.svg?branch=master)](https://travis-ci.org/atom/keybinding-resolver) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/9jf31itx01hnn4nh/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/keybinding-resolver/branch/master) | [![Dependency Status](https://david-dm.org/atom/keybinding-resolver.svg)](https://david-dm.org/atom/keybinding-resolver) | +| [Line Ending Selector](https://github.com/atom/line-ending-selector) | [![macOS Build Status](https://travis-ci.org/atom/line-ending-selector.svg?branch=master)](https://travis-ci.org/atom/line-ending-selector) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/b3743n9ojomlpn1g/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/line-ending-selector/branch/master) | [![Dependency Status](https://david-dm.org/atom/line-ending-selector.svg)](https://david-dm.org/atom/line-ending-selector) | +| [Link](https://github.com/atom/link) | [![macOS Build Status](https://travis-ci.org/atom/link.svg?branch=master)](https://travis-ci.org/atom/link) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/1d3cb8ktd48k9vnl/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/link/branch/master) | [![Dependency Status](https://david-dm.org/atom/link.svg)](https://david-dm.org/atom/link) | +| [Markdown Preview](https://github.com/atom/markdown-preview) | [![macOS Build Status](https://travis-ci.org/atom/markdown-preview.svg?branch=master)](https://travis-ci.org/atom/markdown-preview) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/bvh0evhh4v6w9b29/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/markdown-preview/branch/master) | [![Dependency Status](https://david-dm.org/atom/markdown-preview.svg)](https://david-dm.org/atom/markdown-preview) | +| [Metrics](https://github.com/atom/metrics) | [![macOS Build Status](https://travis-ci.org/atom/metrics.svg?branch=master)](https://travis-ci.org/atom/metrics) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/b5doi205xl3iex04/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/metrics/branch/master) | [![Dependency Status](https://david-dm.org/atom/metrics.svg)](https://david-dm.org/atom/metrics) | +| [Notifications](https://github.com/atom/notifications) | [![macOS Build Status](https://travis-ci.org/atom/notifications.svg?branch=master)](https://travis-ci.org/atom/notifications) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/ps3p8tj2okw57x0e/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/notifications/branch/master) | [![Dependency Status](https://david-dm.org/atom/notifications.svg)](https://david-dm.org/atom/notifications) | +| [Open on Github](https://github.com/atom/open-on-github) | [![macOS Build Status](https://travis-ci.org/atom/open-on-github.svg?branch=master)](https://travis-ci.org/atom/open-on-github) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/ccl6na4qsna5wncr/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/open-on-github/branch/master) | [![Dependency Status](https://david-dm.org/atom/open-on-github.svg)](https://david-dm.org/atom/open-on-github) | +| [Package Generator](https://github.com/atom/package-generator) | [![macOS Build Status](https://travis-ci.org/atom/package-generator.svg?branch=master)](https://travis-ci.org/atom/package-generator)| [![Windows Build Status](https://ci.appveyor.com/api/projects/status/7t1i4hdmljhigp9u/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/package-generator/branch/master) | [![Dependency Status](https://david-dm.org/atom/package-generator.svg)](https://david-dm.org/atom/package-generator) | +| [Settings View](https://github.com/atom/settings-view) | [![macOS Build Status](https://travis-ci.org/atom/settings-view.svg?branch=master)](https://travis-ci.org/atom/settings-view) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/hatgxg6k2g3grafq/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/settings-view/branch/master) | [![Dependency Status](https://david-dm.org/atom/settings-view.svg)](https://david-dm.org/atom/settings-view) | +| [Snippets](https://github.com/atom/snippets) | [![macOS Build Status](https://travis-ci.org/atom/snippets.svg?branch=master)](https://travis-ci.org/atom/snippets) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/8hlc0onofkgbxw53/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/snippets/branch/master) | [![Dependency Status](https://david-dm.org/atom/snippets.svg)](https://david-dm.org/atom/snippets) | +| [Spell Check](https://github.com/atom/spell-check) | [![macOS Build Status](https://travis-ci.org/atom/spell-check.svg?branch=master)](https://travis-ci.org/atom/spell-check) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/1620a5reqw6kdolv/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/spell-check/branch/master) | [![Dependency Status](https://david-dm.org/atom/spell-check.svg)](https://david-dm.org/atom/spell-check) | +| [Status Bar](https://github.com/atom/status-bar) | [![macOS Build Status](https://travis-ci.org/atom/status-bar.svg?branch=master)](https://travis-ci.org/atom/status-bar) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/gu8tv4h6cnpeesg2/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/status-bar/branch/master) | [![Dependency Status](https://david-dm.org/atom/status-bar.svg)](https://david-dm.org/atom/status-bar) | +| [Styleguide](https://github.com/atom/styleguide) | [![macOS Build Status](https://travis-ci.org/atom/styleguide.svg?branch=master)](https://travis-ci.org/atom/styleguide) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/88dt9jxexkpindhw/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/styleguide/branch/master) | [![Dependency Status](https://david-dm.org/atom/styleguide.svg)](https://david-dm.org/atom/styleguide) | +| [Symbols View](https://github.com/atom/symbols-view) | [![macOS Build Status](https://travis-ci.org/atom/symbols-view.svg?branch=master)](https://travis-ci.org/atom/symbols-view) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/al68vtv83x49eu5d/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/symbols-view/branch/master) | [![Dependency Status](https://david-dm.org/atom/symbols-view.svg)](https://david-dm.org/atom/symbols-view) | +| [Tabs](https://github.com/atom/tabs) | [![macOS Build Status](https://travis-ci.org/atom/tabs.svg?branch=master)](https://travis-ci.org/atom/tabs) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/nf4hdmuk4i9xkfmb/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/tabs/branch/master) | [![Dependency Status](https://david-dm.org/atom/tabs.svg)](https://david-dm.org/atom/tabs) | +| [Timecop](https://github.com/atom/timecop) | [![macOS Build Status](https://travis-ci.org/atom/timecop.svg?branch=master)](https://travis-ci.org/atom/timecop) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/37fhichmvx90sd97/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/timecop/branch/master) | [![Dependency Status](https://david-dm.org/atom/timecop.svg)](https://david-dm.org/atom/timecop) | +| [Tree View](https://github.com/atom/tree-view) | [![macOS Build Status](https://travis-ci.org/atom/tree-view.svg?branch=master)](https://travis-ci.org/atom/tree-view) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/com793ehi0hajrkd/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/tree-view/branch/master) | [![Dependency Status](https://david-dm.org/atom/tree-view.svg)](https://david-dm.org/atom/tree-view) | +| [Update Package Dependencies](https://github.com/atom/update-package-dependencies) | [![macOS Build Status](https://travis-ci.org/atom/update-package-dependencies.svg?branch=master)](https://travis-ci.org/atom/update-package-dependencies) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/5xqtoc3xk1e7lt2y/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/update-package-dependencies/branch/master) | [![Dependency Status](https://david-dm.org/atom/update-package-dependencies.svg)](https://david-dm.org/atom/update-package-dependencies) | +| [Welcome](https://github.com/atom/welcome) | [![macOS Build Status](https://travis-ci.org/atom/welcome.svg?branch=master)](https://travis-ci.org/atom/welcome) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/c3ssyte35ivvnt62/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/welcome/branch/master) | [![Dependency Status](https://david-dm.org/atom/welcome.svg)](https://david-dm.org/atom/welcome) | +| [Whitespace](https://github.com/atom/whitespace) | [![macOS Build Status](https://travis-ci.org/atom/whitespace.svg?branch=master)](https://travis-ci.org/atom/whitespace) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/sf8pdb3ausdk1vtb/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/whitespace/branch/master) | [![Dependency Status](https://david-dm.org/atom/whitespace.svg)](https://david-dm.org/atom/whitespace) | +| [Wrap Guide](https://github.com/atom/wrap-guide) | [![macOS Build Status](https://travis-ci.org/atom/wrap-guide.svg?branch=master)](https://travis-ci.org/atom/wrap-guide) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/5qk1io3uar5j8hol/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/wrap-guide/branch/master) | [![Dependency Status](https://david-dm.org/atom/wrap-guide.svg)](https://david-dm.org/atom/wrap-guide) | ## Libraries | Library | macOS | Windows | Dependencies | |---------|------|---------|--------------| -| Clear Cut | [![macOS Build Status](https://travis-ci.org/atom/clear-cut.svg?branch=master)](https://travis-ci.org/atom/clear-cut) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/civ54x89l06286m9/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/clear-cut/branch/master) | [![Dependency Status](https://david-dm.org/atom/clear-cut.svg)](https://david-dm.org/atom/clear-cut) | -| Event Kit | [![macOS Build Status](https://travis-ci.org/atom/event-kit.svg?branch=master)](https://travis-ci.org/atom/event-kit) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/lb32q70204lpmlxo/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/event-kit/branch/master) | [![Dependency Status](https://david-dm.org/atom/event-kit.svg)](https://david-dm.org/atom/event-kit) | -| Fs Plus | [![macOS Build Status](https://travis-ci.org/atom/fs-plus.svg?branch=master)](https://travis-ci.org/atom/fs-plus) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/gf2tleqp0hdek3o3/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/fs-plus/branch/master) | [![Dependency Status](https://david-dm.org/atom/fs-plus.svg)](https://david-dm.org/atom/fs-plus) | -| Grim | [![macOS Build Status](https://travis-ci.org/atom/grim.svg)](https://travis-ci.org/atom/grim) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/i4m37pol77vygrvb/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/grim/branch/master) | [![Dependency Status](https://david-dm.org/atom/grim.svg)](https://david-dm.org/atom/grim) | -| Jasmine Focused | [![macOS Build Status](https://travis-ci.org/atom/grim.svg)](https://travis-ci.org/atom/grim) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/af0ipfqqxn7aygoe/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/jasmine-focused/branch/master) | [![Dependency Status](https://david-dm.org/atom/jasmine-focused.svg)](https://david-dm.org/atom/jasmine-focused) | -| Property Accessors | [![macOS Build Status](https://travis-ci.org/atom/property-accessors.svg?branch=master)](https://travis-ci.org/atom/property-accessors) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/ww4d10hi4v5h7kbp/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/property-accessors/branch/master) | [![Dependency Status](https://david-dm.org/atom/property-accessors.svg)](https://david-dm.org/atom/property-accessors) | -| TextBuffer | [![macOS Build Status](https://travis-ci.org/atom/text-buffer.svg?branch=master)](https://travis-ci.org/atom/text-buffer) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/48xl8do1sm2thf5p/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/text-buffer/branch/master) | [![Dependency Status](https://david-dm.org/atom/text-buffer.svg)](https://david-dm.org/atom/text-buffer) | -| Underscore-Plus | [![macOS Build Status](https://travis-ci.org/atom/underscore-plus.svg?branch=master)](https://travis-ci.org/atom/underscore-plus) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/c7l8009vgpaojxcd/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/underscore-plus/branch/master) | [![Dependency Status](https://david-dm.org/atom/underscore-plus.svg)](https://david-dm.org/atom/underscore-plus) | +| [Clear Cut](https://github.com/atom/clear-cut) | [![macOS Build Status](https://travis-ci.org/atom/clear-cut.svg?branch=master)](https://travis-ci.org/atom/clear-cut) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/civ54x89l06286m9/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/clear-cut/branch/master) | [![Dependency Status](https://david-dm.org/atom/clear-cut.svg)](https://david-dm.org/atom/clear-cut) | +| [Event Kit](https://github.com/atom/event-kit) | [![macOS Build Status](https://travis-ci.org/atom/event-kit.svg?branch=master)](https://travis-ci.org/atom/event-kit) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/lb32q70204lpmlxo/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/event-kit/branch/master) | [![Dependency Status](https://david-dm.org/atom/event-kit.svg)](https://david-dm.org/atom/event-kit) | +| [Fs Plus](https://github.com/atom/fs-plus) | [![macOS Build Status](https://travis-ci.org/atom/fs-plus.svg?branch=master)](https://travis-ci.org/atom/fs-plus) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/gf2tleqp0hdek3o3/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/fs-plus/branch/master) | [![Dependency Status](https://david-dm.org/atom/fs-plus.svg)](https://david-dm.org/atom/fs-plus) | +| [Grim](https://github.com/atom/grim) | [![macOS Build Status](https://travis-ci.org/atom/grim.svg)](https://travis-ci.org/atom/grim) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/i4m37pol77vygrvb/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/grim/branch/master) | [![Dependency Status](https://david-dm.org/atom/grim.svg)](https://david-dm.org/atom/grim) | +| [Jasmine Focused](https://github.com/atom/jasmine-focused) | [![macOS Build Status](https://travis-ci.org/atom/grim.svg)](https://travis-ci.org/atom/grim) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/af0ipfqqxn7aygoe/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/jasmine-focused/branch/master) | [![Dependency Status](https://david-dm.org/atom/jasmine-focused.svg)](https://david-dm.org/atom/jasmine-focused) | +| [Property Accessors](https://github.com/atom/property-accessors) | [![macOS Build Status](https://travis-ci.org/atom/property-accessors.svg?branch=master)](https://travis-ci.org/atom/property-accessors) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/ww4d10hi4v5h7kbp/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/property-accessors/branch/master) | [![Dependency Status](https://david-dm.org/atom/property-accessors.svg)](https://david-dm.org/atom/property-accessors) | +| [TextBuffer](https://github.com/atom/text-buffer) | [![macOS Build Status](https://travis-ci.org/atom/text-buffer.svg?branch=master)](https://travis-ci.org/atom/text-buffer) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/48xl8do1sm2thf5p/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/text-buffer/branch/master) | [![Dependency Status](https://david-dm.org/atom/text-buffer.svg)](https://david-dm.org/atom/text-buffer) | +| [Underscore-Plus](https://github.com/atom/underscore-plus) | [![macOS Build Status](https://travis-ci.org/atom/underscore-plus.svg?branch=master)](https://travis-ci.org/atom/underscore-plus) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/c7l8009vgpaojxcd/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/underscore-plus/branch/master) | [![Dependency Status](https://david-dm.org/atom/underscore-plus.svg)](https://david-dm.org/atom/underscore-plus) | ## Tools | Language | macOS | Windows | Dependencies | |----------|------|---------|--------------| -| AtomDoc | [![macOS Build Status](https://travis-ci.org/atom/atomdoc.svg?branch=master)](https://travis-ci.org/atom/atomdoc) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/chi2bmaafr3puyq2/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/atomdoc/branch/master) | [![Dependency Status](https://david-dm.org/atom/atomdoc.svg)](https://david-dm.org/atom/atomdoc) +| [AtomDoc](https://github.com/atom/atomdoc) | [![macOS Build Status](https://travis-ci.org/atom/atomdoc.svg?branch=master)](https://travis-ci.org/atom/atomdoc) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/chi2bmaafr3puyq2/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/atomdoc/branch/master) | [![Dependency Status](https://david-dm.org/atom/atomdoc.svg)](https://david-dm.org/atom/atomdoc) ## Languages | Language | macOS | Windows | |----------|------|---------| -| C/C++ | [![macOS Build Status](https://travis-ci.org/atom/language-c.svg?branch=master)](https://travis-ci.org/atom/language-c) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/8oy1hmp4yrij7c32/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-c/branch/master) | -| C# | [![macOS Build Status](https://travis-ci.org/atom/language-csharp.svg?branch=master)](https://travis-ci.org/atom/language-csharp) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/j1as3753y5t90obn/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-csharp/branch/master) | -| Clojure | [![macOS Build Status](https://travis-ci.org/atom/language-clojure.svg?branch=master)](https://travis-ci.org/atom/language-clojure) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/6kd5fs48y5hixde6/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-clojure/branch/master) | -| CoffeeScript | [![macOS Build Status](https://travis-ci.org/atom/language-coffee-script.svg?branch=master)](https://travis-ci.org/atom/language-coffee-script) | [![Windows Build status](https://ci.appveyor.com/api/projects/status/4j9aak7iwn2f2x7a/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-coffee-script/branch/master) | -| CSS | [![macOS Build Status](https://travis-ci.org/atom/language-css.svg?branch=master)](https://travis-ci.org/atom/language-css) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/v8rvm88dxp73ko2y/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-css/branch/master) | -| Git | [![macOS Build Status](https://travis-ci.org/atom/language-git.svg?branch=master)](https://travis-ci.org/atom/language-git) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/481319gyrr1feo8b/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-git/branch/master) | -| GitHub Flavored Markdown | [![macOS Build Status](https://travis-ci.org/atom/language-gfm.svg?branch=master)](https://travis-ci.org/atom/language-gfm) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/rpub8qjyd8lt7wai/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-gfm/branch/master) | -| Go | [![macOS Build Status](https://travis-ci.org/atom/language-go.svg?branch=master)](https://travis-ci.org/atom/language-go) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/3fxxvv05p4hv92pn/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-go/branch/master) | -| HTML | [![macOS Build Status](https://travis-ci.org/atom/language-html.svg?branch=master)](https://travis-ci.org/atom/language-html) | [![Windows Build status](https://ci.appveyor.com/api/projects/status/t6pk6mmdgcelfg85/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-html/branch/master) | -| Hyperlink | [![macOS Build Status](https://travis-ci.org/atom/language-hyperlink.svg?branch=master)](https://travis-ci.org/atom/language-hyperlink) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/5tgvhph394r684l8/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-hyperlink/branch/master) | -| Java | [![macOS Build Status](https://travis-ci.org/atom/language-java.svg?branch=master)](https://travis-ci.org/atom/language-java) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/utoftje56n9u5x4h/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-java/branch/master) | -| JavaScript | [![macOS Build Status](https://travis-ci.org/atom/language-javascript.svg?branch=master)](https://travis-ci.org/atom/language-javascript) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/ktooccwna96ssiyr/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-javascript-dijf8/branch/master) | -| JSON | [![macOS Build Status](https://travis-ci.org/atom/language-json.svg?branch=master)](https://travis-ci.org/atom/language-json) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/5rx05vhdikk6c4cl/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-json/branch/master) | -| Less | [![macOS Build Status](https://travis-ci.org/atom/language-less.svg?branch=master)](https://travis-ci.org/atom/language-less) | [![Windows Build Sstatus](https://ci.appveyor.com/api/projects/status/aeina4fr4b0i7yay/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-less/branch/master) | -| Make | [![macOS Build Status](https://travis-ci.org/atom/language-make.svg?branch=master)](https://travis-ci.org/atom/language-make) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/vq1aascey21wxjh7/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-make/branch/master) | -| Mustache | [![macOS Build Status](https://travis-ci.org/atom/language-mustache.svg?branch=master)](https://travis-ci.org/atom/language-mustache) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/mbxnxaojqp0g7ldv/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-mustache/branch/master) | -| Objective-C | [![macOS Build Status](https://travis-ci.org/atom/language-objective-c.svg?branch=master)](https://travis-ci.org/atom/language-objective-c) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/27j8vfv5u95fjhkw/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-objective-c/branch/master) | -| Perl | [![macOS Build Status](https://travis-ci.org/atom/language-perl.svg?branch=master)](https://travis-ci.org/atom/language-perl) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/dfs9inkkg40hchf8/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-perl/branch/master) | -| PHP | [![macOS Build Status](https://travis-ci.org/atom/language-php.svg?branch=master)](https://travis-ci.org/atom/language-php) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/y9h45ag4b72726jy/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-php/branch/master) | -| Python | [![macOS Build Status](https://travis-ci.org/atom/language-python.svg?branch=master)](https://travis-ci.org/atom/language-python) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/hmxrb9jttjh41es9/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-python/branch/master) | -| Ruby | [![macOS Build Status](https://travis-ci.org/atom/language-ruby.svg?branch=master)](https://travis-ci.org/atom/language-ruby) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/71as182rm1adf2br/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-ruby/branch/master) | -| Ruby on Rails | [![macOS Build Status](https://travis-ci.org/atom/language-ruby-on-rails.svg?branch=master)](https://travis-ci.org/atom/language-ruby-on-rails) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/5t4pa451fu5e0ghg/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-ruby-on-rails/branch/master) | -| Sass | [![macOS Build Status](https://travis-ci.org/atom/language-sass.svg?branch=master)](https://travis-ci.org/atom/language-sass) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/g7p16vainm4iuoot/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-sass/branch/master) | -| ShellScript | [![macOS Build Status](https://travis-ci.org/atom/language-shellscript.svg?branch=master)](https://travis-ci.org/atom/language-shellscript) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/p4um3lowgrg8y0ty/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-shellscript/branch/master) | -| SQL | [![macOS Build Status](https://travis-ci.org/atom/language-sql.svg?branch=master)](https://travis-ci.org/atom/language-sql) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/ji31ouk5ehs4jdu1/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-sql/branch/master) | -| TODO | [![macOS Build Status](https://travis-ci.org/atom/language-todo.svg?branch=master)](https://travis-ci.org/atom/language-todo) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/gcgb9m7h146lv6qp/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-todo/branch/master) | -| TOML | [![macOS Build Status](https://travis-ci.org/atom/language-toml.svg?branch=master)](https://travis-ci.org/atom/language-toml) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/kohao3fjyk6xv0sc/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-toml/branch/master) | -| XML | [![macOS Build Status](https://travis-ci.org/atom/language-xml.svg?branch=master)](https://travis-ci.org/atom/language-xml) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/m5f6rn74a6h3q5uq/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-xml/branch/master) | -| YAML | [![macOS Build Status](https://travis-ci.org/atom/language-yaml.svg?branch=master)](https://travis-ci.org/atom/language-yaml) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/eaa4ql7kipgphc2n/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-yaml/branch/master) | +| [C/C++](https://github.com/atom/language-c) | [![macOS Build Status](https://travis-ci.org/atom/language-c.svg?branch=master)](https://travis-ci.org/atom/language-c) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/8oy1hmp4yrij7c32/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-c/branch/master) | +| [C#](https://github.com/atom/language-csharp) | [![macOS Build Status](https://travis-ci.org/atom/language-csharp.svg?branch=master)](https://travis-ci.org/atom/language-csharp) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/j1as3753y5t90obn/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-csharp/branch/master) | +| [Clojure](https://github.com/atom/language-clojure) | [![macOS Build Status](https://travis-ci.org/atom/language-clojure.svg?branch=master)](https://travis-ci.org/atom/language-clojure) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/6kd5fs48y5hixde6/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-clojure/branch/master) | +| [CoffeeScript](https://github.com/atom/language-coffee-script) | [![macOS Build Status](https://travis-ci.org/atom/language-coffee-script.svg?branch=master)](https://travis-ci.org/atom/language-coffee-script) | [![Windows Build status](https://ci.appveyor.com/api/projects/status/4j9aak7iwn2f2x7a/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-coffee-script/branch/master) | +| [CSS](https://github.com/atom/language-css) | [![macOS Build Status](https://travis-ci.org/atom/language-css.svg?branch=master)](https://travis-ci.org/atom/language-css) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/v8rvm88dxp73ko2y/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-css/branch/master) | +| [Git](https://github.com/atom/language-git) | [![macOS Build Status](https://travis-ci.org/atom/language-git.svg?branch=master)](https://travis-ci.org/atom/language-git) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/481319gyrr1feo8b/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-git/branch/master) | +| [GitHub Flavored Markdown](https://github.com/atom/language-gfm) | [![macOS Build Status](https://travis-ci.org/atom/language-gfm.svg?branch=master)](https://travis-ci.org/atom/language-gfm) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/rpub8qjyd8lt7wai/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-gfm/branch/master) | +| [Go](https://github.com/atom/language-go) | [![macOS Build Status](https://travis-ci.org/atom/language-go.svg?branch=master)](https://travis-ci.org/atom/language-go) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/3fxxvv05p4hv92pn/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-go/branch/master) | +| [HTML](https://github.com/atom/language-html) | [![macOS Build Status](https://travis-ci.org/atom/language-html.svg?branch=master)](https://travis-ci.org/atom/language-html) | [![Windows Build status](https://ci.appveyor.com/api/projects/status/t6pk6mmdgcelfg85/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-html/branch/master) | +| [Hyperlink](https://github.com/atom/language-hyperlink) | [![macOS Build Status](https://travis-ci.org/atom/language-hyperlink.svg?branch=master)](https://travis-ci.org/atom/language-hyperlink) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/5tgvhph394r684l8/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-hyperlink/branch/master) | +| [Java](https://github.com/atom/language-java) | [![macOS Build Status](https://travis-ci.org/atom/language-java.svg?branch=master)](https://travis-ci.org/atom/language-java) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/utoftje56n9u5x4h/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-java/branch/master) | +| [JavaScript](https://github.com/atom/language-javascript) | [![macOS Build Status](https://travis-ci.org/atom/language-javascript.svg?branch=master)](https://travis-ci.org/atom/language-javascript) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/ktooccwna96ssiyr/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-javascript-dijf8/branch/master) | +| [JSON](https://github.com/atom/language-json) | [![macOS Build Status](https://travis-ci.org/atom/language-json.svg?branch=master)](https://travis-ci.org/atom/language-json) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/5rx05vhdikk6c4cl/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-json/branch/master) | +| [Less](https://github.com/atom/language-less) | [![macOS Build Status](https://travis-ci.org/atom/language-less.svg?branch=master)](https://travis-ci.org/atom/language-less) | [![Windows Build Sstatus](https://ci.appveyor.com/api/projects/status/aeina4fr4b0i7yay/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-less/branch/master) | +| [Make](https://github.com/atom/language-make) | [![macOS Build Status](https://travis-ci.org/atom/language-make.svg?branch=master)](https://travis-ci.org/atom/language-make) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/vq1aascey21wxjh7/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-make/branch/master) | +| [Mustache](https://github.com/atom/language-mustache) | [![macOS Build Status](https://travis-ci.org/atom/language-mustache.svg?branch=master)](https://travis-ci.org/atom/language-mustache) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/mbxnxaojqp0g7ldv/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-mustache/branch/master) | +| [Objective-C](https://github.com/atom/language-objective-c) | [![macOS Build Status](https://travis-ci.org/atom/language-objective-c.svg?branch=master)](https://travis-ci.org/atom/language-objective-c) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/27j8vfv5u95fjhkw/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-objective-c/branch/master) | +| [Perl](https://github.com/atom/language-perl) | [![macOS Build Status](https://travis-ci.org/atom/language-perl.svg?branch=master)](https://travis-ci.org/atom/language-perl) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/dfs9inkkg40hchf8/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-perl/branch/master) | +| [PHP](https://github.com/atom/language-php) | [![macOS Build Status](https://travis-ci.org/atom/language-php.svg?branch=master)](https://travis-ci.org/atom/language-php) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/y9h45ag4b72726jy/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-php/branch/master) | +| [Python](https://github.com/atom/language-python) | [![macOS Build Status](https://travis-ci.org/atom/language-python.svg?branch=master)](https://travis-ci.org/atom/language-python) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/hmxrb9jttjh41es9/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-python/branch/master) | +| [Ruby](https://github.com/atom/language-ruby) | [![macOS Build Status](https://travis-ci.org/atom/language-ruby.svg?branch=master)](https://travis-ci.org/atom/language-ruby) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/71as182rm1adf2br/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-ruby/branch/master) | +| [Ruby on Rails](https://github.com/atom/language-ruby-on-rails) | [![macOS Build Status](https://travis-ci.org/atom/language-ruby-on-rails.svg?branch=master)](https://travis-ci.org/atom/language-ruby-on-rails) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/5t4pa451fu5e0ghg/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-ruby-on-rails/branch/master) | +| [Sass](https://github.com/atom/language-sass) | [![macOS Build Status](https://travis-ci.org/atom/language-sass.svg?branch=master)](https://travis-ci.org/atom/language-sass) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/g7p16vainm4iuoot/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-sass/branch/master) | +| [ShellScript](https://github.com/atom/language-shellscript) | [![macOS Build Status](https://travis-ci.org/atom/language-shellscript.svg?branch=master)](https://travis-ci.org/atom/language-shellscript) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/p4um3lowgrg8y0ty/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-shellscript/branch/master) | +| [SQL](https://github.com/atom/language-sql) | [![macOS Build Status](https://travis-ci.org/atom/language-sql.svg?branch=master)](https://travis-ci.org/atom/language-sql) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/ji31ouk5ehs4jdu1/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-sql/branch/master) | +| [TODO](https://github.com/atom/language-todo) | [![macOS Build Status](https://travis-ci.org/atom/language-todo.svg?branch=master)](https://travis-ci.org/atom/language-todo) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/gcgb9m7h146lv6qp/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-todo/branch/master) | +| [TOML](https://github.com/atom/language-toml) | [![macOS Build Status](https://travis-ci.org/atom/language-toml.svg?branch=master)](https://travis-ci.org/atom/language-toml) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/kohao3fjyk6xv0sc/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-toml/branch/master) | +| [XML](https://github.com/atom/language-xml) | [![macOS Build Status](https://travis-ci.org/atom/language-xml.svg?branch=master)](https://travis-ci.org/atom/language-xml) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/m5f6rn74a6h3q5uq/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-xml/branch/master) | +| [YAML](https://github/atom/language-yaml) | [![macOS Build Status](https://travis-ci.org/atom/language-yaml.svg?branch=master)](https://travis-ci.org/atom/language-yaml) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/eaa4ql7kipgphc2n/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-yaml/branch/master) | From 61ddddec505c5d695405081d82dcd01458c5e0e2 Mon Sep 17 00:00:00 2001 From: Damien Guard Date: Wed, 23 Nov 2016 13:23:31 -0800 Subject: [PATCH 077/184] Add First-Mate --- docs/build-instructions/build-status.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/build-instructions/build-status.md b/docs/build-instructions/build-status.md index c48c76307..d2388adcc 100644 --- a/docs/build-instructions/build-status.md +++ b/docs/build-instructions/build-status.md @@ -63,6 +63,7 @@ |---------|------|---------|--------------| | [Clear Cut](https://github.com/atom/clear-cut) | [![macOS Build Status](https://travis-ci.org/atom/clear-cut.svg?branch=master)](https://travis-ci.org/atom/clear-cut) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/civ54x89l06286m9/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/clear-cut/branch/master) | [![Dependency Status](https://david-dm.org/atom/clear-cut.svg)](https://david-dm.org/atom/clear-cut) | | [Event Kit](https://github.com/atom/event-kit) | [![macOS Build Status](https://travis-ci.org/atom/event-kit.svg?branch=master)](https://travis-ci.org/atom/event-kit) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/lb32q70204lpmlxo/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/event-kit/branch/master) | [![Dependency Status](https://david-dm.org/atom/event-kit.svg)](https://david-dm.org/atom/event-kit) | +| [First Mate](https://github.com/atom/first-mate) | [![macOS Build Status](https://travis-ci.org/atom/first-mate.svg?branch=master)](https://travis-ci.org/atom/first-mate) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/p5im21uq22cwgb6d/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/first-mate) | [![Dependency Status](https://david-dm.org/atom/first-mate/status.svg)](https://david-dm.org/atom/first-mate) | | [Fs Plus](https://github.com/atom/fs-plus) | [![macOS Build Status](https://travis-ci.org/atom/fs-plus.svg?branch=master)](https://travis-ci.org/atom/fs-plus) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/gf2tleqp0hdek3o3/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/fs-plus/branch/master) | [![Dependency Status](https://david-dm.org/atom/fs-plus.svg)](https://david-dm.org/atom/fs-plus) | | [Grim](https://github.com/atom/grim) | [![macOS Build Status](https://travis-ci.org/atom/grim.svg)](https://travis-ci.org/atom/grim) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/i4m37pol77vygrvb/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/grim/branch/master) | [![Dependency Status](https://david-dm.org/atom/grim.svg)](https://david-dm.org/atom/grim) | | [Jasmine Focused](https://github.com/atom/jasmine-focused) | [![macOS Build Status](https://travis-ci.org/atom/grim.svg)](https://travis-ci.org/atom/grim) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/af0ipfqqxn7aygoe/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/jasmine-focused/branch/master) | [![Dependency Status](https://david-dm.org/atom/jasmine-focused.svg)](https://david-dm.org/atom/jasmine-focused) | From 13168a2089c1dbce41160635a61b1105be616d1c Mon Sep 17 00:00:00 2001 From: Damien Guard Date: Wed, 23 Nov 2016 16:23:59 -0800 Subject: [PATCH 078/184] Add Oniguruma to build status doc --- docs/build-instructions/build-status.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/build-instructions/build-status.md b/docs/build-instructions/build-status.md index d2388adcc..a6140d5ff 100644 --- a/docs/build-instructions/build-status.md +++ b/docs/build-instructions/build-status.md @@ -67,6 +67,7 @@ | [Fs Plus](https://github.com/atom/fs-plus) | [![macOS Build Status](https://travis-ci.org/atom/fs-plus.svg?branch=master)](https://travis-ci.org/atom/fs-plus) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/gf2tleqp0hdek3o3/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/fs-plus/branch/master) | [![Dependency Status](https://david-dm.org/atom/fs-plus.svg)](https://david-dm.org/atom/fs-plus) | | [Grim](https://github.com/atom/grim) | [![macOS Build Status](https://travis-ci.org/atom/grim.svg)](https://travis-ci.org/atom/grim) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/i4m37pol77vygrvb/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/grim/branch/master) | [![Dependency Status](https://david-dm.org/atom/grim.svg)](https://david-dm.org/atom/grim) | | [Jasmine Focused](https://github.com/atom/jasmine-focused) | [![macOS Build Status](https://travis-ci.org/atom/grim.svg)](https://travis-ci.org/atom/grim) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/af0ipfqqxn7aygoe/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/jasmine-focused/branch/master) | [![Dependency Status](https://david-dm.org/atom/jasmine-focused.svg)](https://david-dm.org/atom/jasmine-focused) | +| [Oniguruma](https://github.com/atom/node-oniguruma) | [![macOS Build Status](https://travis-ci.org/atom/node-oniguruma.svg?branch=master)](https://travis-ci.org/atom/node-oniguruma) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/s9twhi451ef2butr/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/node-oniguruma/branch/master) | [![Dependency Status](https://david-dm.org/atom/node-oniguruma.svg)](https://david-dm.org/atom/node-oniguruma) | | [Property Accessors](https://github.com/atom/property-accessors) | [![macOS Build Status](https://travis-ci.org/atom/property-accessors.svg?branch=master)](https://travis-ci.org/atom/property-accessors) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/ww4d10hi4v5h7kbp/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/property-accessors/branch/master) | [![Dependency Status](https://david-dm.org/atom/property-accessors.svg)](https://david-dm.org/atom/property-accessors) | | [TextBuffer](https://github.com/atom/text-buffer) | [![macOS Build Status](https://travis-ci.org/atom/text-buffer.svg?branch=master)](https://travis-ci.org/atom/text-buffer) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/48xl8do1sm2thf5p/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/text-buffer/branch/master) | [![Dependency Status](https://david-dm.org/atom/text-buffer.svg)](https://david-dm.org/atom/text-buffer) | | [Underscore-Plus](https://github.com/atom/underscore-plus) | [![macOS Build Status](https://travis-ci.org/atom/underscore-plus.svg?branch=master)](https://travis-ci.org/atom/underscore-plus) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/c7l8009vgpaojxcd/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/underscore-plus/branch/master) | [![Dependency Status](https://david-dm.org/atom/underscore-plus.svg)](https://david-dm.org/atom/underscore-plus) | From 1c9336de21d10a7b3030818a69c2ad6f19351008 Mon Sep 17 00:00:00 2001 From: Lukas Geiger Date: Thu, 24 Nov 2016 01:45:33 +0100 Subject: [PATCH 079/184] Fix #12528 --- src/text-editor-component.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/text-editor-component.coffee b/src/text-editor-component.coffee index 8fa732fea..dff5b7215 100644 --- a/src/text-editor-component.coffee +++ b/src/text-editor-component.coffee @@ -909,7 +909,7 @@ class TextEditorComponent screenRowForNode: (node) -> while node? - if screenRow = node.dataset.screenRow + if screenRow = node.dataset?.screenRow return parseInt(screenRow) node = node.parentElement null From e64f50725b4fe726c83f8fb5d26511c7cabf41dc Mon Sep 17 00:00:00 2001 From: Lukas Geiger Date: Thu, 24 Nov 2016 02:47:03 +0100 Subject: [PATCH 080/184] :shirt: Fix lint error --- src/reopen-project-menu-manager.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/reopen-project-menu-manager.js b/src/reopen-project-menu-manager.js index b651b6223..7b219b3e5 100644 --- a/src/reopen-project-menu-manager.js +++ b/src/reopen-project-menu-manager.js @@ -58,8 +58,8 @@ export default class ReopenProjectMenuManager { this.app.setJumpList([ { - type:'custom', - name:'Recent Projects', + type: 'custom', + name: 'Recent Projects', items: this.projects.map(p => ({ type: 'task', title: ReopenProjectMenuManager.createLabel(p), From 5162d9d956b751b9491edb85af02edeca0e83e73 Mon Sep 17 00:00:00 2001 From: Lee Dohm Date: Wed, 23 Nov 2016 23:03:45 -0800 Subject: [PATCH 081/184] Fix linting error --- src/reopen-project-menu-manager.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/reopen-project-menu-manager.js b/src/reopen-project-menu-manager.js index b651b6223..7b219b3e5 100644 --- a/src/reopen-project-menu-manager.js +++ b/src/reopen-project-menu-manager.js @@ -58,8 +58,8 @@ export default class ReopenProjectMenuManager { this.app.setJumpList([ { - type:'custom', - name:'Recent Projects', + type: 'custom', + name: 'Recent Projects', items: this.projects.map(p => ({ type: 'task', title: ReopenProjectMenuManager.createLabel(p), From 83f3c296f34611fe0e0f3a44c24b0e9667c43a09 Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Thu, 24 Nov 2016 10:12:39 +0100 Subject: [PATCH 082/184] Add test for clicking an SVG element --- spec/text-editor-component-spec.js | 34 ++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/spec/text-editor-component-spec.js b/spec/text-editor-component-spec.js index 4478df532..8fc608782 100644 --- a/spec/text-editor-component-spec.js +++ b/spec/text-editor-component-spec.js @@ -3846,6 +3846,40 @@ describe('TextEditorComponent', function () { }) }) + describe('when the mousewheel event\'s target is an SVG element inside a block decoration', function () { + it('keeps the block decoration on the DOM if it is scrolled off-screen', function () { + wrapperNode.style.height = 4.5 * lineHeightInPixels + 'px' + wrapperNode.style.width = 20 * charWidth + 'px' + editor.update({autoHeight: false}) + component.measureDimensions() + runAnimationFrames() + + const item = document.createElement('div') + const svgElement = document.createElementNS("http://www.w3.org/2000/svg", "svg") + item.appendChild(svgElement) + editor.decorateMarker( + editor.markScreenPosition([0, 0], {invalidate: "never"}), + {type: "block", item: item} + ) + + runAnimationFrames() + + let wheelEvent = new WheelEvent('mousewheel', { + wheelDeltaX: 0, + wheelDeltaY: -500 + }) + Object.defineProperty(wheelEvent, 'target', { + get: function () { + return svgElement + } + }) + componentNode.dispatchEvent(wheelEvent) + runAnimationFrames() + + expect(component.getTopmostDOMNode().contains(item)).toBe(true) + }) + }) + it('only prevents the default action of the mousewheel event if it actually lead to scrolling', function () { spyOn(WheelEvent.prototype, 'preventDefault').andCallThrough() wrapperNode.style.height = 4.5 * lineHeightInPixels + 'px' From b2ff95caf420dd3ca381d6a6b199f4389e8678f3 Mon Sep 17 00:00:00 2001 From: Joe Fitzgerald Date: Wed, 23 Nov 2016 16:01:45 -0700 Subject: [PATCH 083/184] Run shell as detached process - Implement timeout - Clean up running process if window is reloaded or Atom exits --- src/update-process-env.js | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/update-process-env.js b/src/update-process-env.js index a7b7527a8..00bb13927 100644 --- a/src/update-process-env.js +++ b/src/update-process-env.js @@ -62,17 +62,32 @@ function shouldGetEnvFromShell (env) { async function getEnvFromShell (env) { let {stdout, error} = await new Promise((resolve) => { + let child let error let stdout = '' - const child = childProcess.spawn(env.SHELL, ['-ilc', 'command env'], {encoding: 'utf8', stdio: ['ignore', 'pipe', process.stderr]}) + let done = false + const cleanup = () => { + if (!done && child) { + child.kill() + done = true + } + } + process.once('exit', cleanup) + setTimeout(() => { + cleanup() + }, 5000) + child = childProcess.spawn(env.SHELL, ['-ilc', 'command env'], {encoding: 'utf8', detached: true, stdio: ['ignore', 'pipe', process.stderr]}) const buffers = [] child.on('error', (e) => { + done = true error = e }) child.stdout.on('data', (data) => { buffers.push(data) }) child.on('close', (code, signal) => { + done = true + process.removeListener('exit', cleanup) if (buffers.length) { stdout = Buffer.concat(buffers).toString('utf8') } From 0755ba31c76519e168bbe392f1f2a7204c241eec Mon Sep 17 00:00:00 2001 From: Wliu <50Wliu@users.noreply.github.com> Date: Sat, 26 Nov 2016 20:36:00 -0500 Subject: [PATCH 084/184] :arrow_up: language-css@0.41.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index d4fddccfb..bf8abc624 100644 --- a/package.json +++ b/package.json @@ -133,7 +133,7 @@ "language-clojure": "0.22.1", "language-coffee-script": "0.48.1", "language-csharp": "0.13.0", - "language-css": "0.40.1", + "language-css": "0.41.0", "language-gfm": "0.88.0", "language-git": "0.18.0", "language-go": "0.43.0", From c79b82b3d821e8e5f5b31203f210627d2180b5d8 Mon Sep 17 00:00:00 2001 From: Wliu Date: Sat, 26 Nov 2016 20:39:17 -0500 Subject: [PATCH 085/184] :arrow_up: language-shellscript@0.24.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index bf8abc624..1728ddc6a 100644 --- a/package.json +++ b/package.json @@ -153,7 +153,7 @@ "language-ruby": "0.70.2", "language-ruby-on-rails": "0.25.1", "language-sass": "0.57.0", - "language-shellscript": "0.23.0", + "language-shellscript": "0.24.0", "language-source": "0.9.0", "language-sql": "0.25.0", "language-text": "0.7.1", From ede46fac98db1111098f3bc5d5413c0290721ecb Mon Sep 17 00:00:00 2001 From: Wliu Date: Sat, 26 Nov 2016 20:40:49 -0500 Subject: [PATCH 086/184] :arrow_up: language-mustache@0.13.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 1728ddc6a..dfedf2791 100644 --- a/package.json +++ b/package.json @@ -144,7 +144,7 @@ "language-json": "0.18.3", "language-less": "0.29.6", "language-make": "0.22.2", - "language-mustache": "0.13.0", + "language-mustache": "0.13.1", "language-objective-c": "0.15.1", "language-perl": "0.37.0", "language-php": "0.37.3", From 64e5a3d081eac637dbd0745579c690c630cd570f Mon Sep 17 00:00:00 2001 From: Wliu Date: Sat, 26 Nov 2016 20:41:51 -0500 Subject: [PATCH 087/184] :arrow_up: language-sass@0.57.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index dfedf2791..74cd11184 100644 --- a/package.json +++ b/package.json @@ -152,7 +152,7 @@ "language-python": "0.45.1", "language-ruby": "0.70.2", "language-ruby-on-rails": "0.25.1", - "language-sass": "0.57.0", + "language-sass": "0.57.1", "language-shellscript": "0.24.0", "language-source": "0.9.0", "language-sql": "0.25.0", From 9417535174de42b1245eba5c07c37118fa1fb4d8 Mon Sep 17 00:00:00 2001 From: Wliu Date: Sat, 26 Nov 2016 20:44:20 -0500 Subject: [PATCH 088/184] :arrow_up: language-javascript@0.124.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 74cd11184..c5b7f5f83 100644 --- a/package.json +++ b/package.json @@ -140,7 +140,7 @@ "language-html": "0.47.1", "language-hyperlink": "0.16.1", "language-java": "0.24.0", - "language-javascript": "0.122.0", + "language-javascript": "0.124.0", "language-json": "0.18.3", "language-less": "0.29.6", "language-make": "0.22.2", From d181145615ee8273356b8af8f24a761189da6ac3 Mon Sep 17 00:00:00 2001 From: Wliu Date: Sat, 26 Nov 2016 20:45:10 -0500 Subject: [PATCH 089/184] :arrow_up: language-less@0.30.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index c5b7f5f83..ba9e1a884 100644 --- a/package.json +++ b/package.json @@ -142,7 +142,7 @@ "language-java": "0.24.0", "language-javascript": "0.124.0", "language-json": "0.18.3", - "language-less": "0.29.6", + "language-less": "0.30.0", "language-make": "0.22.2", "language-mustache": "0.13.1", "language-objective-c": "0.15.1", From 7af88377d8572e707da2599fbeccfafeae1fbc1d Mon Sep 17 00:00:00 2001 From: Wliu Date: Sat, 26 Nov 2016 20:45:54 -0500 Subject: [PATCH 090/184] :arrow_up: language-sql@0.25.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index ba9e1a884..a8ccf9cd9 100644 --- a/package.json +++ b/package.json @@ -155,7 +155,7 @@ "language-sass": "0.57.1", "language-shellscript": "0.24.0", "language-source": "0.9.0", - "language-sql": "0.25.0", + "language-sql": "0.25.1", "language-text": "0.7.1", "language-todo": "0.29.1", "language-toml": "0.18.1", From 29c91f0b262979c114fd8b3ac08359940f2d3d85 Mon Sep 17 00:00:00 2001 From: Wliu Date: Sat, 26 Nov 2016 20:47:12 -0500 Subject: [PATCH 091/184] :arrow_up: language-make@0.22.3 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index a8ccf9cd9..ce6c78f06 100644 --- a/package.json +++ b/package.json @@ -143,7 +143,7 @@ "language-javascript": "0.124.0", "language-json": "0.18.3", "language-less": "0.30.0", - "language-make": "0.22.2", + "language-make": "0.22.3", "language-mustache": "0.13.1", "language-objective-c": "0.15.1", "language-perl": "0.37.0", From bfba2082eb5646cb211ae2358044dc7a995a5fdb Mon Sep 17 00:00:00 2001 From: Wliu Date: Sat, 26 Nov 2016 20:48:29 -0500 Subject: [PATCH 092/184] :arrow_up: language-property-list@0.9.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index ce6c78f06..6797ad7b6 100644 --- a/package.json +++ b/package.json @@ -148,7 +148,7 @@ "language-objective-c": "0.15.1", "language-perl": "0.37.0", "language-php": "0.37.3", - "language-property-list": "0.8.0", + "language-property-list": "0.9.0", "language-python": "0.45.1", "language-ruby": "0.70.2", "language-ruby-on-rails": "0.25.1", From 46b90d77e19894ad78aa838e274ad97ac834fa85 Mon Sep 17 00:00:00 2001 From: Damien Guard Date: Sun, 27 Nov 2016 18:19:45 -0800 Subject: [PATCH 093/184] Rename windows866 to cp866, fixes atom/encoding-selector#36 --- src/config-schema.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/config-schema.js b/src/config-schema.js index 63be1273f..18dcff020 100644 --- a/src/config-schema.js +++ b/src/config-schema.js @@ -85,6 +85,7 @@ const configSchema = { default: 'utf8', enum: [ 'cp437', + 'cp866', 'eucjp', 'euckr', 'gbk', @@ -117,8 +118,7 @@ const configSchema = { 'windows1255', 'windows1256', 'windows1257', - 'windows1258', - 'windows866' + 'windows1258' ] }, openEmptyEditorOnStart: { From f198a0fd71a269e3d60448d9152953e2d823e218 Mon Sep 17 00:00:00 2001 From: Damien Guard Date: Sun, 27 Nov 2016 19:25:31 -0800 Subject: [PATCH 094/184] Add support for cp850 Fixes #13342 --- src/config-schema.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/config-schema.js b/src/config-schema.js index 18dcff020..6a16b85a7 100644 --- a/src/config-schema.js +++ b/src/config-schema.js @@ -85,6 +85,7 @@ const configSchema = { default: 'utf8', enum: [ 'cp437', + 'cp850', 'cp866', 'eucjp', 'euckr', From e5ab835357ace03e63c51b4ea060f2aa424866bb Mon Sep 17 00:00:00 2001 From: Mike J Innes Date: Fri, 27 May 2016 00:05:12 +0100 Subject: [PATCH 095/184] add `stable` option --- src/text-editor-presenter.coffee | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/text-editor-presenter.coffee b/src/text-editor-presenter.coffee index cc988bbea..07499c822 100644 --- a/src/text-editor-presenter.coffee +++ b/src/text-editor-presenter.coffee @@ -451,7 +451,7 @@ class TextEditorPresenter for decoration in @model.getOverlayDecorations() continue unless decoration.getMarker().isValid() - {item, position, class: klass} = decoration.getProperties() + {item, position, class: klass, stable} = decoration.getProperties() if position is 'tail' screenPosition = decoration.getMarker().getTailScreenPosition() else @@ -466,15 +466,17 @@ class TextEditorPresenter if overlayDimensions = @overlayDimensions[decoration.id] {itemWidth, itemHeight, contentMargin} = overlayDimensions - rightDiff = left + itemWidth + contentMargin - @windowWidth - left -= rightDiff if rightDiff > 0 + if !stable - leftDiff = left + contentMargin - left -= leftDiff if leftDiff < 0 + rightDiff = left + itemWidth + contentMargin - @windowWidth + left -= rightDiff if rightDiff > 0 - if top + itemHeight > @windowHeight and - top - (itemHeight + @lineHeight) >= 0 - top -= itemHeight + @lineHeight + leftDiff = left + contentMargin + left -= leftDiff if leftDiff < 0 + + if top + itemHeight > @windowHeight and + top - (itemHeight + @lineHeight) >= 0 + top -= itemHeight + @lineHeight pixelPosition.top = top pixelPosition.left = left From 20545ad41dfb5db863ee0ded914d2b2dea5accbe Mon Sep 17 00:00:00 2001 From: Mike J Innes Date: Fri, 26 Aug 2016 17:38:50 +0100 Subject: [PATCH 096/184] Update text-editor-presenter.coffee --- src/text-editor-presenter.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/text-editor-presenter.coffee b/src/text-editor-presenter.coffee index 07499c822..814a2d220 100644 --- a/src/text-editor-presenter.coffee +++ b/src/text-editor-presenter.coffee @@ -466,7 +466,7 @@ class TextEditorPresenter if overlayDimensions = @overlayDimensions[decoration.id] {itemWidth, itemHeight, contentMargin} = overlayDimensions - if !stable + if not stable rightDiff = left + itemWidth + contentMargin - @windowWidth left -= rightDiff if rightDiff > 0 From f9ef678c4a3005184f739641121a88f0859deab8 Mon Sep 17 00:00:00 2001 From: Mike J Innes Date: Mon, 28 Nov 2016 10:24:51 +0000 Subject: [PATCH 097/184] scroll test --- spec/text-editor-presenter-spec.coffee | 43 ++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/spec/text-editor-presenter-spec.coffee b/spec/text-editor-presenter-spec.coffee index 9eb4a15d2..d9529b2a0 100644 --- a/spec/text-editor-presenter-spec.coffee +++ b/spec/text-editor-presenter-spec.coffee @@ -2536,6 +2536,49 @@ describe "TextEditorPresenter", -> pixelPosition: {top: 6 * 10 - scrollTop - itemHeight, left: gutterWidth} } + it "does not slide horizontally when set to stable", -> + scrollLeft = 20 + marker = editor.markBufferPosition([0, 26], invalidate: 'never') + decoration = editor.decorateMarker(marker, {type: 'overlay', item, stable: true}) + + presenter = buildPresenter({scrollLeft, windowWidth, windowHeight, contentFrameWidth, boundingClientRect, gutterWidth}) + expectStateUpdate presenter, -> + presenter.setOverlayDimensions(decoration.id, itemWidth, itemHeight, contentMargin) + + expectValues stateForOverlay(presenter, decoration), { + item: item + pixelPosition: {top: 1 * 10, left: 26 * 10 + gutterWidth - scrollLeft} + } + + expectStateUpdate presenter, -> editor.insertText('a') + expectValues stateForOverlay(presenter, decoration), { + item: item + pixelPosition: {top: 1 * 10, left: 26 * 10 + gutterWidth - scrollLeft} + } + + it "does not flip vertically when set to stable", -> + scrollTop = 10 + marker = editor.markBufferPosition([5, 0], invalidate: 'never') + decoration = editor.decorateMarker(marker, {type: 'overlay', item, stable: true}) + + presenter = buildPresenter({scrollTop, windowWidth, windowHeight, contentFrameWidth, boundingClientRect, gutterWidth}) + expectStateUpdate presenter, -> + presenter.setOverlayDimensions(decoration.id, itemWidth, itemHeight, contentMargin) + + expectValues stateForOverlay(presenter, decoration), { + item: item + pixelPosition: {top: 6 * 10 - scrollTop, left: gutterWidth} + } + + expectStateUpdate presenter, -> + editor.insertNewline() + presenter.setScrollTop(scrollTop) # I'm fighting the editor + + expectValues stateForOverlay(presenter, decoration), { + item: item + pixelPosition: {top: 6 * 10 - scrollTop, left: gutterWidth} + } + describe "when the overlay item has a margin", -> beforeEach -> itemWidth = 12 * 10 From 7f7941ca46667c048864579131a861505e5b51b6 Mon Sep 17 00:00:00 2001 From: Damien Guard Date: Mon, 28 Nov 2016 07:37:44 -0800 Subject: [PATCH 098/184] :arrow_up: pathwatcher --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 6797ad7b6..16964fc29 100644 --- a/package.json +++ b/package.json @@ -49,7 +49,7 @@ "normalize-package-data": "^2.0.0", "nslog": "^3", "oniguruma": "6.1.0", - "pathwatcher": "~6.5", + "pathwatcher": "^6.7.1", "postcss": "5.2.4", "postcss-selector-parser": "2.2.1", "property-accessors": "^1.1.3", From e90d538b017b4589a43c7a694cdd1f8c11ccac8e Mon Sep 17 00:00:00 2001 From: Damien Guard Date: Mon, 28 Nov 2016 08:02:23 -0800 Subject: [PATCH 099/184] Add keyboard-layout to build-status.md --- docs/build-instructions/build-status.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/build-instructions/build-status.md b/docs/build-instructions/build-status.md index a6140d5ff..7a8053cec 100644 --- a/docs/build-instructions/build-status.md +++ b/docs/build-instructions/build-status.md @@ -67,6 +67,7 @@ | [Fs Plus](https://github.com/atom/fs-plus) | [![macOS Build Status](https://travis-ci.org/atom/fs-plus.svg?branch=master)](https://travis-ci.org/atom/fs-plus) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/gf2tleqp0hdek3o3/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/fs-plus/branch/master) | [![Dependency Status](https://david-dm.org/atom/fs-plus.svg)](https://david-dm.org/atom/fs-plus) | | [Grim](https://github.com/atom/grim) | [![macOS Build Status](https://travis-ci.org/atom/grim.svg)](https://travis-ci.org/atom/grim) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/i4m37pol77vygrvb/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/grim/branch/master) | [![Dependency Status](https://david-dm.org/atom/grim.svg)](https://david-dm.org/atom/grim) | | [Jasmine Focused](https://github.com/atom/jasmine-focused) | [![macOS Build Status](https://travis-ci.org/atom/grim.svg)](https://travis-ci.org/atom/grim) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/af0ipfqqxn7aygoe/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/jasmine-focused/branch/master) | [![Dependency Status](https://david-dm.org/atom/jasmine-focused.svg)](https://david-dm.org/atom/jasmine-focused) | +| [Keyboard-Layout](https://github.com/atom/keyboard-layout) | [![Build Status](https://travis-ci.org/atom/keyboard-layout.svg?branch=master)](https://travis-ci.org/atom/keyboard-layout) [![Build status](https://ci.appveyor.com/api/projects/status/rk8wooeyh689apgd/branch/master?svg=true)] (https://ci.appveyor.com/project/Atom/keyboard-layout) [![Dependency Status](https://david-dm.org/atom/keyboard-layout/status.svg)](https://david-dm.org/atom/keyboard-layout) | | [Oniguruma](https://github.com/atom/node-oniguruma) | [![macOS Build Status](https://travis-ci.org/atom/node-oniguruma.svg?branch=master)](https://travis-ci.org/atom/node-oniguruma) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/s9twhi451ef2butr/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/node-oniguruma/branch/master) | [![Dependency Status](https://david-dm.org/atom/node-oniguruma.svg)](https://david-dm.org/atom/node-oniguruma) | | [Property Accessors](https://github.com/atom/property-accessors) | [![macOS Build Status](https://travis-ci.org/atom/property-accessors.svg?branch=master)](https://travis-ci.org/atom/property-accessors) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/ww4d10hi4v5h7kbp/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/property-accessors/branch/master) | [![Dependency Status](https://david-dm.org/atom/property-accessors.svg)](https://david-dm.org/atom/property-accessors) | | [TextBuffer](https://github.com/atom/text-buffer) | [![macOS Build Status](https://travis-ci.org/atom/text-buffer.svg?branch=master)](https://travis-ci.org/atom/text-buffer) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/48xl8do1sm2thf5p/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/text-buffer/branch/master) | [![Dependency Status](https://david-dm.org/atom/text-buffer.svg)](https://david-dm.org/atom/text-buffer) | From 9372f45b0a7eb670c7c66eb1c48898dc493534fa Mon Sep 17 00:00:00 2001 From: Damien Guard Date: Mon, 28 Nov 2016 09:50:20 -0800 Subject: [PATCH 100/184] Add pathwatcher to build status --- docs/build-instructions/build-status.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/build-instructions/build-status.md b/docs/build-instructions/build-status.md index 7a8053cec..f65f74a55 100644 --- a/docs/build-instructions/build-status.md +++ b/docs/build-instructions/build-status.md @@ -69,6 +69,8 @@ | [Jasmine Focused](https://github.com/atom/jasmine-focused) | [![macOS Build Status](https://travis-ci.org/atom/grim.svg)](https://travis-ci.org/atom/grim) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/af0ipfqqxn7aygoe/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/jasmine-focused/branch/master) | [![Dependency Status](https://david-dm.org/atom/jasmine-focused.svg)](https://david-dm.org/atom/jasmine-focused) | | [Keyboard-Layout](https://github.com/atom/keyboard-layout) | [![Build Status](https://travis-ci.org/atom/keyboard-layout.svg?branch=master)](https://travis-ci.org/atom/keyboard-layout) [![Build status](https://ci.appveyor.com/api/projects/status/rk8wooeyh689apgd/branch/master?svg=true)] (https://ci.appveyor.com/project/Atom/keyboard-layout) [![Dependency Status](https://david-dm.org/atom/keyboard-layout/status.svg)](https://david-dm.org/atom/keyboard-layout) | | [Oniguruma](https://github.com/atom/node-oniguruma) | [![macOS Build Status](https://travis-ci.org/atom/node-oniguruma.svg?branch=master)](https://travis-ci.org/atom/node-oniguruma) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/s9twhi451ef2butr/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/node-oniguruma/branch/master) | [![Dependency Status](https://david-dm.org/atom/node-oniguruma.svg)](https://david-dm.org/atom/node-oniguruma) | +| [PathWatcher](https://github.com/atom/node-pathwatcher) | [![mac OS Build Status](https://travis-ci.org/atom/node-pathwatcher.svg?branch=master)](https://travis-ci.org/atom/node-pathwatcher) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/li8dkoucdrc2ryts/branch/master?svg=true +)](https://ci.appveyor.com/project/Atom/node-pathwatcher) | [![Depenency Status](https://david-dm.org/atom/node-pathwatcher/status.svg)](https://david-dm.org/atom/node-pathwatcher) | | [Property Accessors](https://github.com/atom/property-accessors) | [![macOS Build Status](https://travis-ci.org/atom/property-accessors.svg?branch=master)](https://travis-ci.org/atom/property-accessors) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/ww4d10hi4v5h7kbp/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/property-accessors/branch/master) | [![Dependency Status](https://david-dm.org/atom/property-accessors.svg)](https://david-dm.org/atom/property-accessors) | | [TextBuffer](https://github.com/atom/text-buffer) | [![macOS Build Status](https://travis-ci.org/atom/text-buffer.svg?branch=master)](https://travis-ci.org/atom/text-buffer) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/48xl8do1sm2thf5p/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/text-buffer/branch/master) | [![Dependency Status](https://david-dm.org/atom/text-buffer.svg)](https://david-dm.org/atom/text-buffer) | | [Underscore-Plus](https://github.com/atom/underscore-plus) | [![macOS Build Status](https://travis-ci.org/atom/underscore-plus.svg?branch=master)](https://travis-ci.org/atom/underscore-plus) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/c7l8009vgpaojxcd/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/underscore-plus/branch/master) | [![Dependency Status](https://david-dm.org/atom/underscore-plus.svg)](https://david-dm.org/atom/underscore-plus) | From 4d157f77db4ebedf771e56681571d5da09969627 Mon Sep 17 00:00:00 2001 From: Damien Guard Date: Mon, 28 Nov 2016 09:52:00 -0800 Subject: [PATCH 101/184] Update build-status.md --- docs/build-instructions/build-status.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/docs/build-instructions/build-status.md b/docs/build-instructions/build-status.md index f65f74a55..51d0b0765 100644 --- a/docs/build-instructions/build-status.md +++ b/docs/build-instructions/build-status.md @@ -69,8 +69,7 @@ | [Jasmine Focused](https://github.com/atom/jasmine-focused) | [![macOS Build Status](https://travis-ci.org/atom/grim.svg)](https://travis-ci.org/atom/grim) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/af0ipfqqxn7aygoe/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/jasmine-focused/branch/master) | [![Dependency Status](https://david-dm.org/atom/jasmine-focused.svg)](https://david-dm.org/atom/jasmine-focused) | | [Keyboard-Layout](https://github.com/atom/keyboard-layout) | [![Build Status](https://travis-ci.org/atom/keyboard-layout.svg?branch=master)](https://travis-ci.org/atom/keyboard-layout) [![Build status](https://ci.appveyor.com/api/projects/status/rk8wooeyh689apgd/branch/master?svg=true)] (https://ci.appveyor.com/project/Atom/keyboard-layout) [![Dependency Status](https://david-dm.org/atom/keyboard-layout/status.svg)](https://david-dm.org/atom/keyboard-layout) | | [Oniguruma](https://github.com/atom/node-oniguruma) | [![macOS Build Status](https://travis-ci.org/atom/node-oniguruma.svg?branch=master)](https://travis-ci.org/atom/node-oniguruma) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/s9twhi451ef2butr/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/node-oniguruma/branch/master) | [![Dependency Status](https://david-dm.org/atom/node-oniguruma.svg)](https://david-dm.org/atom/node-oniguruma) | -| [PathWatcher](https://github.com/atom/node-pathwatcher) | [![mac OS Build Status](https://travis-ci.org/atom/node-pathwatcher.svg?branch=master)](https://travis-ci.org/atom/node-pathwatcher) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/li8dkoucdrc2ryts/branch/master?svg=true -)](https://ci.appveyor.com/project/Atom/node-pathwatcher) | [![Depenency Status](https://david-dm.org/atom/node-pathwatcher/status.svg)](https://david-dm.org/atom/node-pathwatcher) | +| [PathWatcher](https://github.com/atom/node-pathwatcher) | [![mac OS Build Status](https://travis-ci.org/atom/node-pathwatcher.svg?branch=master)](https://travis-ci.org/atom/node-pathwatcher) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/li8dkoucdrc2ryts/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/node-pathwatcher) | [![Depenency Status](https://david-dm.org/atom/node-pathwatcher/status.svg)](https://david-dm.org/atom/node-pathwatcher) | | [Property Accessors](https://github.com/atom/property-accessors) | [![macOS Build Status](https://travis-ci.org/atom/property-accessors.svg?branch=master)](https://travis-ci.org/atom/property-accessors) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/ww4d10hi4v5h7kbp/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/property-accessors/branch/master) | [![Dependency Status](https://david-dm.org/atom/property-accessors.svg)](https://david-dm.org/atom/property-accessors) | | [TextBuffer](https://github.com/atom/text-buffer) | [![macOS Build Status](https://travis-ci.org/atom/text-buffer.svg?branch=master)](https://travis-ci.org/atom/text-buffer) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/48xl8do1sm2thf5p/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/text-buffer/branch/master) | [![Dependency Status](https://david-dm.org/atom/text-buffer.svg)](https://david-dm.org/atom/text-buffer) | | [Underscore-Plus](https://github.com/atom/underscore-plus) | [![macOS Build Status](https://travis-ci.org/atom/underscore-plus.svg?branch=master)](https://travis-ci.org/atom/underscore-plus) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/c7l8009vgpaojxcd/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/underscore-plus/branch/master) | [![Dependency Status](https://david-dm.org/atom/underscore-plus.svg)](https://david-dm.org/atom/underscore-plus) | From f6043af7bdfdfd386026e80d14cf15f49a3109ea Mon Sep 17 00:00:00 2001 From: Damien Guard Date: Mon, 28 Nov 2016 09:55:55 -0800 Subject: [PATCH 102/184] Update build-status.md --- docs/build-instructions/build-status.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/build-instructions/build-status.md b/docs/build-instructions/build-status.md index 51d0b0765..f52e89255 100644 --- a/docs/build-instructions/build-status.md +++ b/docs/build-instructions/build-status.md @@ -67,7 +67,7 @@ | [Fs Plus](https://github.com/atom/fs-plus) | [![macOS Build Status](https://travis-ci.org/atom/fs-plus.svg?branch=master)](https://travis-ci.org/atom/fs-plus) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/gf2tleqp0hdek3o3/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/fs-plus/branch/master) | [![Dependency Status](https://david-dm.org/atom/fs-plus.svg)](https://david-dm.org/atom/fs-plus) | | [Grim](https://github.com/atom/grim) | [![macOS Build Status](https://travis-ci.org/atom/grim.svg)](https://travis-ci.org/atom/grim) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/i4m37pol77vygrvb/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/grim/branch/master) | [![Dependency Status](https://david-dm.org/atom/grim.svg)](https://david-dm.org/atom/grim) | | [Jasmine Focused](https://github.com/atom/jasmine-focused) | [![macOS Build Status](https://travis-ci.org/atom/grim.svg)](https://travis-ci.org/atom/grim) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/af0ipfqqxn7aygoe/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/jasmine-focused/branch/master) | [![Dependency Status](https://david-dm.org/atom/jasmine-focused.svg)](https://david-dm.org/atom/jasmine-focused) | -| [Keyboard-Layout](https://github.com/atom/keyboard-layout) | [![Build Status](https://travis-ci.org/atom/keyboard-layout.svg?branch=master)](https://travis-ci.org/atom/keyboard-layout) [![Build status](https://ci.appveyor.com/api/projects/status/rk8wooeyh689apgd/branch/master?svg=true)] (https://ci.appveyor.com/project/Atom/keyboard-layout) [![Dependency Status](https://david-dm.org/atom/keyboard-layout/status.svg)](https://david-dm.org/atom/keyboard-layout) | +| [Keyboard-Layout](https://github.com/atom/keyboard-layout) | [![macOS Build Status](https://travis-ci.org/atom/keyboard-layout.svg?branch=master)](https://travis-ci.org/atom/keyboard-layout) | [![Windows Build status](https://ci.appveyor.com/api/projects/status/rk8wooeyh689apgd/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/keyboard-layout) | [![Dependency Status](https://david-dm.org/atom/keyboard-layout/status.svg)](https://david-dm.org/atom/keyboard-layout) | | [Oniguruma](https://github.com/atom/node-oniguruma) | [![macOS Build Status](https://travis-ci.org/atom/node-oniguruma.svg?branch=master)](https://travis-ci.org/atom/node-oniguruma) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/s9twhi451ef2butr/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/node-oniguruma/branch/master) | [![Dependency Status](https://david-dm.org/atom/node-oniguruma.svg)](https://david-dm.org/atom/node-oniguruma) | | [PathWatcher](https://github.com/atom/node-pathwatcher) | [![mac OS Build Status](https://travis-ci.org/atom/node-pathwatcher.svg?branch=master)](https://travis-ci.org/atom/node-pathwatcher) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/li8dkoucdrc2ryts/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/node-pathwatcher) | [![Depenency Status](https://david-dm.org/atom/node-pathwatcher/status.svg)](https://david-dm.org/atom/node-pathwatcher) | | [Property Accessors](https://github.com/atom/property-accessors) | [![macOS Build Status](https://travis-ci.org/atom/property-accessors.svg?branch=master)](https://travis-ci.org/atom/property-accessors) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/ww4d10hi4v5h7kbp/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/property-accessors/branch/master) | [![Dependency Status](https://david-dm.org/atom/property-accessors.svg)](https://david-dm.org/atom/property-accessors) | From f4c45c1e39b8aaae9d569c11c285d2683a8f5090 Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Mon, 28 Nov 2016 12:45:05 -0700 Subject: [PATCH 103/184] Rename `stable: true` to `avoidOverlay: false` and fix tests MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit As part of the test fixes, I’m honoring the `autoscroll: false` option in `insertText` and `insertNewline` to avoid inadvertently scrolling the editor during tests when the editor is modified. --- spec/text-editor-presenter-spec.coffee | 24 +++++++++++------------- src/selection.coffee | 4 ++-- src/text-editor-presenter.coffee | 5 ++--- src/text-editor.coffee | 4 ++-- 4 files changed, 17 insertions(+), 20 deletions(-) diff --git a/spec/text-editor-presenter-spec.coffee b/spec/text-editor-presenter-spec.coffee index d9529b2a0..d688d8182 100644 --- a/spec/text-editor-presenter-spec.coffee +++ b/spec/text-editor-presenter-spec.coffee @@ -2501,13 +2501,13 @@ describe "TextEditorPresenter", -> pixelPosition: {top: 1 * 10, left: 26 * 10 + gutterWidth - scrollLeft} } - expectStateUpdate presenter, -> editor.insertText('a') + expectStateUpdate presenter, -> editor.insertText('abc', autoscroll: false) expectValues stateForOverlay(presenter, decoration), { item: item pixelPosition: {top: 1 * 10, left: windowWidth - itemWidth} } - expectStateUpdate presenter, -> editor.insertText('b') + expectStateUpdate presenter, -> editor.insertText('d', autoscroll: false) expectValues stateForOverlay(presenter, decoration), { item: item pixelPosition: {top: 1 * 10, left: windowWidth - itemWidth} @@ -2528,18 +2528,17 @@ describe "TextEditorPresenter", -> } expectStateUpdate presenter, -> - editor.insertNewline() - presenter.setScrollTop(scrollTop) # I'm fighting the editor + editor.insertNewline(autoscroll: false) expectValues stateForOverlay(presenter, decoration), { item: item pixelPosition: {top: 6 * 10 - scrollTop - itemHeight, left: gutterWidth} } - it "does not slide horizontally when set to stable", -> + it "when avoidOverflow is false, does not move horizontally when overflowing the editor's scrollView horizontally", -> scrollLeft = 20 marker = editor.markBufferPosition([0, 26], invalidate: 'never') - decoration = editor.decorateMarker(marker, {type: 'overlay', item, stable: true}) + decoration = editor.decorateMarker(marker, {type: 'overlay', item, avoidOverflow: false}) presenter = buildPresenter({scrollLeft, windowWidth, windowHeight, contentFrameWidth, boundingClientRect, gutterWidth}) expectStateUpdate presenter, -> @@ -2550,16 +2549,16 @@ describe "TextEditorPresenter", -> pixelPosition: {top: 1 * 10, left: 26 * 10 + gutterWidth - scrollLeft} } - expectStateUpdate presenter, -> editor.insertText('a') + expectStateUpdate presenter, -> editor.insertText('a', autoscroll: false) expectValues stateForOverlay(presenter, decoration), { item: item - pixelPosition: {top: 1 * 10, left: 26 * 10 + gutterWidth - scrollLeft} + pixelPosition: {top: 1 * 10, left: 27 * 10 + gutterWidth - scrollLeft} } - it "does not flip vertically when set to stable", -> + it "when avoidOverflow is false, does not flip vertically when overflowing the editor's scrollView vertically", -> scrollTop = 10 marker = editor.markBufferPosition([5, 0], invalidate: 'never') - decoration = editor.decorateMarker(marker, {type: 'overlay', item, stable: true}) + decoration = editor.decorateMarker(marker, {type: 'overlay', item, avoidOverflow: false}) presenter = buildPresenter({scrollTop, windowWidth, windowHeight, contentFrameWidth, boundingClientRect, gutterWidth}) expectStateUpdate presenter, -> @@ -2571,12 +2570,11 @@ describe "TextEditorPresenter", -> } expectStateUpdate presenter, -> - editor.insertNewline() - presenter.setScrollTop(scrollTop) # I'm fighting the editor + editor.insertNewline(autoscroll: false) expectValues stateForOverlay(presenter, decoration), { item: item - pixelPosition: {top: 6 * 10 - scrollTop, left: gutterWidth} + pixelPosition: {top: 7 * 10 - scrollTop, left: gutterWidth} } describe "when the overlay item has a margin", -> diff --git a/src/selection.coffee b/src/selection.coffee index 5eaa9c8dd..8aa86157e 100644 --- a/src/selection.coffee +++ b/src/selection.coffee @@ -366,7 +366,7 @@ class Selection extends Model insertText: (text, options={}) -> oldBufferRange = @getBufferRange() wasReversed = @isReversed() - @clear() + @clear(options) autoIndentFirstLine = false precedingText = @editor.getTextInRange([[oldBufferRange.start.row, 0], oldBufferRange.start]) @@ -403,7 +403,7 @@ class Selection extends Model else if options.autoDecreaseIndent and NonWhitespaceRegExp.test(text) @editor.autoDecreaseIndentForBufferRow(newBufferRange.start.row) - @autoscroll() if @isLastSelection() + @autoscroll() if options.autoscroll ? @isLastSelection() newBufferRange diff --git a/src/text-editor-presenter.coffee b/src/text-editor-presenter.coffee index 814a2d220..fadcfc6da 100644 --- a/src/text-editor-presenter.coffee +++ b/src/text-editor-presenter.coffee @@ -451,7 +451,7 @@ class TextEditorPresenter for decoration in @model.getOverlayDecorations() continue unless decoration.getMarker().isValid() - {item, position, class: klass, stable} = decoration.getProperties() + {item, position, class: klass, avoidOverflow} = decoration.getProperties() if position is 'tail' screenPosition = decoration.getMarker().getTailScreenPosition() else @@ -466,8 +466,7 @@ class TextEditorPresenter if overlayDimensions = @overlayDimensions[decoration.id] {itemWidth, itemHeight, contentMargin} = overlayDimensions - if not stable - + if avoidOverflow isnt false rightDiff = left + itemWidth + contentMargin - @windowWidth left -= rightDiff if rightDiff > 0 diff --git a/src/text-editor.coffee b/src/text-editor.coffee index 497dd3c20..78360efbd 100644 --- a/src/text-editor.coffee +++ b/src/text-editor.coffee @@ -1085,8 +1085,8 @@ class TextEditor extends Model ) # Essential: For each selection, replace the selected text with a newline. - insertNewline: -> - @insertText('\n') + insertNewline: (options) -> + @insertText('\n', options) # Essential: For each selection, if the selection is empty, delete the character # following the cursor. Otherwise delete the selected text. From 3707c18daea51ae5ceeb40ca5cbb469c060a9dfa Mon Sep 17 00:00:00 2001 From: Wliu <50Wliu@users.noreply.github.com> Date: Mon, 28 Nov 2016 15:15:34 -0500 Subject: [PATCH 104/184] :arrow_up: bracket-matcher@0.84.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 16964fc29..6269ea8e6 100644 --- a/package.json +++ b/package.json @@ -95,7 +95,7 @@ "autosave": "0.23.2", "background-tips": "0.26.1", "bookmarks": "0.43.2", - "bracket-matcher": "0.82.2", + "bracket-matcher": "0.84.0", "command-palette": "0.39.1", "deprecation-cop": "0.55.1", "dev-live-reload": "0.47.0", From a8930dfebac99eb94491b411dc357ea2dd52b63f Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Mon, 28 Nov 2016 15:08:34 -0700 Subject: [PATCH 105/184] Document avoidOverflow option --- src/text-editor.coffee | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/text-editor.coffee b/src/text-editor.coffee index 78360efbd..f09ca9c2a 100644 --- a/src/text-editor.coffee +++ b/src/text-editor.coffee @@ -1749,10 +1749,14 @@ class TextEditor extends Model # * `onlyNonEmpty` (optional) If `true`, the decoration will only be applied # if the associated `DisplayMarker` is non-empty. Only applicable to the # `gutter`, `line`, and `line-number` types. - # * `position` (optional) Only applicable to decorations of type `overlay` and `block`, - # controls where the view is positioned relative to the `TextEditorMarker`. + # * `position` (optional) Only applicable to decorations of type `overlay` and `block`. + # Controls where the view is positioned relative to the `TextEditorMarker`. # Values can be `'head'` (the default) or `'tail'` for overlay decorations, and # `'before'` (the default) or `'after'` for block decorations. + # * `avoidOverflow` (optional) Only applicable to decorations of type + # `overlay`. Determines whether the decoration adjusts its horizontal or + # vertical position to remain fully visible when it would otherwise + # overflow the editor. Defaults to `true`. # # Returns a {Decoration} object decorateMarker: (marker, decorationParams) -> From db27e6f58fcce65f45d4c3e371eef39af84077eb Mon Sep 17 00:00:00 2001 From: Damien Guard Date: Mon, 28 Nov 2016 14:45:05 -0800 Subject: [PATCH 106/184] Adding two missing Linux build dependencies --- docs/build-instructions/linux.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/build-instructions/linux.md b/docs/build-instructions/linux.md index a05bbff16..b8b35eb61 100644 --- a/docs/build-instructions/linux.md +++ b/docs/build-instructions/linux.md @@ -6,6 +6,8 @@ Ubuntu LTS 12.04 64-bit is the recommended platform. * OS with 64-bit or 32-bit architecture * C++11 toolchain +* pkg-config +* libgnome-keyring-dev * Git * Node.js 4.4.x or later (we recommend installing it via [nvm](https://github.com/creationix/nvm)) * npm 3.10.x or later (run `npm install -g npm`) From 4a3e9fcffc1d1292d0fc7121a9d12e42f58dd091 Mon Sep 17 00:00:00 2001 From: Damien Guard Date: Mon, 28 Nov 2016 14:50:53 -0800 Subject: [PATCH 107/184] Update linux.md --- docs/build-instructions/linux.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/docs/build-instructions/linux.md b/docs/build-instructions/linux.md index b8b35eb61..a05bbff16 100644 --- a/docs/build-instructions/linux.md +++ b/docs/build-instructions/linux.md @@ -6,8 +6,6 @@ Ubuntu LTS 12.04 64-bit is the recommended platform. * OS with 64-bit or 32-bit architecture * C++11 toolchain -* pkg-config -* libgnome-keyring-dev * Git * Node.js 4.4.x or later (we recommend installing it via [nvm](https://github.com/creationix/nvm)) * npm 3.10.x or later (run `npm install -g npm`) From 0352820d8c419c33af5071e189dd51a2eb4eb161 Mon Sep 17 00:00:00 2001 From: Max Brunsfeld Date: Mon, 28 Nov 2016 12:26:48 -0800 Subject: [PATCH 108/184] Fix error in highlight region width calculation --- src/text-editor-presenter.coffee | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/text-editor-presenter.coffee b/src/text-editor-presenter.coffee index cc988bbea..89c600515 100644 --- a/src/text-editor-presenter.coffee +++ b/src/text-editor-presenter.coffee @@ -1001,8 +1001,7 @@ class TextEditorPresenter @lineHeight? and @baseCharacterWidth? pixelPositionForScreenPosition: (screenPosition) -> - position = - @linesYardstick.pixelPositionForScreenPosition(screenPosition) + position = @linesYardstick.pixelPositionForScreenPosition(screenPosition) position.top -= @getScrollTop() position.left -= @getScrollLeft() @@ -1225,13 +1224,14 @@ class TextEditorPresenter screenRange.end.column = 0 repositionRegionWithinTile: (region, tileStartRow) -> - region.top += @scrollTop - @lineTopIndex.pixelPositionBeforeBlocksForRow(tileStartRow) - region.left += @scrollLeft + region.top += @scrollTop - @lineTopIndex.pixelPositionBeforeBlocksForRow(tileStartRow) buildHighlightRegions: (screenRange) -> lineHeightInPixels = @lineHeight startPixelPosition = @pixelPositionForScreenPosition(screenRange.start) endPixelPosition = @pixelPositionForScreenPosition(screenRange.end) + startPixelPosition.left += @scrollLeft + endPixelPosition.left += @scrollLeft spannedRows = screenRange.end.row - screenRange.start.row + 1 regions = [] From f7c5cebdaf4b8d48fbf68e8b51533135c9d2f868 Mon Sep 17 00:00:00 2001 From: Max Brunsfeld Date: Mon, 28 Nov 2016 17:39:36 -0800 Subject: [PATCH 109/184] Add test for highlight region calculation error --- spec/text-editor-presenter-spec.coffee | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/spec/text-editor-presenter-spec.coffee b/spec/text-editor-presenter-spec.coffee index 9eb4a15d2..629a7ae58 100644 --- a/spec/text-editor-presenter-spec.coffee +++ b/spec/text-editor-presenter-spec.coffee @@ -2028,6 +2028,27 @@ describe "TextEditorPresenter", -> expect(stateForHighlightInTile(presenter, highlight, 0)).toBeUndefined() + it "handles highlights that extend to the left of the visible area (regression)", -> + editor.setSelectedBufferRanges([ + [[0, 2], [1, 4]], + ]) + + presenter = buildPresenter(explicitHeight: 20, scrollLeft: 0, tileSize: 2) + expectValues stateForSelectionInTile(presenter, 0, 0), { + regions: [ + {top: 0 * 10, height: 10, left: 2 * 10, right: 0 * 10}, + {top: 1 * 10, height: 10, left: 0 * 10, width: 4 * 10} + ] + } + + presenter = buildPresenter(explicitHeight: 20, scrollLeft: 20, tileSize: 2) + expectValues stateForSelectionInTile(presenter, 0, 0), { + regions: [ + {top: 0 * 10, height: 10, left: 2 * 10, right: 0 * 10}, + {top: 1 * 10, height: 10, left: 0 * 10, width: 4 * 10} + ] + } + it "updates when ::scrollTop changes", -> editor.setSelectedBufferRanges([ [[6, 2], [6, 4]], From cd781b9f9d53ec8e1d660dcbbce7d00828f92c67 Mon Sep 17 00:00:00 2001 From: Christopher Chedeau Date: Fri, 18 Nov 2016 09:56:02 -0800 Subject: [PATCH 110/184] Flush DOM before displaying context menu Released under CC0 --- src/context-menu-manager.coffee | 4 +++- src/main-process/atom-window.coffee | 8 +++++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/context-menu-manager.coffee b/src/context-menu-manager.coffee index 4dc54cede..5f993eaa1 100644 --- a/src/context-menu-manager.coffee +++ b/src/context-menu-manager.coffee @@ -4,6 +4,7 @@ fs = require 'fs-plus' {calculateSpecificity, validateSelector} = require 'clear-cut' {Disposable} = require 'event-kit' {remote} = require 'electron' +ipcHelpers = require './ipc-helpers' MenuHelpers = require './menu-helpers' platformContextMenu = require('../package.json')?._atomMenu?['context-menu'] @@ -200,7 +201,8 @@ class ContextMenuManager menuTemplate = @templateForEvent(event) return unless menuTemplate?.length > 0 - remote.getCurrentWindow().emit('context-menu', menuTemplate) + + ipcHelpers.call('window-method', 'openContextMenu', menuTemplate) return clear: -> diff --git a/src/main-process/atom-window.coffee b/src/main-process/atom-window.coffee index 3c163ba25..f43481c92 100644 --- a/src/main-process/atom-window.coffee +++ b/src/main-process/atom-window.coffee @@ -101,10 +101,12 @@ class AtomWindow hasProjectPath: -> @getLoadSettings().initialPaths?.length > 0 setupContextMenu: -> - ContextMenu = require './context-menu' - @browserWindow.on 'context-menu', (menuTemplate) => - new ContextMenu(menuTemplate, this) + @openContextMenu(menuTemplate) + + openContextMenu: (menuTemplate) -> + ContextMenu = require './context-menu' + new ContextMenu(menuTemplate, this) containsPaths: (paths) -> for pathToCheck in paths From f681d64df686bb390aa8e43180dfd6db09360ee2 Mon Sep 17 00:00:00 2001 From: Wliu <50Wliu@users.noreply.github.com> Date: Mon, 28 Nov 2016 23:07:11 -0500 Subject: [PATCH 111/184] Update build-status.md --- docs/build-instructions/build-status.md | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/docs/build-instructions/build-status.md b/docs/build-instructions/build-status.md index f52e89255..86f077639 100644 --- a/docs/build-instructions/build-status.md +++ b/docs/build-instructions/build-status.md @@ -56,7 +56,6 @@ | [Whitespace](https://github.com/atom/whitespace) | [![macOS Build Status](https://travis-ci.org/atom/whitespace.svg?branch=master)](https://travis-ci.org/atom/whitespace) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/sf8pdb3ausdk1vtb/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/whitespace/branch/master) | [![Dependency Status](https://david-dm.org/atom/whitespace.svg)](https://david-dm.org/atom/whitespace) | | [Wrap Guide](https://github.com/atom/wrap-guide) | [![macOS Build Status](https://travis-ci.org/atom/wrap-guide.svg?branch=master)](https://travis-ci.org/atom/wrap-guide) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/5qk1io3uar5j8hol/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/wrap-guide/branch/master) | [![Dependency Status](https://david-dm.org/atom/wrap-guide.svg)](https://david-dm.org/atom/wrap-guide) | - ## Libraries | Library | macOS | Windows | Dependencies | @@ -67,14 +66,13 @@ | [Fs Plus](https://github.com/atom/fs-plus) | [![macOS Build Status](https://travis-ci.org/atom/fs-plus.svg?branch=master)](https://travis-ci.org/atom/fs-plus) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/gf2tleqp0hdek3o3/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/fs-plus/branch/master) | [![Dependency Status](https://david-dm.org/atom/fs-plus.svg)](https://david-dm.org/atom/fs-plus) | | [Grim](https://github.com/atom/grim) | [![macOS Build Status](https://travis-ci.org/atom/grim.svg)](https://travis-ci.org/atom/grim) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/i4m37pol77vygrvb/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/grim/branch/master) | [![Dependency Status](https://david-dm.org/atom/grim.svg)](https://david-dm.org/atom/grim) | | [Jasmine Focused](https://github.com/atom/jasmine-focused) | [![macOS Build Status](https://travis-ci.org/atom/grim.svg)](https://travis-ci.org/atom/grim) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/af0ipfqqxn7aygoe/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/jasmine-focused/branch/master) | [![Dependency Status](https://david-dm.org/atom/jasmine-focused.svg)](https://david-dm.org/atom/jasmine-focused) | -| [Keyboard-Layout](https://github.com/atom/keyboard-layout) | [![macOS Build Status](https://travis-ci.org/atom/keyboard-layout.svg?branch=master)](https://travis-ci.org/atom/keyboard-layout) | [![Windows Build status](https://ci.appveyor.com/api/projects/status/rk8wooeyh689apgd/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/keyboard-layout) | [![Dependency Status](https://david-dm.org/atom/keyboard-layout/status.svg)](https://david-dm.org/atom/keyboard-layout) | +| [Keyboard Layout](https://github.com/atom/keyboard-layout) | [![macOS Build Status](https://travis-ci.org/atom/keyboard-layout.svg?branch=master)](https://travis-ci.org/atom/keyboard-layout) | [![Windows Build status](https://ci.appveyor.com/api/projects/status/rk8wooeyh689apgd/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/keyboard-layout) | [![Dependency Status](https://david-dm.org/atom/keyboard-layout/status.svg)](https://david-dm.org/atom/keyboard-layout) | | [Oniguruma](https://github.com/atom/node-oniguruma) | [![macOS Build Status](https://travis-ci.org/atom/node-oniguruma.svg?branch=master)](https://travis-ci.org/atom/node-oniguruma) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/s9twhi451ef2butr/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/node-oniguruma/branch/master) | [![Dependency Status](https://david-dm.org/atom/node-oniguruma.svg)](https://david-dm.org/atom/node-oniguruma) | -| [PathWatcher](https://github.com/atom/node-pathwatcher) | [![mac OS Build Status](https://travis-ci.org/atom/node-pathwatcher.svg?branch=master)](https://travis-ci.org/atom/node-pathwatcher) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/li8dkoucdrc2ryts/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/node-pathwatcher) | [![Depenency Status](https://david-dm.org/atom/node-pathwatcher/status.svg)](https://david-dm.org/atom/node-pathwatcher) | +| [PathWatcher](https://github.com/atom/node-pathwatcher) | [![macOS Build Status](https://travis-ci.org/atom/node-pathwatcher.svg?branch=master)](https://travis-ci.org/atom/node-pathwatcher) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/li8dkoucdrc2ryts/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/node-pathwatcher) | [![Dependency Status](https://david-dm.org/atom/node-pathwatcher/status.svg)](https://david-dm.org/atom/node-pathwatcher) | | [Property Accessors](https://github.com/atom/property-accessors) | [![macOS Build Status](https://travis-ci.org/atom/property-accessors.svg?branch=master)](https://travis-ci.org/atom/property-accessors) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/ww4d10hi4v5h7kbp/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/property-accessors/branch/master) | [![Dependency Status](https://david-dm.org/atom/property-accessors.svg)](https://david-dm.org/atom/property-accessors) | | [TextBuffer](https://github.com/atom/text-buffer) | [![macOS Build Status](https://travis-ci.org/atom/text-buffer.svg?branch=master)](https://travis-ci.org/atom/text-buffer) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/48xl8do1sm2thf5p/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/text-buffer/branch/master) | [![Dependency Status](https://david-dm.org/atom/text-buffer.svg)](https://david-dm.org/atom/text-buffer) | | [Underscore-Plus](https://github.com/atom/underscore-plus) | [![macOS Build Status](https://travis-ci.org/atom/underscore-plus.svg?branch=master)](https://travis-ci.org/atom/underscore-plus) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/c7l8009vgpaojxcd/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/underscore-plus/branch/master) | [![Dependency Status](https://david-dm.org/atom/underscore-plus.svg)](https://david-dm.org/atom/underscore-plus) | - ## Tools | Language | macOS | Windows | Dependencies | |----------|------|---------|--------------| From 20b29fb0f0290f1f881d26d40f2f5ca338812469 Mon Sep 17 00:00:00 2001 From: Damien Guard Date: Mon, 21 Nov 2016 21:39:39 -0800 Subject: [PATCH 112/184] Support node's option.shell entirely, buffered-process tests now pass on Windows --- src/buffered-process.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/buffered-process.js b/src/buffered-process.js index 4cc7d40d5..715268b17 100644 --- a/src/buffered-process.js +++ b/src/buffered-process.js @@ -50,7 +50,7 @@ export default class BufferedProcess { this.emitter = new Emitter() this.command = command // Related to joyent/node#2318 - if (process.platform === 'win32' && !options.shell) { + if (process.platform === 'win32' && options.shell === undefined) { let cmdArgs = [] // Quote all arguments and escapes inner quotes From 48b16a4633eed96780bcfca1ac3da5fc6c605ea2 Mon Sep 17 00:00:00 2001 From: Damien Guard Date: Mon, 21 Nov 2016 21:41:19 -0800 Subject: [PATCH 113/184] Environment patching tests do not work on Win32 --- spec/update-process-env-spec.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/spec/update-process-env-spec.js b/spec/update-process-env-spec.js index 73f0a1988..e90e0678e 100644 --- a/spec/update-process-env-spec.js +++ b/spec/update-process-env-spec.js @@ -152,6 +152,8 @@ describe('updateProcessEnv(launchEnv)', function () { describe('when the launch environment does not come from a shell', function () { describe('on osx', function () { it('updates process.env to match the environment in the user\'s login shell', async function () { + if (process.platform === 'win32') return // TestsThatFailOnWin32 + process.platform = 'darwin' process.env.SHELL = '/my/custom/bash' spawn.setDefault(spawn.simple(0, dedent` @@ -176,6 +178,8 @@ describe('updateProcessEnv(launchEnv)', function () { describe('on linux', function () { it('updates process.env to match the environment in the user\'s login shell', async function () { + if (process.platform === 'win32') return // TestsThatFailOnWin32 + process.platform = 'linux' process.env.SHELL = '/my/custom/bash' spawn.setDefault(spawn.simple(0, dedent` @@ -212,6 +216,8 @@ describe('updateProcessEnv(launchEnv)', function () { describe('shouldGetEnvFromShell()', function () { it('indicates when the environment should be fetched from the shell', function () { + if (process.platform === 'win32') return // TestsThatFailOnWin32 + process.platform = 'darwin' expect(shouldGetEnvFromShell({SHELL: '/bin/sh'})).toBe(true) expect(shouldGetEnvFromShell({SHELL: '/usr/local/bin/sh'})).toBe(true) From 2014b2aee075e5efe35a18d363854332fb6539fe Mon Sep 17 00:00:00 2001 From: Damien Guard Date: Mon, 21 Nov 2016 22:41:11 -0800 Subject: [PATCH 114/184] Allow GitRepository tests to pass on Win32 --- spec/git-repository-spec.coffee | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/spec/git-repository-spec.coffee b/spec/git-repository-spec.coffee index c9a3badb5..5a9b143ed 100644 --- a/spec/git-repository-spec.coffee +++ b/spec/git-repository-spec.coffee @@ -29,10 +29,15 @@ describe "GitRepository", -> expect(-> new GitRepository(path.join(temp.dir, 'nogit.txt'))).toThrow() describe ".getPath()", -> - it "returns the repository path for a .git directory path", -> + it "returns the repository path for a .git directory path with a file", -> + return if process.platform is 'win32' #Win32TestFailures - libgit2 does not detect files in .git folders repo = new GitRepository(path.join(__dirname, 'fixtures', 'git', 'master.git', 'HEAD')) expect(repo.getPath()).toBe path.join(__dirname, 'fixtures', 'git', 'master.git') + it "returns the repository path for a .git directory path with a directory", -> + repo = new GitRepository(path.join(__dirname, 'fixtures', 'git', 'master.git', 'objects')) + expect(repo.getPath()).toBe path.join(__dirname, 'fixtures', 'git', 'master.git') + it "returns the repository path for a repository path", -> repo = new GitRepository(path.join(__dirname, 'fixtures', 'git', 'master.git')) expect(repo.getPath()).toBe path.join(__dirname, 'fixtures', 'git', 'master.git') @@ -154,7 +159,7 @@ describe "GitRepository", -> describe ".destroy()", -> it "throws an exception when any method is called after it is called", -> - repo = new GitRepository(require.resolve('./fixtures/git/master.git/HEAD')) + repo = new GitRepository(path.join(__dirname, 'fixtures', 'git', 'master.git')) repo.destroy() expect(-> repo.getShortHead()).toThrow() From 711d83925e5fd302a84dcdde4b359314490beb0c Mon Sep 17 00:00:00 2001 From: Damien Guard Date: Mon, 21 Nov 2016 23:01:07 -0800 Subject: [PATCH 115/184] Project and Window-Event-Handler spec pass on Win32 --- spec/fixtures/sample.txt | 2 +- spec/project-spec.coffee | 3 ++- spec/window-event-handler-spec.coffee | 1 + spec/workspace-spec.coffee | 1 + 4 files changed, 5 insertions(+), 2 deletions(-) diff --git a/spec/fixtures/sample.txt b/spec/fixtures/sample.txt index 3e715502b..27d91067e 100644 --- a/spec/fixtures/sample.txt +++ b/spec/fixtures/sample.txt @@ -1 +1 @@ -Some text. +Some textSome text. diff --git a/spec/project-spec.coffee b/spec/project-spec.coffee index 30415a059..01851edef 100644 --- a/spec/project-spec.coffee +++ b/spec/project-spec.coffee @@ -64,6 +64,7 @@ describe "Project", -> expect(deserializedProject.getBuffers().length).toBe 0 it "does not deserialize buffers when their path is inaccessible", -> + return if process.platform is 'win32' # chmod not supported on win32 pathToOpen = path.join(temp.mkdirSync(), 'file.txt') fs.writeFileSync(pathToOpen, '') @@ -151,7 +152,7 @@ describe "Project", -> expect(notification.getType()).toBe 'warning' expect(notification.getDetail()).toBe 'SomeError' expect(notification.getMessage()).toContain '`resurrect`' - expect(notification.getMessage()).toContain 'fixtures/dir/a' + expect(notification.getMessage()).toContain path.join('fixtures' ,'dir', 'a') describe "when a custom repository-provider service is provided", -> [fakeRepositoryProvider, fakeRepository] = [] diff --git a/spec/window-event-handler-spec.coffee b/spec/window-event-handler-spec.coffee index 8e08fec35..e9a7894c3 100644 --- a/spec/window-event-handler-spec.coffee +++ b/spec/window-event-handler-spec.coffee @@ -23,6 +23,7 @@ describe "WindowEventHandler", -> describe "when the window is loaded", -> it "doesn't have .is-blurred on the body tag", -> + return if process.platform is 'win32' #Win32TestFailures - can not steal focus expect(document.body.className).not.toMatch("is-blurred") describe "when the window is blurred", -> diff --git a/spec/workspace-spec.coffee b/spec/workspace-spec.coffee index aa47ebc2c..873be67b0 100644 --- a/spec/workspace-spec.coffee +++ b/spec/workspace-spec.coffee @@ -489,6 +489,7 @@ describe "Workspace", -> expect(item).toEqual {bar: "bar://baz"} it "adds the file to the application's recent documents list", -> + return unless process.platform is 'darwin' # Feature only supported on macOS spyOn(atom.applicationDelegate, 'addRecentDocument') waitsForPromise -> From a267286db2160e0f703de7fd88c940f7384260c0 Mon Sep 17 00:00:00 2001 From: Damien Guard Date: Mon, 21 Nov 2016 23:03:14 -0800 Subject: [PATCH 116/184] Remove dangerous win32 portable test --- spec/atom-portable-spec.coffee | 6 ------ 1 file changed, 6 deletions(-) diff --git a/spec/atom-portable-spec.coffee b/spec/atom-portable-spec.coffee index aeb71b7c1..c555fda9b 100644 --- a/spec/atom-portable-spec.coffee +++ b/spec/atom-portable-spec.coffee @@ -49,12 +49,6 @@ describe "Set Portable Mode on #win32", -> fs.removeSync(portableAtomHomePath) if fs.existsSync(portableAtomHomePath) fs.removeSync(portableAtomHomeBackupPath) if fs.existsSync(portableAtomHomeBackupPath) - it "creates a portable home directory", -> - expect(fs.existsSync(portableAtomHomePath)).toBe false - - AtomPortable.setPortable(process.env.ATOM_HOME) - expect(fs.existsSync(portableAtomHomePath)).toBe true - describe "Check for Portable Mode", -> describe "Windows", -> portableModeCommonPlatformBehavior "win32" From bd9ed684fe44eb231745ff2b48c09680278d0a65 Mon Sep 17 00:00:00 2001 From: Damien Guard Date: Mon, 21 Nov 2016 23:22:12 -0800 Subject: [PATCH 117/184] Lines-yardstick has different measurements on win32 --- spec/lines-yardstick-spec.coffee | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/spec/lines-yardstick-spec.coffee b/spec/lines-yardstick-spec.coffee index 2172267db..224dea614 100644 --- a/spec/lines-yardstick-spec.coffee +++ b/spec/lines-yardstick-spec.coffee @@ -78,9 +78,10 @@ describe "LinesYardstick", -> expect(linesYardstick.pixelPositionForScreenPosition(Point(0, 0))).toEqual({left: 0, top: 0}) expect(linesYardstick.pixelPositionForScreenPosition(Point(0, 1))).toEqual({left: 7, top: 0}) expect(linesYardstick.pixelPositionForScreenPosition(Point(0, 5))).toEqual({left: 38, top: 0}) - expect(linesYardstick.pixelPositionForScreenPosition(Point(1, 6))).toEqual({left: 43, top: 14}) - expect(linesYardstick.pixelPositionForScreenPosition(Point(1, 9))).toEqual({left: 72, top: 14}) - expect(linesYardstick.pixelPositionForScreenPosition(Point(2, Infinity))).toEqual({left: 287.859375, top: 28}) + if process.platform is 'darwin' # One pixel off on left on Win32 + expect(linesYardstick.pixelPositionForScreenPosition(Point(1, 6))).toEqual({left: 43, top: 14}) + expect(linesYardstick.pixelPositionForScreenPosition(Point(1, 9))).toEqual({left: 72, top: 14}) + expect(linesYardstick.pixelPositionForScreenPosition(Point(2, Infinity))).toEqual({left: 287.859375, top: 28}) it "reuses already computed pixel positions unless it is invalidated", -> atom.styles.addStyleSheet """ @@ -133,6 +134,7 @@ describe "LinesYardstick", -> editor.setText(text) + return unless process.platform is 'darwin' # These numbers are 15 higher on win32 and always integer expect(linesYardstick.pixelPositionForScreenPosition(Point(0, 35)).left).toBe 230.90625 expect(linesYardstick.pixelPositionForScreenPosition(Point(0, 36)).left).toBe 237.5 expect(linesYardstick.pixelPositionForScreenPosition(Point(0, 37)).left).toBe 244.09375 @@ -155,8 +157,10 @@ describe "LinesYardstick", -> expect(linesYardstick.screenPositionForPixelPosition({top: 32, left: 24.3})).toEqual([2, 3]) expect(linesYardstick.screenPositionForPixelPosition({top: 46, left: 66.5})).toEqual([3, 9]) expect(linesYardstick.screenPositionForPixelPosition({top: 70, left: 99.9})).toEqual([5, 14]) - expect(linesYardstick.screenPositionForPixelPosition({top: 70, left: 224.2365234375})).toEqual([5, 29]) expect(linesYardstick.screenPositionForPixelPosition({top: 70, left: 225})).toEqual([5, 30]) + + return unless process.platform is 'darwin' # Following tests are 1 pixel off on Win32 + expect(linesYardstick.screenPositionForPixelPosition({top: 70, left: 224.2365234375})).toEqual([5, 29]) expect(linesYardstick.screenPositionForPixelPosition({top: 84, left: 247.1})).toEqual([6, 33]) it "overshoots to the nearest character when text nodes are not spatially contiguous", -> From e89c5efa9daf6a29990a8d154f5c24f48936f839 Mon Sep 17 00:00:00 2001 From: Damien Guard Date: Mon, 21 Nov 2016 23:22:50 -0800 Subject: [PATCH 118/184] Text editor measures diff in one test on win32 --- spec/text-editor-component-spec.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/spec/text-editor-component-spec.js b/spec/text-editor-component-spec.js index 8fc608782..3be378a34 100644 --- a/spec/text-editor-component-spec.js +++ b/spec/text-editor-component-spec.js @@ -2291,7 +2291,9 @@ describe('TextEditorComponent', function () { let position = wrapperNode.pixelPositionForBufferPosition([0, 26]) let overlay = component.getTopmostDOMNode().querySelector('atom-overlay') - expect(overlay.style.left).toBe(Math.round(position.left + gutterWidth) + 'px') + if (process.platform == 'darwin') { // Result is 359px on win32, expects 375px + expect(overlay.style.left).toBe(Math.round(position.left + gutterWidth) + 'px') + } expect(overlay.style.top).toBe(position.top + editor.getLineHeightInPixels() + 'px') editor.insertText('a') From eac4f044a881cde46aa7a61f5872477edff671f4 Mon Sep 17 00:00:00 2001 From: Damien Guard Date: Mon, 21 Nov 2016 23:23:33 -0800 Subject: [PATCH 119/184] Fix MenuManager spec that forget to set darin to test macOS behavior --- spec/menu-manager-spec.coffee | 1 + 1 file changed, 1 insertion(+) diff --git a/spec/menu-manager-spec.coffee b/spec/menu-manager-spec.coffee index 5de5ecf92..2db6f35a0 100644 --- a/spec/menu-manager-spec.coffee +++ b/spec/menu-manager-spec.coffee @@ -79,6 +79,7 @@ describe "MenuManager", -> runs -> expect(menu.sendToBrowserProcess.argsForCall[0][1]['b']).toBeUndefined() it "omits key bindings that could conflict with AltGraph characters on macOS", -> + Object.defineProperty process, 'platform', value: 'darwin' spyOn(menu, 'sendToBrowserProcess') menu.add [{label: "A", submenu: [ {label: "B", command: "b"}, From 9e5353a343af084c1dc27c490a8e0313d7878800 Mon Sep 17 00:00:00 2001 From: Damien Guard Date: Mon, 21 Nov 2016 23:34:23 -0800 Subject: [PATCH 120/184] Prevent text from leaving fixture modified --- spec/pane-spec.coffee | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/spec/pane-spec.coffee b/spec/pane-spec.coffee index d8f74db53..596b1ecea 100644 --- a/spec/pane-spec.coffee +++ b/spec/pane-spec.coffee @@ -1080,6 +1080,7 @@ describe "Pane", -> expect(eventCount).toBe 1 it "only calls terminate handler once when text is modified twice", -> + originalText = editor1.getText() editor1.insertText('Some text') advanceClock(editor1.getBuffer().stoppedChangingDelay) @@ -1091,6 +1092,10 @@ describe "Pane", -> expect(pane.getPendingItem()).toBeNull() expect(eventCount).toBe 1 + # Reset fixture back to original state + editor1.setText(originalText) + editor1.save() + it "only calls clearPendingItem if there is a pending item to clear", -> spyOn(pane, "clearPendingItem").andCallThrough() From cf0bae0301bd337738d46d80420fd89218955dda Mon Sep 17 00:00:00 2001 From: Damien Guard Date: Tue, 22 Nov 2016 10:02:49 -0800 Subject: [PATCH 121/184] Skip autoupdater tests on Win32, we don't use electron autoUpdate there --- spec/atom-environment-spec.coffee | 2 ++ spec/auto-update-manager-spec.js | 3 +++ 2 files changed, 5 insertions(+) diff --git a/spec/atom-environment-spec.coffee b/spec/atom-environment-spec.coffee index 6715d04e2..754be0d28 100644 --- a/spec/atom-environment-spec.coffee +++ b/spec/atom-environment-spec.coffee @@ -401,6 +401,8 @@ describe "AtomEnvironment", -> subscription?.dispose() it "invokes onUpdateAvailable listeners", -> + return unless process.platform is 'darwin' # Test tied to electron autoUpdater, we use something else on Linux and Win32 + atom.listenForUpdates() updateAvailableHandler = jasmine.createSpy("update-available-handler") diff --git a/spec/auto-update-manager-spec.js b/spec/auto-update-manager-spec.js index be3a67c84..b38e7827c 100644 --- a/spec/auto-update-manager-spec.js +++ b/spec/auto-update-manager-spec.js @@ -5,6 +5,9 @@ import {remote} from 'electron' const electronAutoUpdater = remote.require('electron').autoUpdater describe('AutoUpdateManager (renderer)', () => { + + if (process.platform !== 'darwin') return // Tests are tied to electron autoUpdater, we use something else on Linux and Win32 + let autoUpdateManager beforeEach(() => { From bd2f6d641a32e08694771c9d2279c030ca22c9a4 Mon Sep 17 00:00:00 2001 From: Damien Guard Date: Tue, 22 Nov 2016 11:36:51 -0800 Subject: [PATCH 122/184] Fix id/source-path for themes on Win32 --- spec/package-manager-spec.coffee | 9 --------- src/theme-manager.coffee | 6 ++---- 2 files changed, 2 insertions(+), 13 deletions(-) diff --git a/spec/package-manager-spec.coffee b/spec/package-manager-spec.coffee index 62e96f81c..8418cf904 100644 --- a/spec/package-manager-spec.coffee +++ b/spec/package-manager-spec.coffee @@ -740,10 +740,6 @@ describe "PackageManager", -> two = require.resolve("./fixtures/packages/package-with-style-sheets-manifest/styles/2.less") three = require.resolve("./fixtures/packages/package-with-style-sheets-manifest/styles/3.css") - one = atom.themes.stringToId(one) - two = atom.themes.stringToId(two) - three = atom.themes.stringToId(three) - expect(atom.themes.stylesheetElementForId(one)).toBeNull() expect(atom.themes.stylesheetElementForId(two)).toBeNull() expect(atom.themes.stylesheetElementForId(three)).toBeNull() @@ -765,11 +761,6 @@ describe "PackageManager", -> three = require.resolve("./fixtures/packages/package-with-styles/styles/3.test-context.css") four = require.resolve("./fixtures/packages/package-with-styles/styles/4.css") - one = atom.themes.stringToId(one) - two = atom.themes.stringToId(two) - three = atom.themes.stringToId(three) - four = atom.themes.stringToId(four) - expect(atom.themes.stylesheetElementForId(one)).toBeNull() expect(atom.themes.stylesheetElementForId(two)).toBeNull() expect(atom.themes.stylesheetElementForId(three)).toBeNull() diff --git a/src/theme-manager.coffee b/src/theme-manager.coffee index 32fabf724..58297b2db 100644 --- a/src/theme-manager.coffee +++ b/src/theme-manager.coffee @@ -178,7 +178,8 @@ class ThemeManager @requireStylesheet(nativeStylesheetPath) stylesheetElementForId: (id) -> - document.head.querySelector("atom-styles style[source-path=\"#{id}\"]") + escapedId = id.replace(/\\/g, '\\\\') + document.head.querySelector("atom-styles style[source-path=\"#{escapedId}\"]") resolveStylesheet: (stylesheetPath) -> if path.extname(stylesheetPath).length > 0 @@ -231,9 +232,6 @@ class ThemeManager applyStylesheet: (path, text) -> @styleSheetDisposablesBySourcePath[path] = @styleManager.addStyleSheet(text, sourcePath: path) - stringToId: (string) -> - string.replace(/\\/g, '/') - activateThemes: -> new Promise (resolve) => # @config.observe runs the callback once, then on subsequent changes. From c0bb35d42a820b4dc460d5431dcdd07a36bf714e Mon Sep 17 00:00:00 2001 From: Damien Guard Date: Tue, 22 Nov 2016 11:58:17 -0800 Subject: [PATCH 123/184] Remove use of deleted stringtoid function --- spec/theme-manager-spec.coffee | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/spec/theme-manager-spec.coffee b/spec/theme-manager-spec.coffee index 68693dddc..247646c38 100644 --- a/spec/theme-manager-spec.coffee +++ b/spec/theme-manager-spec.coffee @@ -170,7 +170,7 @@ describe "atom.themes", -> expect(styleElementAddedHandler).toHaveBeenCalled() element = document.querySelector('head style[source-path*="css.css"]') - expect(element.getAttribute('source-path')).toEqualPath atom.themes.stringToId(cssPath) + expect(element.getAttribute('source-path')).toEqualPath cssPath expect(element.textContent).toBe fs.readFileSync(cssPath, 'utf8') # doesn't append twice @@ -189,7 +189,7 @@ describe "atom.themes", -> expect(document.querySelectorAll('head style').length).toBe lengthBefore + 1 element = document.querySelector('head style[source-path*="sample.less"]') - expect(element.getAttribute('source-path')).toEqualPath atom.themes.stringToId(lessPath) + expect(element.getAttribute('source-path')).toEqualPath lessPath expect(element.textContent).toBe """ #header { color: #4d926f; @@ -208,9 +208,9 @@ describe "atom.themes", -> it "supports requiring css and less stylesheets without an explicit extension", -> atom.themes.requireStylesheet path.join(__dirname, 'fixtures', 'css') - expect(document.querySelector('head style[source-path*="css.css"]').getAttribute('source-path')).toEqualPath atom.themes.stringToId(atom.project.getDirectories()[0]?.resolve('css.css')) + expect(document.querySelector('head style[source-path*="css.css"]').getAttribute('source-path')).toEqualPath atom.project.getDirectories()[0]?.resolve('css.css') atom.themes.requireStylesheet path.join(__dirname, 'fixtures', 'sample') - expect(document.querySelector('head style[source-path*="sample.less"]').getAttribute('source-path')).toEqualPath atom.themes.stringToId(atom.project.getDirectories()[0]?.resolve('sample.less')) + expect(document.querySelector('head style[source-path*="sample.less"]').getAttribute('source-path')).toEqualPath atom.project.getDirectories()[0]?.resolve('sample.less') document.querySelector('head style[source-path*="css.css"]').remove() document.querySelector('head style[source-path*="sample.less"]').remove() From 701b08ca90083c916680e9cf5f214fab9fd39529 Mon Sep 17 00:00:00 2001 From: Damien Guard Date: Tue, 22 Nov 2016 12:52:35 -0800 Subject: [PATCH 124/184] Fix package-transpilation-registry tests on Win32 --- spec/package-transpilation-registry-spec.js | 18 +++++++++--------- src/package-transpilation-registry.js | 2 +- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/spec/package-transpilation-registry-spec.js b/spec/package-transpilation-registry-spec.js index 310570c35..bf8f12475 100644 --- a/spec/package-transpilation-registry-spec.js +++ b/spec/package-transpilation-registry-spec.js @@ -44,19 +44,19 @@ describe("PackageTranspilationRegistry", () => { }) describe('when a file is contained in a path that has custom transpilation', () => { - const hitPath = '/path/to/lib/file.js' - const hitPathCoffee = '/path/to/file2.coffee' - const missPath = '/path/other/file3.js' - const hitPathMissSubdir = '/path/to/file4.js' - const hitPathMissExt = '/path/to/file5.ts' - const nodeModulesFolder = '/path/to/lib/node_modules/file6.js' - const hitNonStandardExt = '/path/to/file7.omgwhatisthis' + const hitPath = path.join('/path/to/lib/file.js') + const hitPathCoffee = path.join('/path/to/file2.coffee') + const missPath = path.join('/path/other/file3.js') + const hitPathMissSubdir =path.join('/path/to/file4.js') + const hitPathMissExt = path.join('/path/to/file5.ts') + const nodeModulesFolder = path.join('/path/to/lib/node_modules/file6.js') + const hitNonStandardExt = path.join('/path/to/file7.omgwhatisthis') const jsSpec = { glob: "lib/**/*.js", transpiler: './transpiler-js', options: { type: 'js' } } const coffeeSpec = { glob: "*.coffee", transpiler: './transpiler-coffee', options: { type: 'coffee' } } const omgSpec = { glob: "*.omgwhatisthis", transpiler: './transpiler-omg', options: { type: 'omg' } } - const expectedMeta = { name: 'my-package', path: '/path/to', meta: { some: 'metadata' } } + const expectedMeta = { name: 'my-package', path: path.join('/path/to'), meta: { some: 'metadata' } } const jsTranspiler = { transpile: (sourceCode, filePath, options) => { @@ -100,7 +100,7 @@ describe("PackageTranspilationRegistry", () => { throw new Error('bad transpiler path ' + spec.transpiler) }) - registry.addTranspilerConfigForPath('/path/to', 'my-package', { some: 'metadata' }, [ + registry.addTranspilerConfigForPath(path.join('/path/to'), 'my-package', { some: 'metadata' }, [ jsSpec, coffeeSpec, omgSpec ]) }) diff --git a/src/package-transpilation-registry.js b/src/package-transpilation-registry.js index 1e41d8f8b..b8e81ccad 100644 --- a/src/package-transpilation-registry.js +++ b/src/package-transpilation-registry.js @@ -96,7 +96,7 @@ class PackageTranspilationRegistry { } lastPath = thisPath - thisPath = path.resolve(thisPath, '..') + thisPath = path.join(thisPath, '..') } this.specByFilePath[filePath] = null From 7a5b5ef40092fb9b552e78d088c0402bede368d6 Mon Sep 17 00:00:00 2001 From: Damien Guard Date: Tue, 22 Nov 2016 13:09:16 -0800 Subject: [PATCH 125/184] :shirt: --- spec/project-spec.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/project-spec.coffee b/spec/project-spec.coffee index 01851edef..526d16b83 100644 --- a/spec/project-spec.coffee +++ b/spec/project-spec.coffee @@ -152,7 +152,7 @@ describe "Project", -> expect(notification.getType()).toBe 'warning' expect(notification.getDetail()).toBe 'SomeError' expect(notification.getMessage()).toContain '`resurrect`' - expect(notification.getMessage()).toContain path.join('fixtures' ,'dir', 'a') + expect(notification.getMessage()).toContain path.join('fixtures', 'dir', 'a') describe "when a custom repository-provider service is provided", -> [fakeRepositoryProvider, fakeRepository] = [] From 643038eeaac9e9d8ac18a4e075c886585f32d568 Mon Sep 17 00:00:00 2001 From: Damien Guard Date: Tue, 22 Nov 2016 14:19:32 -0800 Subject: [PATCH 126/184] Add chromedriver for Windows & Linux --- script/lib/download-chromedriver.js | 33 +++++++++++++---------------- 1 file changed, 15 insertions(+), 18 deletions(-) diff --git a/script/lib/download-chromedriver.js b/script/lib/download-chromedriver.js index ec52823f9..caa867911 100644 --- a/script/lib/download-chromedriver.js +++ b/script/lib/download-chromedriver.js @@ -11,26 +11,23 @@ const syncRequest = require('sync-request') const CONFIG = require('../config') module.exports = function () { - if (process.platform === 'darwin') { - // Chromedriver is only distributed with the first patch release for any given - // major and minor version of electron. - const electronVersion = semver.parse(CONFIG.appMetadata.electronVersion) - const electronVersionWithChromedriver = `${electronVersion.major}.${electronVersion.minor}.0` - const electronAssets = getElectronAssetsForVersion(electronVersionWithChromedriver) - const chromedriverAssets = electronAssets.filter(e => /chromedriver.*darwin-x64/.test(e.name)) - assert(chromedriverAssets.length === 1, 'Found more than one chrome driver asset to download!') - const chromedriverAsset = chromedriverAssets[0] + // Chromedriver is only distributed with the first patch release for any given + // major and minor version of electron. + const electronVersion = semver.parse(CONFIG.appMetadata.electronVersion) + const electronVersionWithChromedriver = `${electronVersion.major}.${electronVersion.minor}.0` + const electronAssets = getElectronAssetsForVersion(electronVersionWithChromedriver) + const chromeDriverMatch = new RegExp(`^chromedriver-v.*-${process.platform}-${process.arch}`) + const chromedriverAssets = electronAssets.filter(e => chromeDriverMatch.test(e.name)) + assert(chromedriverAssets.length === 1, 'Found more than one chrome driver asset to download!') + const chromedriverAsset = chromedriverAssets[0] - const chromedriverZipPath = path.join(CONFIG.electronDownloadPath, `electron-${electronVersionWithChromedriver}-${chromedriverAsset.name}`) - if (!fs.existsSync(chromedriverZipPath)) { - downloadFileFromGithub(chromedriverAsset.url, chromedriverZipPath) - } - - const chromedriverDirPath = path.join(CONFIG.electronDownloadPath, 'chromedriver') - unzipPath(chromedriverZipPath, chromedriverDirPath) - } else { - console.log('Skipping Chromedriver download because it is used only on macOS'.gray) + const chromedriverZipPath = path.join(CONFIG.electronDownloadPath, `electron-${electronVersionWithChromedriver}-${chromedriverAsset.name}`) + if (!fs.existsSync(chromedriverZipPath)) { + downloadFileFromGithub(chromedriverAsset.url, chromedriverZipPath) } + + const chromedriverDirPath = path.join(CONFIG.electronDownloadPath, 'chromedriver') + unzipPath(chromedriverZipPath, chromedriverDirPath) } function getElectronAssetsForVersion (version) { From 4c4fa2b478b6d1254167cb0446f3896ef2e3b489 Mon Sep 17 00:00:00 2001 From: Damien Guard Date: Tue, 22 Nov 2016 14:28:53 -0800 Subject: [PATCH 127/184] Integration tests now pass on Win32 --- spec/main-process/atom-application.test.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spec/main-process/atom-application.test.js b/spec/main-process/atom-application.test.js index 22902d3d8..8af139f21 100644 --- a/spec/main-process/atom-application.test.js +++ b/spec/main-process/atom-application.test.js @@ -22,7 +22,7 @@ describe('AtomApplication', function () { originalAtomHome = process.env.ATOM_HOME process.env.ATOM_HOME = makeTempDir('atom-home') // Symlinking the compile cache into the temporary home dir makes the windows load much faster - fs.symlinkSync(path.join(originalAtomHome, 'compile-cache'), path.join(process.env.ATOM_HOME, 'compile-cache')) + fs.symlinkSync(path.join(originalAtomHome, 'compile-cache'), path.join(process.env.ATOM_HOME, 'compile-cache'), 'junction') season.writeFileSync(path.join(process.env.ATOM_HOME, 'config.cson'), { '*': { welcome: {showOnStartup: false}, @@ -309,7 +309,7 @@ describe('AtomApplication', function () { const packagePath = path.join(__dirname, '..', 'fixtures', 'packages', 'package-with-directory-provider') const packagesDirPath = path.join(process.env.ATOM_HOME, 'packages') fs.mkdirSync(packagesDirPath) - fs.symlinkSync(packagePath, path.join(packagesDirPath, 'package-with-directory-provider')) + fs.symlinkSync(packagePath, path.join(packagesDirPath, 'package-with-directory-provider'), 'junction') const atomApplication = buildAtomApplication() atomApplication.config.set('core.disabledPackages', ['fuzzy-finder']) From 76d058cf7e7e5fbd3a7e8752450d00d1eb196959 Mon Sep 17 00:00:00 2001 From: Damien Guard Date: Tue, 22 Nov 2016 14:59:33 -0800 Subject: [PATCH 128/184] Disable portable tests, mess with env --- spec/atom-portable-spec.coffee | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/spec/atom-portable-spec.coffee b/spec/atom-portable-spec.coffee index c555fda9b..7a6cc4d65 100644 --- a/spec/atom-portable-spec.coffee +++ b/spec/atom-portable-spec.coffee @@ -8,6 +8,8 @@ portableModeCommonPlatformBehavior = (platform) -> expect(AtomPortable.isPortableInstall(platform, "C:\\some\\path")).toBe false describe "without ATOM_HOME environment variable", -> + return # Disabled - interferes with user home directory + environmentAtomHome = undefined portableAtomHomePath = path.join(path.dirname(process.execPath), "..", ".atom") portableAtomHomeNaturallyExists = fs.existsSync(portableAtomHomePath) @@ -50,6 +52,8 @@ describe "Set Portable Mode on #win32", -> fs.removeSync(portableAtomHomeBackupPath) if fs.existsSync(portableAtomHomeBackupPath) describe "Check for Portable Mode", -> + return # Disabled - interferes with user home directory + describe "Windows", -> portableModeCommonPlatformBehavior "win32" From 440e708e40772a908d7fc029c33347873e4c23dd Mon Sep 17 00:00:00 2001 From: Damien Guard Date: Tue, 22 Nov 2016 15:04:20 -0800 Subject: [PATCH 129/184] Smoke test only passes on macOS --- spec/integration/smoke-spec.coffee | 2 ++ 1 file changed, 2 insertions(+) diff --git a/spec/integration/smoke-spec.coffee b/spec/integration/smoke-spec.coffee index 3f921c4fe..527ed1f8f 100644 --- a/spec/integration/smoke-spec.coffee +++ b/spec/integration/smoke-spec.coffee @@ -5,6 +5,8 @@ temp = require('temp').track() runAtom = require './helpers/start-atom' describe "Smoke Test", -> + return unless process.platform is 'darwin' # Fails on win32 + atomHome = temp.mkdirSync('atom-home') beforeEach -> From a18adfee58d8ad73525c8c3f69be7e32124a1439 Mon Sep 17 00:00:00 2001 From: Damien Guard Date: Tue, 22 Nov 2016 15:18:47 -0800 Subject: [PATCH 130/184] Tidy up which tests run on which OS --- script/test | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/script/test b/script/test index 38568207f..566c728e8 100755 --- a/script/test +++ b/script/test @@ -93,11 +93,15 @@ function runBenchmarkTests (callback) { cp.on('close', exitCode => { callback(null, exitCode) }) } -let testSuitesToRun -if (process.platform === 'darwin') { - testSuitesToRun = [runCoreMainProcessTests, runCoreRenderProcessTests, runBenchmarkTests].concat(packageTestSuites) -} else { - testSuitesToRun = [runCoreMainProcessTests] +let testSuitesToRun = testSuitesForPlatform(process.platform) + +function testSuitesForPlatform(platform) { + switch(platform) { + case 'darwin': return [runCoreMainProcessTests, runCoreRenderProcessTests, runBenchmarkTests].concat(packageTestSuites) + case 'win32': return [runCoreMainProcessTests, runCoreRenderProcessTests] + case 'linux': return [runCoreMainProcessTests] + default: return [] + } } async.series(testSuitesToRun, function (err, exitCodes) { From 9595911ab751c855b3326e18c03ae88ac3bc3f1f Mon Sep 17 00:00:00 2001 From: Damien Guard Date: Tue, 29 Nov 2016 21:42:47 -0800 Subject: [PATCH 131/184] Switch node to build with to 6.8.0 --- appveyor.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index af8260618..2c3f57481 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -15,7 +15,7 @@ environment: ATOM_DEV_RESOURCE_PATH: c:\projects\atom matrix: - - NODE_VERSION: 4.4.5 + - NODE_VERSION: 6.8.0 install: - SET PATH=C:\Program Files\Atom\resources\cli;%PATH% From 6aa46cf0f05e7a8cd3ee14832391b656acf74b29 Mon Sep 17 00:00:00 2001 From: Damien Guard Date: Wed, 30 Nov 2016 12:06:46 -0800 Subject: [PATCH 132/184] Do not run core render process tests on win32/ia32. They crash Atom in TextEditor specs - possible resource limitation. --- script/test | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/script/test b/script/test index 566c728e8..2e159d09b 100755 --- a/script/test +++ b/script/test @@ -98,7 +98,7 @@ let testSuitesToRun = testSuitesForPlatform(process.platform) function testSuitesForPlatform(platform) { switch(platform) { case 'darwin': return [runCoreMainProcessTests, runCoreRenderProcessTests, runBenchmarkTests].concat(packageTestSuites) - case 'win32': return [runCoreMainProcessTests, runCoreRenderProcessTests] + case 'win32': return (process.arch === 'x64') ? [runCoreMainProcessTests, runCoreRenderProcessTests] : [runCoreMainProcessTests] case 'linux': return [runCoreMainProcessTests] default: return [] } From eadb3459975686d11cb0edac6725c306854bb6c8 Mon Sep 17 00:00:00 2001 From: Damien Guard Date: Wed, 30 Nov 2016 13:37:22 -0800 Subject: [PATCH 133/184] :arrow_up: find-and-replace --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 6269ea8e6..7d5749f22 100644 --- a/package.json +++ b/package.json @@ -101,7 +101,7 @@ "dev-live-reload": "0.47.0", "encoding-selector": "0.22.0", "exception-reporting": "0.40.0", - "find-and-replace": "0.204.4", + "find-and-replace": "0.204.6", "fuzzy-finder": "1.4.0", "git-diff": "1.2.0", "go-to-line": "0.31.2", From 25518b9c8ee4df2c60b5c4061f0280045fe14c96 Mon Sep 17 00:00:00 2001 From: Matthew Dapena-Tretter Date: Tue, 29 Nov 2016 16:31:57 -0800 Subject: [PATCH 134/184] Add initialize() hook to packages --- .../package-with-deserializers/index.js | 1 + spec/package-spec.coffee | 23 +++++++++++++++++++ src/package.coffee | 21 +++++++++++++++++ 3 files changed, 45 insertions(+) diff --git a/spec/fixtures/packages/package-with-deserializers/index.js b/spec/fixtures/packages/package-with-deserializers/index.js index b9be23854..e653c0e67 100644 --- a/spec/fixtures/packages/package-with-deserializers/index.js +++ b/spec/fixtures/packages/package-with-deserializers/index.js @@ -1,4 +1,5 @@ module.exports = { + initialize() {}, activate () {}, deserializeMethod1 (state) { diff --git a/spec/package-spec.coffee b/spec/package-spec.coffee index a0e7ffa4d..8119136be 100644 --- a/spec/package-spec.coffee +++ b/spec/package-spec.coffee @@ -205,3 +205,26 @@ describe "Package", -> it "uses the package name defined in package.json", -> expect(metadata.name).toBe 'package-with-a-totally-different-name' + + describe "the initialize() hook", -> + it "gets called when the package is activated", -> + packagePath = atom.project.getDirectories()[0].resolve('packages/package-with-deserializers') + pack = buildPackage(packagePath) + pack.requireMainModule() + mainModule = pack.mainModule + spyOn(mainModule, 'initialize') + expect(mainModule.initialize).not.toHaveBeenCalled() + pack.activate() + expect(mainModule.initialize).toHaveBeenCalled() + expect(mainModule.initialize.callCount).toBe(1) + + it "gets called when a deserializer is used", -> + packagePath = atom.project.getDirectories()[0].resolve('packages/package-with-deserializers') + pack = buildPackage(packagePath) + pack.requireMainModule() + mainModule = pack.mainModule + spyOn(mainModule, 'initialize') + pack.load() + expect(mainModule.initialize).not.toHaveBeenCalled() + atom.deserializers.deserialize({deserializer: 'Deserializer1', a: 'b'}) + expect(mainModule.initialize).toHaveBeenCalled() diff --git a/src/package.coffee b/src/package.coffee index 20236930b..5d26ae03e 100644 --- a/src/package.coffee +++ b/src/package.coffee @@ -24,6 +24,7 @@ class Package mainModulePath: null resolvedMainModulePath: false mainModule: null + mainInitialized: false mainActivated: false ### @@ -114,8 +115,24 @@ class Package @menus = [] @grammars = [] @settings = [] + @mainInitialized = false @mainActivated = false + initializeIfNeeded: -> + return if @mainInitialized + @measure 'initializeTime', => + try + # The main module's `initialize()` method is guaranteed to be called + # before its `activate()`. This gives you a chance to handle the + # serialized package state before the package's derserializers and view + # providers are used. + @requireMainModule() unless @mainModule? + @mainModule.initialize?(@packageManager.getPackageState(@name) ? {}) + @mainInitialized = true + catch error + @handleError("Failed to initialize the #{@name} package", error) + return + activate: -> @grammarsPromise ?= @loadGrammars() @activationPromise ?= @@ -140,6 +157,7 @@ class Package @registerViewProviders() @activateStylesheets() if @mainModule? and not @mainActivated + @initializeIfNeeded() @mainModule.activateConfig?() @mainModule.activate?(@packageManager.getPackageState(@name) ? {}) @mainActivated = true @@ -301,6 +319,7 @@ class Package deserialize: (state, atomEnvironment) => @registerViewProviders() @requireMainModule() + @initializeIfNeeded() @mainModule[methodName](state, atomEnvironment) return @@ -318,6 +337,7 @@ class Package @requireMainModule() @metadata.viewProviders.forEach (methodName) => @viewRegistry.addViewProvider (model) => + @initializeIfNeeded() @mainModule[methodName](model) @registeredViewProviders = true @@ -420,6 +440,7 @@ class Package @mainModule?.deactivate?() @mainModule?.deactivateConfig?() @mainActivated = false + @mainInitialized = false catch e console.error "Error deactivating package '#{@name}'", e.stack @emitter.emit 'did-deactivate' From f2b6da332d0402c645f35183395b129585300c03 Mon Sep 17 00:00:00 2001 From: Damien Guard Date: Wed, 30 Nov 2016 19:18:26 -0800 Subject: [PATCH 135/184] Temporarily disable 3 flakey specs on Windows x64 --- spec/compile-cache-spec.coffee | 2 ++ spec/config-spec.coffee | 1 + spec/git-repository-spec.coffee | 1 + 3 files changed, 4 insertions(+) diff --git a/spec/compile-cache-spec.coffee b/spec/compile-cache-spec.coffee index bec689c7d..913b387e8 100644 --- a/spec/compile-cache-spec.coffee +++ b/spec/compile-cache-spec.coffee @@ -77,6 +77,8 @@ describe 'CompileCache', -> describe 'overriding Error.prepareStackTrace', -> it 'removes the override on the next tick, and always assigns the raw stack', -> + return if process.platform is 'win32' # Flakey Error.stack contents on Win32 + Error.prepareStackTrace = -> 'a-stack-trace' error = new Error("Oops") diff --git a/spec/config-spec.coffee b/spec/config-spec.coffee index acd9b112b..b742b3837 100644 --- a/spec/config-spec.coffee +++ b/spec/config-spec.coffee @@ -1079,6 +1079,7 @@ describe "Config", -> describe "when the configDirPath doesn't exist", -> it "copies the contents of dot-atom to ~/.atom", -> + return if process.platform is 'win32' # Flakey test on Win32 initializationDone = false jasmine.unspy(window, "setTimeout") atom.config.initializeConfigDirectory -> diff --git a/spec/git-repository-spec.coffee b/spec/git-repository-spec.coffee index 5a9b143ed..e061c44c1 100644 --- a/spec/git-repository-spec.coffee +++ b/spec/git-repository-spec.coffee @@ -150,6 +150,7 @@ describe "GitRepository", -> expect(fs.readFileSync(filePath, 'utf8')).toBe '' it "does not display a dialog when confirmation is disabled", -> + return if process.platform is 'win32' # Flakey EPERM opening a.txt on Win32 atom.config.set('editor.confirmCheckoutHeadRevision', false) repo.checkoutHeadForEditor(editor) From 373d4524dfd404e5a7af2531db7f90d09d3f5b41 Mon Sep 17 00:00:00 2001 From: Linus Eriksson Date: Thu, 1 Dec 2016 14:06:14 +0100 Subject: [PATCH 136/184] :arrow_up: bookmarks@0.43.4 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 7d5749f22..35c4f5fe8 100644 --- a/package.json +++ b/package.json @@ -94,7 +94,7 @@ "autoflow": "0.29.0", "autosave": "0.23.2", "background-tips": "0.26.1", - "bookmarks": "0.43.2", + "bookmarks": "0.43.4", "bracket-matcher": "0.84.0", "command-palette": "0.39.1", "deprecation-cop": "0.55.1", From 42dfc54ff37c9bd6f9d44a4a82aced51c9d2b4d9 Mon Sep 17 00:00:00 2001 From: Wliu <50Wliu@users.noreply.github.com> Date: Thu, 1 Dec 2016 12:14:04 -0500 Subject: [PATCH 137/184] :arrow_up: language-ruby@0.70.3 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 35c4f5fe8..8c0bc266a 100644 --- a/package.json +++ b/package.json @@ -150,7 +150,7 @@ "language-php": "0.37.3", "language-property-list": "0.9.0", "language-python": "0.45.1", - "language-ruby": "0.70.2", + "language-ruby": "0.70.3", "language-ruby-on-rails": "0.25.1", "language-sass": "0.57.1", "language-shellscript": "0.24.0", From 4d98a85eff95458cb16658f6ab90a46e5fd2b0f5 Mon Sep 17 00:00:00 2001 From: Wliu <50Wliu@users.noreply.github.com> Date: Thu, 1 Dec 2016 12:24:31 -0500 Subject: [PATCH 138/184] :arrow_up: language-coffee-script@0.48.2 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 8c0bc266a..899edbc02 100644 --- a/package.json +++ b/package.json @@ -131,7 +131,7 @@ "wrap-guide": "0.39.0", "language-c": "0.54.0", "language-clojure": "0.22.1", - "language-coffee-script": "0.48.1", + "language-coffee-script": "0.48.2", "language-csharp": "0.13.0", "language-css": "0.41.0", "language-gfm": "0.88.0", From 3fd1dbdce38124ae2abb53d86f6f808c050c7ebf Mon Sep 17 00:00:00 2001 From: Damien Guard Date: Wed, 30 Nov 2016 18:41:58 -0800 Subject: [PATCH 139/184] Clean up temporary files when running specs --- spec/atom-environment-spec.coffee | 9 ++++++--- spec/babel-spec.coffee | 1 + spec/command-installer-spec.coffee | 5 ++++- spec/compile-cache-spec.coffee | 2 ++ spec/config-spec.coffee | 7 ++++--- spec/default-directory-provider-spec.coffee | 14 +++++++++----- spec/file-system-blob-store-spec.coffee | 7 +++++-- spec/git-repository-provider-spec.coffee | 5 ++++- spec/git-repository-spec.coffee | 6 ++++-- spec/grammars-spec.coffee | 5 ++++- spec/integration/helpers/start-atom.coffee | 3 ++- .../main-process/file-recovery-service.test.js | 18 ++++++++++++++++-- spec/module-cache-spec.coffee | 5 ++++- spec/package-manager-spec.coffee | 9 +++++++-- spec/project-spec.coffee | 9 ++++++--- spec/squirrel-update-spec.coffee | 5 ++++- spec/style-manager-spec.js | 6 +++++- spec/theme-manager-spec.coffee | 3 ++- spec/update-process-env-spec.js | 3 ++- spec/workspace-element-spec.coffee | 3 +++ spec/workspace-spec.coffee | 7 +++++-- 21 files changed, 99 insertions(+), 33 deletions(-) diff --git a/spec/atom-environment-spec.coffee b/spec/atom-environment-spec.coffee index 754be0d28..9b9715a07 100644 --- a/spec/atom-environment-spec.coffee +++ b/spec/atom-environment-spec.coffee @@ -1,10 +1,13 @@ _ = require 'underscore-plus' path = require 'path' -temp = require 'temp' +temp = require('temp').track() AtomEnvironment = require '../src/atom-environment' StorageFolder = require '../src/storage-folder' describe "AtomEnvironment", -> + afterEach -> + temp.cleanupSync() + describe 'window sizing methods', -> describe '::getPosition and ::setPosition', -> originalPosition = null @@ -324,7 +327,7 @@ describe "AtomEnvironment", -> describe "::unloadEditorWindow()", -> it "saves the BlobStore so it can be loaded after reload", -> - configDirPath = temp.mkdirSync() + configDirPath = temp.mkdirSync('atom-spec-environment') fakeBlobStore = jasmine.createSpyObj("blob store", ["save"]) atomEnvironment = new AtomEnvironment({applicationDelegate: atom.applicationDelegate, enablePersistence: true, configDirPath, blobStore: fakeBlobStore, window, document}) @@ -336,7 +339,7 @@ describe "AtomEnvironment", -> describe "::destroy()", -> it "does not throw exceptions when unsubscribing from ipc events (regression)", -> - configDirPath = temp.mkdirSync() + configDirPath = temp.mkdirSync('atom-spec-environment') fakeDocument = { addEventListener: -> removeEventListener: -> diff --git a/spec/babel-spec.coffee b/spec/babel-spec.coffee index e95b000cb..4e7b2b395 100644 --- a/spec/babel-spec.coffee +++ b/spec/babel-spec.coffee @@ -19,6 +19,7 @@ describe "Babel transpiler support", -> afterEach -> CompileCache.setCacheDirectory(originalCacheDir) + temp.cleanupSync() describe 'when a .js file starts with /** @babel */;', -> it "transpiles it using babel", -> diff --git a/spec/command-installer-spec.coffee b/spec/command-installer-spec.coffee index 84fd77a34..a1cf194a8 100644 --- a/spec/command-installer-spec.coffee +++ b/spec/command-installer-spec.coffee @@ -1,6 +1,6 @@ path = require 'path' fs = require 'fs-plus' -temp = require 'temp' +temp = require('temp').track() CommandInstaller = require '../src/command-installer' describe "CommandInstaller on #darwin", -> @@ -20,6 +20,9 @@ describe "CommandInstaller on #darwin", -> spyOn(CommandInstaller::, 'getResourcesDirectory').andReturn(resourcesPath) spyOn(CommandInstaller::, 'getInstallDirectory').andReturn(installationPath) + afterEach -> + temp.cleanupSync() + it "shows an error dialog when installing commands interactively fails", -> appDelegate = jasmine.createSpyObj("appDelegate", ["confirm"]) installer = new CommandInstaller("2.0.2", appDelegate) diff --git a/spec/compile-cache-spec.coffee b/spec/compile-cache-spec.coffee index bec689c7d..13d2d6634 100644 --- a/spec/compile-cache-spec.coffee +++ b/spec/compile-cache-spec.coffee @@ -23,6 +23,7 @@ describe 'CompileCache', -> afterEach -> CSON.setCacheDir(CompileCache.getCacheDirectory()) CompileCache.setAtomHomeDirectory(process.env.ATOM_HOME) + temp.cleanupSync() describe 'addPathToCache(filePath, atomHome)', -> describe 'when the given file is plain javascript', -> @@ -81,6 +82,7 @@ describe 'CompileCache', -> error = new Error("Oops") expect(error.stack).toBe 'a-stack-trace' + console.log('stack ' + error.getRawStack()) expect(Array.isArray(error.getRawStack())).toBe true waits(1) diff --git a/spec/config-spec.coffee b/spec/config-spec.coffee index acd9b112b..497a2bf59 100644 --- a/spec/config-spec.coffee +++ b/spec/config-spec.coffee @@ -1,5 +1,5 @@ path = require 'path' -temp = require 'temp' +temp = require('temp').track() CSON = require 'season' fs = require 'fs-plus' @@ -9,13 +9,14 @@ describe "Config", -> beforeEach -> spyOn(atom.config, "load") spyOn(atom.config, "save") - dotAtomPath = temp.path('dot-atom-dir') + dotAtomPath = temp.path('atom-spec-config') atom.config.configDirPath = dotAtomPath atom.config.enablePersistence = true atom.config.configFilePath = path.join(atom.config.configDirPath, "atom.config.cson") afterEach -> atom.config.enablePersistence = false + fs.removeSync(dotAtomPath) describe ".get(keyPath, {scope, sources, excludeSources})", -> it "allows a key path's value to be read", -> @@ -486,8 +487,8 @@ describe "Config", -> observeHandler.reset() # clear the initial call atom.config.set('foo.bar.baz', "value 2") expect(observeHandler).toHaveBeenCalledWith("value 2") - observeHandler.reset() + observeHandler.reset() atom.config.set('foo.bar.baz', "value 1") expect(observeHandler).toHaveBeenCalledWith("value 1") advanceClock(100) # complete pending save that was requested in ::set diff --git a/spec/default-directory-provider-spec.coffee b/spec/default-directory-provider-spec.coffee index df4f589b5..821c278ee 100644 --- a/spec/default-directory-provider-spec.coffee +++ b/spec/default-directory-provider-spec.coffee @@ -1,20 +1,26 @@ DefaultDirectoryProvider = require '../src/default-directory-provider' path = require 'path' fs = require 'fs-plus' -temp = require 'temp' +temp = require('temp').track() describe "DefaultDirectoryProvider", -> + tmp = null + + beforeEach -> + tmp = temp.mkdirSync('atom-spec-default-dir-provider') + + afterEach -> + temp.cleanupSync() + describe ".directoryForURISync(uri)", -> it "returns a Directory with a path that matches the uri", -> provider = new DefaultDirectoryProvider() - tmp = temp.mkdirSync() directory = provider.directoryForURISync(tmp) expect(directory.getPath()).toEqual tmp it "normalizes its input before creating a Directory for it", -> provider = new DefaultDirectoryProvider() - tmp = temp.mkdirSync() nonNormalizedPath = tmp + path.sep + ".." + path.sep + path.basename(tmp) expect(tmp.includes("..")).toBe false expect(nonNormalizedPath.includes("..")).toBe true @@ -24,7 +30,6 @@ describe "DefaultDirectoryProvider", -> it "creates a Directory for its parent dir when passed a file", -> provider = new DefaultDirectoryProvider() - tmp = temp.mkdirSync() file = path.join(tmp, "example.txt") fs.writeFileSync(file, "data") @@ -40,7 +45,6 @@ describe "DefaultDirectoryProvider", -> describe ".directoryForURI(uri)", -> it "returns a Promise that resolves to a Directory with a path that matches the uri", -> provider = new DefaultDirectoryProvider() - tmp = temp.mkdirSync() waitsForPromise -> provider.directoryForURI(tmp).then (directory) -> diff --git a/spec/file-system-blob-store-spec.coffee b/spec/file-system-blob-store-spec.coffee index 5147e59ee..a2ed39014 100644 --- a/spec/file-system-blob-store-spec.coffee +++ b/spec/file-system-blob-store-spec.coffee @@ -1,4 +1,4 @@ -temp = require 'temp' +temp = require('temp').track() path = require 'path' fs = require 'fs-plus' FileSystemBlobStore = require '../src/file-system-blob-store' @@ -7,9 +7,12 @@ describe "FileSystemBlobStore", -> [storageDirectory, blobStore] = [] beforeEach -> - storageDirectory = temp.path() + storageDirectory = temp.path('atom-spec-filesystemblobstore') blobStore = FileSystemBlobStore.load(storageDirectory) + afterEach -> + fs.removeSync(storageDirectory) + it "is empty when the file doesn't exist", -> expect(blobStore.get("foo", "invalidation-key-1")).toBeUndefined() expect(blobStore.get("bar", "invalidation-key-2")).toBeUndefined() diff --git a/spec/git-repository-provider-spec.coffee b/spec/git-repository-provider-spec.coffee index bbbfb4b03..6c6a7b4b9 100644 --- a/spec/git-repository-provider-spec.coffee +++ b/spec/git-repository-provider-spec.coffee @@ -1,6 +1,6 @@ path = require 'path' fs = require 'fs-plus' -temp = require 'temp' +temp = require('temp').track() {Directory} = require 'pathwatcher' GitRepository = require '../src/git-repository' GitRepositoryProvider = require '../src/git-repository-provider' @@ -11,6 +11,9 @@ describe "GitRepositoryProvider", -> beforeEach -> provider = new GitRepositoryProvider(atom.project, atom.config, atom.confirm) + afterEach -> + temp.cleanupSync() + describe ".repositoryForDirectory(directory)", -> describe "when specified a Directory with a Git repository", -> it "returns a Promise that resolves to a GitRepository", -> diff --git a/spec/git-repository-spec.coffee b/spec/git-repository-spec.coffee index 5a9b143ed..bdea4f330 100644 --- a/spec/git-repository-spec.coffee +++ b/spec/git-repository-spec.coffee @@ -1,11 +1,11 @@ -temp = require 'temp' +temp = require('temp').track() GitRepository = require '../src/git-repository' fs = require 'fs-plus' path = require 'path' Project = require '../src/project' copyRepository = -> - workingDirPath = temp.mkdirSync('atom-working-dir') + workingDirPath = temp.mkdirSync('atom-spec-git') fs.copySync(path.join(__dirname, 'fixtures', 'git', 'working-dir'), workingDirPath) fs.renameSync(path.join(workingDirPath, 'git.git'), path.join(workingDirPath, '.git')) workingDirPath @@ -19,6 +19,8 @@ describe "GitRepository", -> afterEach -> repo.destroy() if repo?.repo? + try + temp.cleanupSync() # These tests sometimes lag at shutting down resources describe "@open(path)", -> it "returns null when no repository is found", -> diff --git a/spec/grammars-spec.coffee b/spec/grammars-spec.coffee index 7dcff8bcd..47198a124 100644 --- a/spec/grammars-spec.coffee +++ b/spec/grammars-spec.coffee @@ -1,6 +1,6 @@ path = require 'path' fs = require 'fs-plus' -temp = require 'temp' +temp = require('temp').track() GrammarRegistry = require '../src/grammar-registry' Grim = require 'grim' @@ -24,6 +24,7 @@ describe "the `grammars` global", -> afterEach -> atom.packages.deactivatePackages() atom.packages.unloadPackages() + temp.cleanupSync() describe ".selectGrammar(filePath)", -> it "always returns a grammar", -> @@ -96,6 +97,7 @@ describe "the `grammars` global", -> ) grammar1 = atom.grammars.loadGrammarSync(grammarPath1) expect(atom.grammars.selectGrammar('more.test', '')).toBe grammar1 + fs.removeSync(grammarPath1) grammarPath2 = temp.path(suffix: '.json') fs.writeFileSync grammarPath2, JSON.stringify( @@ -105,6 +107,7 @@ describe "the `grammars` global", -> ) grammar2 = atom.grammars.loadGrammarSync(grammarPath2) expect(atom.grammars.selectGrammar('more.test', '')).toBe grammar2 + fs.removeSync(grammarPath2) it "favors non-bundled packages when breaking scoring ties", -> waitsForPromise -> diff --git a/spec/integration/helpers/start-atom.coffee b/spec/integration/helpers/start-atom.coffee index 1eb610a2f..a50a148b0 100644 --- a/spec/integration/helpers/start-atom.coffee +++ b/spec/integration/helpers/start-atom.coffee @@ -16,7 +16,7 @@ ChromedriverPort = 9515 ChromedriverURLBase = "/wd/hub" ChromedriverStatusURL = "http://localhost:#{ChromedriverPort}#{ChromedriverURLBase}/status" -userDataDir = temp.mkdirSync('atom-user-data-dir') +userDataDir = null chromeDriverUp = (done) -> checkStatus = -> @@ -38,6 +38,7 @@ chromeDriverDown = (done) -> setTimeout(checkStatus, 100) buildAtomClient = (args, env) -> + userDataDir = temp.mkdirSync('atom-user-data-dir') client = webdriverio.remote( host: 'localhost' port: ChromedriverPort diff --git a/spec/main-process/file-recovery-service.test.js b/spec/main-process/file-recovery-service.test.js index 19c964be7..862b7f428 100644 --- a/spec/main-process/file-recovery-service.test.js +++ b/spec/main-process/file-recovery-service.test.js @@ -2,19 +2,23 @@ import {dialog} from 'electron' import FileRecoveryService from '../../src/main-process/file-recovery-service' -import temp from 'temp' import fs from 'fs-plus' import sinon from 'sinon' import {escapeRegExp} from 'underscore-plus' +const temp = require('temp').track() describe("FileRecoveryService", () => { let recoveryService, recoveryDirectory beforeEach(() => { - recoveryDirectory = temp.mkdirSync() + recoveryDirectory = temp.mkdirSync('atom-spec-file-recovery') recoveryService = new FileRecoveryService(recoveryDirectory) }) + afterEach(() => { + temp.cleanupSync() + }) + describe("when no crash happens during a save", () => { it("creates a recovery file and deletes it after saving", () => { const mockWindow = {} @@ -28,6 +32,8 @@ describe("FileRecoveryService", () => { recoveryService.didSavePath(mockWindow, filePath) assert.equal(fs.listTreeSync(recoveryDirectory).length, 0) assert.equal(fs.readFileSync(filePath, 'utf8'), "changed") + + fs.removeSync(filePath) }) it("creates only one recovery file when many windows attempt to save the same file, deleting it when the last one finishes saving it", () => { @@ -48,6 +54,8 @@ describe("FileRecoveryService", () => { recoveryService.didSavePath(anotherMockWindow, filePath) assert.equal(fs.listTreeSync(recoveryDirectory).length, 0) assert.equal(fs.readFileSync(filePath, 'utf8'), "changed") + + fs.removeSync(filePath) }) }) @@ -64,6 +72,8 @@ describe("FileRecoveryService", () => { recoveryService.didCrashWindow(mockWindow) assert.equal(fs.listTreeSync(recoveryDirectory).length, 0) assert.equal(fs.readFileSync(filePath, 'utf8'), "some content") + + fs.removeSync(filePath) }) it("restores the created recovery file when many windows attempt to save the same file and one of them crashes", () => { @@ -94,6 +104,8 @@ describe("FileRecoveryService", () => { recoveryService.didCrashWindow(anotherMockWindow) assert.equal(fs.readFileSync(filePath, 'utf8'), "D") assert.equal(fs.listTreeSync(recoveryDirectory).length, 0) + + fs.removeSync(filePath) }) it("emits a warning when a file can't be recovered", sinon.test(function () { @@ -113,6 +125,8 @@ describe("FileRecoveryService", () => { assert.equal(logs.length, 1) assert.match(logs[0], new RegExp(escapeRegExp(filePath))) assert.match(logs[0], new RegExp(escapeRegExp(recoveryFiles[0]))) + + fs.removeSync(filePath) })) }) diff --git a/spec/module-cache-spec.coffee b/spec/module-cache-spec.coffee index 4c0a549aa..1627ec776 100644 --- a/spec/module-cache-spec.coffee +++ b/spec/module-cache-spec.coffee @@ -1,13 +1,16 @@ path = require 'path' Module = require 'module' fs = require 'fs-plus' -temp = require 'temp' +temp = require('temp').track() ModuleCache = require '../src/module-cache' describe 'ModuleCache', -> beforeEach -> spyOn(Module, '_findPath').andCallThrough() + afterEach -> + temp.cleanupSync() + it 'resolves Electron module paths without hitting the filesystem', -> builtins = ModuleCache.cache.builtins expect(Object.keys(builtins).length).toBeGreaterThan 0 diff --git a/spec/package-manager-spec.coffee b/spec/package-manager-spec.coffee index 8418cf904..32bd1d2a0 100644 --- a/spec/package-manager-spec.coffee +++ b/spec/package-manager-spec.coffee @@ -1,6 +1,6 @@ path = require 'path' Package = require '../src/package' -temp = require 'temp' +temp = require('temp').track() fs = require 'fs-plus' {Disposable} = require 'atom' {buildKeydownEvent} = require '../src/keymap-extensions' @@ -17,6 +17,9 @@ describe "PackageManager", -> beforeEach -> workspaceElement = atom.views.getView(atom.workspace) + afterEach -> + temp.cleanupSync() + describe "::getApmPath()", -> it "returns the path to the apm command", -> apmPath = path.join(process.resourcesPath, "app", "apm", "bin", "apm") @@ -643,7 +646,7 @@ describe "PackageManager", -> [element, events, userKeymapPath] = [] beforeEach -> - userKeymapPath = path.join(temp.path(), "user-keymaps.cson") + userKeymapPath = path.join(temp.mkdirSync(), "user-keymaps.cson") spyOn(atom.keymaps, "getUserKeymapPath").andReturn(userKeymapPath) element = createTestElement('test-1') @@ -660,6 +663,8 @@ describe "PackageManager", -> atom.keymaps.watchSubscriptions[userKeymapPath].dispose() delete atom.keymaps.watchSubscriptions[userKeymapPath] + temp.cleanupSync() + it "doesn't override user-defined keymaps", -> fs.writeFileSync userKeymapPath, """ ".test-1": diff --git a/spec/project-spec.coffee b/spec/project-spec.coffee index 526d16b83..d548255e5 100644 --- a/spec/project-spec.coffee +++ b/spec/project-spec.coffee @@ -1,4 +1,4 @@ -temp = require 'temp' +temp = require('temp').track() Project = require '../src/project' fs = require 'fs-plus' path = require 'path' @@ -12,6 +12,9 @@ describe "Project", -> # Wait for project's service consumers to be asynchronously added waits(1) + afterEach -> + temp.cleanupSync() + describe "serialization", -> deserializedProject = null @@ -51,7 +54,7 @@ describe "Project", -> it "does not deserialize buffers when their path is a directory that exists", -> - pathToOpen = path.join(temp.mkdirSync(), 'file.txt') + pathToOpen = path.join(temp.mkdirSync('atom-spec-project'), 'file.txt') waitsForPromise -> atom.workspace.open(pathToOpen) @@ -65,7 +68,7 @@ describe "Project", -> it "does not deserialize buffers when their path is inaccessible", -> return if process.platform is 'win32' # chmod not supported on win32 - pathToOpen = path.join(temp.mkdirSync(), 'file.txt') + pathToOpen = path.join(temp.mkdirSync('atom-spec-project'), 'file.txt') fs.writeFileSync(pathToOpen, '') waitsForPromise -> diff --git a/spec/squirrel-update-spec.coffee b/spec/squirrel-update-spec.coffee index 083b1f78d..4c7e796ac 100644 --- a/spec/squirrel-update-spec.coffee +++ b/spec/squirrel-update-spec.coffee @@ -1,7 +1,7 @@ {EventEmitter} = require 'events' fs = require 'fs-plus' path = require 'path' -temp = require 'temp' +temp = require('temp').track() SquirrelUpdate = require '../src/main-process/squirrel-update' Spawner = require '../src/main-process/spawner' WinShell = require '../src/main-process/win-shell' @@ -36,6 +36,9 @@ describe "Windows Squirrel Update", -> WinShell.folderContextMenu = new FakeShellOption() WinShell.folderBackgroundContextMenu = new FakeShellOption() + afterEach -> + temp.cleanupSync() + it "quits the app on all squirrel events", -> app = quit: jasmine.createSpy('quit') diff --git a/spec/style-manager-spec.js b/spec/style-manager-spec.js index 120eb1394..88baac160 100644 --- a/spec/style-manager-spec.js +++ b/spec/style-manager-spec.js @@ -1,4 +1,4 @@ -const temp = require('temp') +const temp = require('temp').track() const StyleManager = require('../src/style-manager') describe('StyleManager', () => { @@ -14,6 +14,10 @@ describe('StyleManager', () => { styleManager.onDidUpdateStyleElement((event) => { updateEvents.push(event) }) }) + afterEach(() => { + temp.cleanupSync() + }) + describe('::addStyleSheet(source, params)', () => { it('adds a style sheet based on the given source and returns a disposable allowing it to be removed', () => { const disposable = styleManager.addStyleSheet('a {color: red}') diff --git a/spec/theme-manager-spec.coffee b/spec/theme-manager-spec.coffee index 247646c38..40a3160da 100644 --- a/spec/theme-manager-spec.coffee +++ b/spec/theme-manager-spec.coffee @@ -1,6 +1,6 @@ path = require 'path' fs = require 'fs-plus' -temp = require 'temp' +temp = require('temp').track() describe "atom.themes", -> beforeEach -> @@ -8,6 +8,7 @@ describe "atom.themes", -> afterEach -> atom.themes.deactivateThemes() + temp.cleanupSync() describe "theme getters and setters", -> beforeEach -> diff --git a/spec/update-process-env-spec.js b/spec/update-process-env-spec.js index e90e0678e..1d2e274e4 100644 --- a/spec/update-process-env-spec.js +++ b/spec/update-process-env-spec.js @@ -3,12 +3,12 @@ import {it, fit, ffit, fffit, beforeEach, afterEach} from './async-spec-helpers' import path from 'path' -import temp from 'temp' import childProcess from 'child_process' import {updateProcessEnv, shouldGetEnvFromShell} from '../src/update-process-env' import dedent from 'dedent' import {EventEmitter} from 'events' import mockSpawn from 'mock-spawn' +const temp = require('temp').track() describe('updateProcessEnv(launchEnv)', function () { let originalProcessEnv, originalProcessPlatform, originalSpawn, spawn @@ -28,6 +28,7 @@ describe('updateProcessEnv(launchEnv)', function () { } process.env = originalProcessEnv process.platform = originalProcessPlatform + temp.cleanupSync() }) describe('when the launch environment appears to come from a shell', function () { diff --git a/spec/workspace-element-spec.coffee b/spec/workspace-element-spec.coffee index 9ffa3621a..6bcb24eed 100644 --- a/spec/workspace-element-spec.coffee +++ b/spec/workspace-element-spec.coffee @@ -4,6 +4,9 @@ temp = require('temp').track() {Disposable} = require 'event-kit' describe "WorkspaceElement", -> + afterEach -> + temp.cleanupSync() + describe "when the workspace element is focused", -> it "transfers focus to the active pane", -> workspaceElement = atom.views.getView(atom.workspace) diff --git a/spec/workspace-spec.coffee b/spec/workspace-spec.coffee index 873be67b0..023c3c970 100644 --- a/spec/workspace-spec.coffee +++ b/spec/workspace-spec.coffee @@ -1,5 +1,5 @@ path = require 'path' -temp = require 'temp' +temp = require('temp').track() TextEditor = require '../src/text-editor' Workspace = require '../src/workspace' Project = require '../src/project' @@ -19,6 +19,9 @@ describe "Workspace", -> atom.project.setPaths([atom.project.getDirectories()[0]?.resolve('dir')]) waits(1) + afterEach -> + temp.cleanupSync() + describe "serialization", -> simulateReload = -> workspaceState = atom.workspace.serialize() @@ -1226,7 +1229,7 @@ describe "Workspace", -> expect(matches.length).toBe 1 it "includes files and folders that begin with a '.'", -> - projectPath = temp.mkdirSync() + projectPath = temp.mkdirSync('atom-spec-workspace') filePath = path.join(projectPath, '.text') fs.writeFileSync(filePath, 'match this') atom.project.setPaths([projectPath]) From d434d026d397e3c49792e1cd1275df2cae5c5a0f Mon Sep 17 00:00:00 2001 From: Damien Guard Date: Wed, 30 Nov 2016 18:42:23 -0800 Subject: [PATCH 140/184] Correct compile cache afterEach cleanup --- spec/compile-cache-spec.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/compile-cache-spec.coffee b/spec/compile-cache-spec.coffee index 13d2d6634..a1ffc3a73 100644 --- a/spec/compile-cache-spec.coffee +++ b/spec/compile-cache-spec.coffee @@ -21,8 +21,8 @@ describe 'CompileCache', -> spyOn(TypeScriptSimple::, 'compile').andReturn 'the-typescript-code' afterEach -> - CSON.setCacheDir(CompileCache.getCacheDirectory()) CompileCache.setAtomHomeDirectory(process.env.ATOM_HOME) + CSON.setCacheDir(CompileCache.getCacheDirectory()) temp.cleanupSync() describe 'addPathToCache(filePath, atomHome)', -> From 49b1b8821f6a4c7031ffae31655c4f85a5c37d2f Mon Sep 17 00:00:00 2001 From: Wliu <50Wliu@users.noreply.github.com> Date: Thu, 1 Dec 2016 14:15:41 -0500 Subject: [PATCH 141/184] :arrow_up: language-xml@0.34.13 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 899edbc02..670e6a48d 100644 --- a/package.json +++ b/package.json @@ -159,7 +159,7 @@ "language-text": "0.7.1", "language-todo": "0.29.1", "language-toml": "0.18.1", - "language-xml": "0.34.12", + "language-xml": "0.34.13", "language-yaml": "0.27.1" }, "private": true, From 63c201dc8460049915f6b13e9791af2d23029849 Mon Sep 17 00:00:00 2001 From: Damien Guard Date: Thu, 1 Dec 2016 14:00:53 -0800 Subject: [PATCH 142/184] Fall back to using 7z to extract chromedriver if unzip missing --- script/lib/download-chromedriver.js | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/script/lib/download-chromedriver.js b/script/lib/download-chromedriver.js index caa867911..0c74eefd7 100644 --- a/script/lib/download-chromedriver.js +++ b/script/lib/download-chromedriver.js @@ -49,5 +49,16 @@ function unzipPath (inputPath, outputPath) { } console.log(`Unzipping "${inputPath}" to "${outputPath}"`) - spawnSync('unzip', [inputPath, '-d', outputPath]) + try { + spawnSync('unzip', [inputPath, '-d', outputPath]) + } + catch(err) { + if (err.code === 'ENOENT') { + // Unzip might not be available on Windows even though it comes with git so fall back to 7zip + spawnSync('7z', ['x', inputPath, `-o${outputPath}`]) + } + else { + throw err; + } + } } From 2463739e940b82694a86fedaabff2909d23addb8 Mon Sep 17 00:00:00 2001 From: Damien Guard Date: Thu, 1 Dec 2016 14:02:11 -0800 Subject: [PATCH 143/184] Remove errant stack trace from console --- spec/compile-cache-spec.coffee | 1 - 1 file changed, 1 deletion(-) diff --git a/spec/compile-cache-spec.coffee b/spec/compile-cache-spec.coffee index 621b13878..13db6a055 100644 --- a/spec/compile-cache-spec.coffee +++ b/spec/compile-cache-spec.coffee @@ -84,7 +84,6 @@ describe 'CompileCache', -> error = new Error("Oops") expect(error.stack).toBe 'a-stack-trace' - console.log('stack ' + error.getRawStack()) expect(Array.isArray(error.getRawStack())).toBe true waits(1) From 8891b731adb7419a2265b33b500379c058ba9374 Mon Sep 17 00:00:00 2001 From: Damien Guard Date: Thu, 1 Dec 2016 14:36:33 -0800 Subject: [PATCH 144/184] Remove unused cache entries from appveyor.yml --- appveyor.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index 2c3f57481..a9a0d7920 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -50,6 +50,4 @@ cache: - '%APPVEYOR_BUILD_FOLDER%\node_modules' - '%APPVEYOR_BUILD_FOLDER%\electron' - '%USERPROFILE%\.atom\.apm' - - '%USERPROFILE%\.atom\.node-gyp\.atom' - - '%USERPROFILE%\.atom\.npm' - '%USERPROFILE%\.atom\compile-cache' From 9520ee1aa955b866f18364734d3c42702e4da962 Mon Sep 17 00:00:00 2001 From: Damien Guard Date: Thu, 1 Dec 2016 22:57:04 -0800 Subject: [PATCH 145/184] Make circleCI badge same style as others in README --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 8c09d3d40..dc22ae866 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ ![Atom](https://cloud.githubusercontent.com/assets/72919/2874231/3af1db48-d3dd-11e3-98dc-6066f8bc766f.png) -[![macOS Build Status](https://circleci.com/gh/atom/atom.svg?style=svg)](https://circleci.com/gh/atom/atom) [![Linux Build Status](https://travis-ci.org/atom/atom.svg?branch=master)](https://travis-ci.org/atom/atom) [![Windows Build Status](https://ci.appveyor.com/api/projects/status/1tkktwh654w07eim?svg=true)](https://ci.appveyor.com/project/Atom/atom) +[![macOS Build Status](https://circleci.com/gh/atom/atom/tree/master.svg?style=shield)](https://circleci.com/gh/atom/atom) [![Linux Build Status](https://travis-ci.org/atom/atom.svg?branch=master)](https://travis-ci.org/atom/atom) [![Windows Build Status](https://ci.appveyor.com/api/projects/status/1tkktwh654w07eim?svg=true)](https://ci.appveyor.com/project/Atom/atom) [![Dependency Status](https://david-dm.org/atom/atom.svg)](https://david-dm.org/atom/atom) [![Join the Atom Community on Slack](http://atom-slack.herokuapp.com/badge.svg)](http://atom-slack.herokuapp.com/) From 756e6e46414fceb5f433cef6a640fd2d186801fb Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Fri, 2 Dec 2016 12:56:51 +0100 Subject: [PATCH 146/184] Activate packages immediately if hook had already been triggered --- spec/package-manager-spec.coffee | 15 ++++++++++++--- src/package-manager.coffee | 10 +++++++++- src/package.coffee | 2 ++ 3 files changed, 23 insertions(+), 4 deletions(-) diff --git a/spec/package-manager-spec.coffee b/spec/package-manager-spec.coffee index 32bd1d2a0..51d3fa7e7 100644 --- a/spec/package-manager-spec.coffee +++ b/spec/package-manager-spec.coffee @@ -443,11 +443,9 @@ describe "PackageManager", -> spyOn(mainModule, 'activate').andCallThrough() spyOn(Package.prototype, 'requireMainModule').andCallThrough() - promise = atom.packages.activatePackage('package-with-activation-hooks') - it "defers requiring/activating the main module until an triggering of an activation hook occurs", -> + promise = atom.packages.activatePackage('package-with-activation-hooks') expect(Package.prototype.requireMainModule.callCount).toBe 0 - atom.packages.triggerActivationHook('language-fictitious:grammar-used') atom.packages.triggerDeferredActivationHooks() @@ -458,6 +456,7 @@ describe "PackageManager", -> expect(Package.prototype.requireMainModule.callCount).toBe 1 it "does not double register activation hooks when deactivating and reactivating", -> + promise = atom.packages.activatePackage('package-with-activation-hooks') expect(mainModule.activate.callCount).toBe 0 atom.packages.triggerActivationHook('language-fictitious:grammar-used') atom.packages.triggerDeferredActivationHooks() @@ -492,6 +491,16 @@ describe "PackageManager", -> expect(mainModule.activate.callCount).toBe 1 expect(Package.prototype.requireMainModule.callCount).toBe 1 + it "activates the package immediately if the activation hook had already been triggered", -> + atom.packages.triggerActivationHook('language-fictitious:grammar-used') + atom.packages.triggerDeferredActivationHooks() + + waitsForPromise -> + atom.packages.activatePackage('package-with-activation-hooks') + + runs -> + expect(Package.prototype.requireMainModule.callCount).toBe 1 + describe "when the package has no main module", -> it "does not throw an exception", -> spyOn(console, "error") diff --git a/src/package-manager.coffee b/src/package-manager.coffee index 84a36dd78..fb4f7a658 100644 --- a/src/package-manager.coffee +++ b/src/package-manager.coffee @@ -39,6 +39,7 @@ class PackageManager @activationHookEmitter = new Emitter @packageDirPaths = [] @deferredActivationHooks = [] + @triggeredActivationHooks = new Set() if configDirPath? and not safeMode if @devMode @packageDirPaths.push(path.join(configDirPath, "dev", "packages")) @@ -67,6 +68,7 @@ class PackageManager @deactivatePackages() @loadedPackages = {} @packageStates = {} + @triggeredActivationHooks.clear() ### Section: Event Subscription @@ -460,12 +462,17 @@ class PackageManager Promise.resolve(pack) else if pack = @loadPackage(name) @activatingPackages[pack.name] = pack - pack.activate().then => + activationPromise = pack.activate().then => if @activatingPackages[pack.name]? delete @activatingPackages[pack.name] @activePackages[pack.name] = pack @emitter.emit 'did-activate-package', pack pack + + unless @deferredActivationHooks? + @triggeredActivationHooks.forEach((hook) => @activationHookEmitter.emit(hook)) + + activationPromise else Promise.reject(new Error("Failed to load package '#{name}'")) @@ -476,6 +483,7 @@ class PackageManager triggerActivationHook: (hook) -> return new Error("Cannot trigger an empty activation hook") unless hook? and _.isString(hook) and hook.length > 0 + @triggeredActivationHooks.add(hook) if @deferredActivationHooks? @deferredActivationHooks.push hook else diff --git a/src/package.coffee b/src/package.coffee index 5d26ae03e..9fa2dbe63 100644 --- a/src/package.coffee +++ b/src/package.coffee @@ -162,6 +162,8 @@ class Package @mainModule.activate?(@packageManager.getPackageState(@name) ? {}) @mainActivated = true @activateServices() + @activationCommandSubscriptions?.dispose() + @activationHookSubscriptions?.dispose() catch error @handleError("Failed to activate the #{@name} package", error) From e943f7a19dfe4da24e0c39fa7c3ed878bc510440 Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Fri, 2 Dec 2016 13:30:24 +0100 Subject: [PATCH 147/184] Add precondition test --- spec/package-manager-spec.coffee | 1 + 1 file changed, 1 insertion(+) diff --git a/spec/package-manager-spec.coffee b/spec/package-manager-spec.coffee index 51d3fa7e7..c2e9e11be 100644 --- a/spec/package-manager-spec.coffee +++ b/spec/package-manager-spec.coffee @@ -494,6 +494,7 @@ describe "PackageManager", -> it "activates the package immediately if the activation hook had already been triggered", -> atom.packages.triggerActivationHook('language-fictitious:grammar-used') atom.packages.triggerDeferredActivationHooks() + expect(Package.prototype.requireMainModule.callCount).toBe 0 waitsForPromise -> atom.packages.activatePackage('package-with-activation-hooks') From 8efbc513e431b78febe52c4d08a11c62c20dd09a Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Fri, 2 Dec 2016 20:09:20 +0100 Subject: [PATCH 148/184] Replace `space-pen` with `atom-select-list` in `ReopenProjectListView` Signed-off-by: Damien Guard --- package.json | 2 +- src/reopen-project-list-view.js | 68 +++++++++++++++++++-------------- 2 files changed, 41 insertions(+), 29 deletions(-) diff --git a/package.json b/package.json index 670e6a48d..7b9dc3210 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ "dependencies": { "async": "0.2.6", "atom-keymap": "7.1.13", - "atom-space-pen-views": "^2.0.0", + "atom-select-list": "0.0.6", "atom-ui": "0.4.1", "babel-core": "5.8.38", "cached-run-in-this-context": "0.4.1", diff --git a/src/reopen-project-list-view.js b/src/reopen-project-list-view.js index 0774c8db7..f08ee725a 100644 --- a/src/reopen-project-list-view.js +++ b/src/reopen-project-list-view.js @@ -1,59 +1,71 @@ /** @babel */ -import { SelectListView } from 'atom-space-pen-views' +import SelectListView from 'atom-select-list' -export default class ReopenProjectListView extends SelectListView { - initialize (callback) { +export default class ReopenProjectListView { + constructor (callback) { this.callback = callback - super.initialize() - this.addClass('reopen-project') - this.list.addClass('mark-active') + this.selectListView = new SelectListView({ + emptyMessage: 'No projects in history.', + itemsClassList: ['mark-active'], + items: [], + filterKeyForItem: (project) => project.name, + elementForItem: (project) => { + let element = document.createElement('li') + if (project.name === this.currentProjectName) { + element.classList.add('active') + } + element.textContent = project.name + return element + }, + didConfirmSelection: (project) => { + this.cancel() + this.callback(project.value) + }, + didCancelSelection: () => { + this.cancel() + } + }) + this.selectListView.element.classList.add('reopen-project') } - getFilterKey () { - return 'name' + get element () { + return this.selectListView.element } - destroy () { + dispose () { this.cancel() + return this.selectListView.destroy() } - viewForItem (project) { - let element = document.createElement('li') - if (project.name === this.currentProjectName) { - element.classList.add('active') - } - element.textContent = project.name - return element - } - - cancelled () { + cancel () { if (this.panel != null) { this.panel.destroy() } this.panel = null this.currentProjectName = null - } - - confirmed (project) { - this.cancel() - this.callback(project.value) + if (this.previouslyFocusedElement) { + this.previouslyFocusedElement.focus() + this.previouslyFocusedElement = null + } } attach () { - this.storeFocusedElement() + this.previouslyFocusedElement = document.activeElement if (this.panel == null) { this.panel = atom.workspace.addModalPanel({item: this}) } - this.focusFilterEditor() + this.selectListView.focus() + this.selectListView.reset() } - toggle () { + async toggle () { if (this.panel != null) { this.cancel() } else { this.currentProjectName = atom.project != null ? this.makeName(atom.project.getPaths()) : null - this.setItems(atom.history.getProjects().map(p => ({ name: this.makeName(p.paths), value: p.paths }))) + const projects = atom.history.getProjects().map(p => ({ name: this.makeName(p.paths), value: p.paths })) + await this.selectListView.update({items: projects}) this.attach() } } From 01de6855f182d0e6dd83e00b8b116736b1a15e9f Mon Sep 17 00:00:00 2001 From: Damien Guard Date: Fri, 2 Dec 2016 13:20:07 -0800 Subject: [PATCH 149/184] Properly escape &^| chars in commands on Windows. Fixes #13178 --- src/buffered-process.js | 54 +++++++++++++++++++++-------------------- 1 file changed, 28 insertions(+), 26 deletions(-) diff --git a/src/buffered-process.js b/src/buffered-process.js index 715268b17..bfad041df 100644 --- a/src/buffered-process.js +++ b/src/buffered-process.js @@ -51,32 +51,7 @@ export default class BufferedProcess { this.command = command // Related to joyent/node#2318 if (process.platform === 'win32' && options.shell === undefined) { - let cmdArgs = [] - - // Quote all arguments and escapes inner quotes - if (args) { - cmdArgs = args.filter((arg) => arg != null) - .map((arg) => { - if (this.isExplorerCommand(command) && /^\/[a-zA-Z]+,.*$/.test(arg)) { - // Don't wrap /root,C:\folder style arguments to explorer calls in - // quotes since they will not be interpreted correctly if they are - return arg - } else { - return `\"${arg.toString().replace(/"/g, '\\"')}\"` - } - }) - } - - if (/\s/.test(command)) { - cmdArgs.unshift(`\"${command}\"`) - } else { - cmdArgs.unshift(command) - } - - cmdArgs = ['/s', '/d', '/c', `\"${cmdArgs.join(' ')}\"`] - const cmdOptions = _.clone(options) - cmdOptions.windowsVerbatimArguments = true - this.spawn(this.getCmdPath(), cmdArgs, cmdOptions) + this.spawnWithEscapedWindowsArgs(command, args, options) } else { this.spawn(command, args, options) } @@ -85,6 +60,33 @@ export default class BufferedProcess { this.handleEvents(stdout, stderr, exit) } + // Windows has a bunch of special rules that node still doesn't take care of for you + spawnWithEscapedWindowsArgs (command, args, options) { + let cmdArgs = [] + // Quote all arguments and escapes inner quotes + if (args) { + cmdArgs = args.filter((arg) => arg != null) + .map((arg) => { + if (this.isExplorerCommand(command) && /^\/[a-zA-Z]+,.*$/.test(arg)) { + // Don't wrap /root,C:\folder style arguments to explorer calls in + // quotes since they will not be interpreted correctly if they are + return arg + } else { + // Escape double quotes by putting a backslash in front of them + return `\"${arg.toString().replace(/"/g, '\\"')}\"` + } + }) + } + + // The command itself is quoted if it contains spaces, &, ^ or | chars + cmdArgs.unshift(/\s|&|\^|\|/.test(command) ? `\"${command}\"` : command) + + const cmdOptions = _.clone(options) + cmdOptions.windowsVerbatimArguments = true + + this.spawn(this.getCmdPath(), ['/s', '/d', '/c', `\"${cmdArgs.join(' ')}\"`], cmdOptions) + } + /* Section: Event Subscription */ From c2a0735607a7a88f6e60bd26fc3d59fb7733f678 Mon Sep 17 00:00:00 2001 From: Damien Guard Date: Fri, 2 Dec 2016 15:01:06 -0800 Subject: [PATCH 150/184] Bypass checkoutHeadForEditor/displays a confirmation dialog by default spec on Windows for reliability --- spec/git-repository-spec.coffee | 2 ++ 1 file changed, 2 insertions(+) diff --git a/spec/git-repository-spec.coffee b/spec/git-repository-spec.coffee index eb3d7cead..59e8c4c68 100644 --- a/spec/git-repository-spec.coffee +++ b/spec/git-repository-spec.coffee @@ -144,6 +144,8 @@ describe "GitRepository", -> editor = atom.workspace.getActiveTextEditor() it "displays a confirmation dialog by default", -> + return if process.platform is 'win32' # Permissions issues with this test on Windows + atom.confirm.andCallFake ({buttons}) -> buttons.OK() atom.config.set('editor.confirmCheckoutHeadRevision', true) From c5c3f5cb01eb45c87d97d46e9d3111331f1b08d5 Mon Sep 17 00:00:00 2001 From: TiagoDanin Date: Sun, 4 Dec 2016 15:28:43 -0300 Subject: [PATCH 151/184] Replace "osx" to "macOS" --- spec/update-process-env-spec.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/update-process-env-spec.js b/spec/update-process-env-spec.js index 1d2e274e4..f730ae632 100644 --- a/spec/update-process-env-spec.js +++ b/spec/update-process-env-spec.js @@ -151,7 +151,7 @@ describe('updateProcessEnv(launchEnv)', function () { }) describe('when the launch environment does not come from a shell', function () { - describe('on osx', function () { + describe('on macOS', function () { it('updates process.env to match the environment in the user\'s login shell', async function () { if (process.platform === 'win32') return // TestsThatFailOnWin32 From 4c5d93adecfcd3de6e910dc5e7021a55fbda12a1 Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Mon, 5 Dec 2016 14:50:26 +0100 Subject: [PATCH 152/184] Replace `libXScrnSaver` with `libXss.so.1` --- resources/linux/redhat/atom.spec.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/linux/redhat/atom.spec.in b/resources/linux/redhat/atom.spec.in index aff76e18c..bc2397126 100644 --- a/resources/linux/redhat/atom.spec.in +++ b/resources/linux/redhat/atom.spec.in @@ -7,7 +7,7 @@ URL: https://atom.io/ AutoReqProv: no # Avoid libchromiumcontent.so missing dependency Prefix: <%= installDir %> -Requires: lsb-core-noarch, libXScrnSaver +Requires: lsb-core-noarch, libXss.so.1 %description <%= description %> From 2fd89b592cf937efa47a01ef77892f4ca1466e99 Mon Sep 17 00:00:00 2001 From: Damien Guard Date: Sat, 3 Dec 2016 20:23:04 -0800 Subject: [PATCH 153/184] :arrow_up: command-palette --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 670e6a48d..d0ca0e4a9 100644 --- a/package.json +++ b/package.json @@ -96,7 +96,7 @@ "background-tips": "0.26.1", "bookmarks": "0.43.4", "bracket-matcher": "0.84.0", - "command-palette": "0.39.1", + "command-palette": "0.39.2", "deprecation-cop": "0.55.1", "dev-live-reload": "0.47.0", "encoding-selector": "0.22.0", From 260648c2af7aa542a4a806d533cd47fcde562522 Mon Sep 17 00:00:00 2001 From: Damien Guard Date: Sat, 3 Dec 2016 20:48:17 -0800 Subject: [PATCH 154/184] :arrow_up: autocomplete-plus --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index d0ca0e4a9..072946f09 100644 --- a/package.json +++ b/package.json @@ -89,7 +89,7 @@ "autocomplete-atom-api": "0.10.0", "autocomplete-css": "0.14.1", "autocomplete-html": "0.7.2", - "autocomplete-plus": "2.34.0", + "autocomplete-plus": "2.34.2", "autocomplete-snippets": "1.11.0", "autoflow": "0.29.0", "autosave": "0.23.2", From 5239951fdd54fd1a6289131448a74e32cc99f9f4 Mon Sep 17 00:00:00 2001 From: Damien Guard Date: Sat, 3 Dec 2016 21:13:03 -0800 Subject: [PATCH 155/184] :arrow_up: exception-reporting --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 072946f09..594e15ffe 100644 --- a/package.json +++ b/package.json @@ -100,7 +100,7 @@ "deprecation-cop": "0.55.1", "dev-live-reload": "0.47.0", "encoding-selector": "0.22.0", - "exception-reporting": "0.40.0", + "exception-reporting": "0.40.1", "find-and-replace": "0.204.6", "fuzzy-finder": "1.4.0", "git-diff": "1.2.0", From 7ca95a4ef8e300009015e4dc011a36068c056635 Mon Sep 17 00:00:00 2001 From: Damien Guard Date: Sat, 3 Dec 2016 21:15:37 -0800 Subject: [PATCH 156/184] :arrow_up: find-and-replace --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 594e15ffe..1744432a2 100644 --- a/package.json +++ b/package.json @@ -101,7 +101,7 @@ "dev-live-reload": "0.47.0", "encoding-selector": "0.22.0", "exception-reporting": "0.40.1", - "find-and-replace": "0.204.6", + "find-and-replace": "0.204.7", "fuzzy-finder": "1.4.0", "git-diff": "1.2.0", "go-to-line": "0.31.2", From e1a21f67e53abf42496042776fd4e296819f2027 Mon Sep 17 00:00:00 2001 From: Damien Guard Date: Sat, 3 Dec 2016 21:28:18 -0800 Subject: [PATCH 157/184] :arrow_up: fuzzy-finder --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 1744432a2..22a8ad2d2 100644 --- a/package.json +++ b/package.json @@ -102,7 +102,7 @@ "encoding-selector": "0.22.0", "exception-reporting": "0.40.1", "find-and-replace": "0.204.7", - "fuzzy-finder": "1.4.0", + "fuzzy-finder": "1.4.1", "git-diff": "1.2.0", "go-to-line": "0.31.2", "grammar-selector": "0.48.2", From 01930df83a415b372f77ed3fbf7a1d73141cac3e Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Mon, 5 Dec 2016 13:42:41 -0700 Subject: [PATCH 158/184] :arrow_up: symbols-view --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 22a8ad2d2..46b990b07 100644 --- a/package.json +++ b/package.json @@ -121,7 +121,7 @@ "spell-check": "0.69.0", "status-bar": "1.7.0", "styleguide": "0.48.0", - "symbols-view": "0.113.1", + "symbols-view": "0.113.2", "tabs": "0.103.1", "timecop": "0.33.2", "tree-view": "0.211.1", From 7d4a5e9dff4018a54d038c378d778092ef9b4e11 Mon Sep 17 00:00:00 2001 From: Damien Guard Date: Mon, 5 Dec 2016 19:45:29 -0800 Subject: [PATCH 159/184] Update windows.md --- docs/build-instructions/windows.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/build-instructions/windows.md b/docs/build-instructions/windows.md index 68625b217..4fc51cc56 100644 --- a/docs/build-instructions/windows.md +++ b/docs/build-instructions/windows.md @@ -5,6 +5,7 @@ * Node.js 4.4.x or later (the architecture of node available to the build system will determine whether you build 32-bit or 64-bit Atom) * Python v2.7.x * The python.exe must be available at `%SystemDrive%\Python27\python.exe`. If it is installed elsewhere create a symbolic link to the directory containing the python.exe using: `mklink /d %SystemDrive%\Python27 D:\elsewhere\Python27` +* 7zip (7z.exe available from the command line) - for unpacking Chromedriver and creating distribution zips * Visual Studio, either: * [Visual C++ Build Tools 2015](http://landinghub.visualstudio.com/visual-cpp-build-tools) * [Visual Studio 2013 Update 5](https://www.visualstudio.com/en-us/downloads/download-visual-studio-vs) (Express Edition or better) From eb0b48ffe0c1903278dcf301ba4f451fe6ee92dc Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Tue, 6 Dec 2016 11:58:44 +0100 Subject: [PATCH 160/184] :art: --- src/main-process/atom-window.coffee | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/src/main-process/atom-window.coffee b/src/main-process/atom-window.coffee index f43481c92..09b6bff9c 100644 --- a/src/main-process/atom-window.coffee +++ b/src/main-process/atom-window.coffee @@ -3,6 +3,7 @@ path = require 'path' fs = require 'fs' url = require 'url' {EventEmitter} = require 'events' +ContextMenu = require './context-menu' module.exports = class AtomWindow @@ -100,12 +101,7 @@ class AtomWindow hasProjectPath: -> @getLoadSettings().initialPaths?.length > 0 - setupContextMenu: -> - @browserWindow.on 'context-menu', (menuTemplate) => - @openContextMenu(menuTemplate) - openContextMenu: (menuTemplate) -> - ContextMenu = require './context-menu' new ContextMenu(menuTemplate, this) containsPaths: (paths) -> @@ -168,8 +164,6 @@ class AtomWindow unless url is @browserWindow.webContents.getURL() event.preventDefault() - @setupContextMenu() - if @isSpec # Spec window's web view should always have focus @browserWindow.on 'blur', => From 8e6cef458c8267d7f1ed0f5b8a0557ff76b0af3e Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Tue, 6 Dec 2016 17:29:49 +0100 Subject: [PATCH 161/184] Revert "Flush DOM before displaying context menu" --- src/context-menu-manager.coffee | 4 +--- src/main-process/atom-window.coffee | 10 +++++++--- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/context-menu-manager.coffee b/src/context-menu-manager.coffee index 5f993eaa1..4dc54cede 100644 --- a/src/context-menu-manager.coffee +++ b/src/context-menu-manager.coffee @@ -4,7 +4,6 @@ fs = require 'fs-plus' {calculateSpecificity, validateSelector} = require 'clear-cut' {Disposable} = require 'event-kit' {remote} = require 'electron' -ipcHelpers = require './ipc-helpers' MenuHelpers = require './menu-helpers' platformContextMenu = require('../package.json')?._atomMenu?['context-menu'] @@ -201,8 +200,7 @@ class ContextMenuManager menuTemplate = @templateForEvent(event) return unless menuTemplate?.length > 0 - - ipcHelpers.call('window-method', 'openContextMenu', menuTemplate) + remote.getCurrentWindow().emit('context-menu', menuTemplate) return clear: -> diff --git a/src/main-process/atom-window.coffee b/src/main-process/atom-window.coffee index 09b6bff9c..3c163ba25 100644 --- a/src/main-process/atom-window.coffee +++ b/src/main-process/atom-window.coffee @@ -3,7 +3,6 @@ path = require 'path' fs = require 'fs' url = require 'url' {EventEmitter} = require 'events' -ContextMenu = require './context-menu' module.exports = class AtomWindow @@ -101,8 +100,11 @@ class AtomWindow hasProjectPath: -> @getLoadSettings().initialPaths?.length > 0 - openContextMenu: (menuTemplate) -> - new ContextMenu(menuTemplate, this) + setupContextMenu: -> + ContextMenu = require './context-menu' + + @browserWindow.on 'context-menu', (menuTemplate) => + new ContextMenu(menuTemplate, this) containsPaths: (paths) -> for pathToCheck in paths @@ -164,6 +166,8 @@ class AtomWindow unless url is @browserWindow.webContents.getURL() event.preventDefault() + @setupContextMenu() + if @isSpec # Spec window's web view should always have focus @browserWindow.on 'blur', => From 66d7503e6965dd8af8686ed1a66a9b798274e1e0 Mon Sep 17 00:00:00 2001 From: Damien Guard Date: Tue, 6 Dec 2016 12:43:21 -0800 Subject: [PATCH 162/184] Adjust jumplist projects to match File Explorer --- src/reopen-project-menu-manager.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/reopen-project-menu-manager.js b/src/reopen-project-menu-manager.js index 7b219b3e5..35d802e7d 100644 --- a/src/reopen-project-menu-manager.js +++ b/src/reopen-project-menu-manager.js @@ -60,11 +60,12 @@ export default class ReopenProjectMenuManager { { type: 'custom', name: 'Recent Projects', - items: this.projects.map(p => ({ + items: this.projects.map(project => ({ type: 'task', - title: ReopenProjectMenuManager.createLabel(p), + title: project.paths.map(ReopenProjectMenuManager.betterBaseName).join(', '), + description: project.paths.map(path => `${ReopenProjectMenuManager.betterBaseName(path)} (${path})`).join(' '), program: process.execPath, - args: p.paths.map(path => `"${path}"`).join(' ') })) + args: project.paths.map(path => `"${path}"`).join(' ') })) }, { type: 'recent' }, { items: [ From 9aa53f32f64ee316f75a3fa779de432895923ca6 Mon Sep 17 00:00:00 2001 From: Damien Guard Date: Tue, 6 Dec 2016 14:06:09 -0800 Subject: [PATCH 163/184] Do not add 'empty' projects to history/menu --- src/history-manager.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/history-manager.js b/src/history-manager.js index 657beed97..e5651c069 100644 --- a/src/history-manager.js +++ b/src/history-manager.js @@ -47,6 +47,8 @@ export class HistoryManager { } addProject (paths, lastOpened) { + if (paths.length == 0) return + let project = this.getProject(paths) if (!project) { project = new HistoryProject(paths) From 60fc36a96910a1735ebd7abbd8b4ceb6c0feba09 Mon Sep 17 00:00:00 2001 From: Damien Guard Date: Tue, 6 Dec 2016 14:29:14 -0800 Subject: [PATCH 164/184] Improve array path matching in history --- spec/history-manager-spec.js | 1 + src/history-manager.js | 11 +++++++++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/spec/history-manager-spec.js b/spec/history-manager-spec.js index 425f1efe0..aa1d734c8 100644 --- a/spec/history-manager-spec.js +++ b/spec/history-manager-spec.js @@ -180,6 +180,7 @@ describe("HistoryManager", () => { }) it("returns null when it can't find the project", () => { + debugger const project = historyManager.getProject(['/1']) expect(project).toBeNull() }) diff --git a/src/history-manager.js b/src/history-manager.js index e5651c069..3bab6c988 100644 --- a/src/history-manager.js +++ b/src/history-manager.js @@ -62,9 +62,8 @@ export class HistoryManager { } getProject (paths) { - const pathsString = paths.toString() for (var i = 0; i < this.projects.length; i++) { - if (this.projects[i].paths.toString() === pathsString) { + if (arrayEquivalent(paths, this.projects[i].paths)) { return this.projects[i] } } @@ -100,6 +99,14 @@ export class HistoryManager { } } +function arrayEquivalent(a, b) { + if (a.length != b.length) return false + for (var i=0; i < a.length; i++) { + if (a[i] !== b[i]) return false + } + return true +} + export class HistoryProject { constructor (paths, lastOpened) { this.paths = paths From 027f8351996586b3faf05fdbf07c1aa5c5bd276e Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Mon, 28 Nov 2016 15:13:06 -0800 Subject: [PATCH 165/184] :arrow_up: electron@1.3.12 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 46b990b07..18813ba40 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ "url": "https://github.com/atom/atom/issues" }, "license": "MIT", - "electronVersion": "1.3.9", + "electronVersion": "1.3.12", "dependencies": { "async": "0.2.6", "atom-keymap": "7.1.13", From fab21bc51b33d02c43d44a175b524dc2ca4b3a66 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Tue, 6 Dec 2016 15:58:34 -0800 Subject: [PATCH 166/184] :arrow_up: electron@1.3.13 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 18813ba40..ace973b41 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ "url": "https://github.com/atom/atom/issues" }, "license": "MIT", - "electronVersion": "1.3.12", + "electronVersion": "1.3.13", "dependencies": { "async": "0.2.6", "atom-keymap": "7.1.13", From 9d553d2cfa7b9abc1aafa6ef3aedd257564aca5b Mon Sep 17 00:00:00 2001 From: Damien Guard Date: Tue, 6 Dec 2016 22:30:01 -0800 Subject: [PATCH 167/184] Remove errant debugger call in spec --- spec/history-manager-spec.js | 1 - 1 file changed, 1 deletion(-) diff --git a/spec/history-manager-spec.js b/spec/history-manager-spec.js index aa1d734c8..425f1efe0 100644 --- a/spec/history-manager-spec.js +++ b/spec/history-manager-spec.js @@ -180,7 +180,6 @@ describe("HistoryManager", () => { }) it("returns null when it can't find the project", () => { - debugger const project = historyManager.getProject(['/1']) expect(project).toBeNull() }) From e777c0de8e258bea76e3e53025c6642316858ba9 Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Wed, 7 Dec 2016 11:29:30 +0100 Subject: [PATCH 168/184] Fix lint errors --- src/history-manager.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/history-manager.js b/src/history-manager.js index 3bab6c988..c5117d00f 100644 --- a/src/history-manager.js +++ b/src/history-manager.js @@ -47,7 +47,7 @@ export class HistoryManager { } addProject (paths, lastOpened) { - if (paths.length == 0) return + if (paths.length === 0) return let project = this.getProject(paths) if (!project) { @@ -99,9 +99,9 @@ export class HistoryManager { } } -function arrayEquivalent(a, b) { - if (a.length != b.length) return false - for (var i=0; i < a.length; i++) { +function arrayEquivalent (a, b) { + if (a.length !== b.length) return false + for (var i = 0; i < a.length; i++) { if (a[i] !== b[i]) return false } return true From 078df2281115ca35542cdde1059e198cba4657ec Mon Sep 17 00:00:00 2001 From: Wliu <50Wliu@users.noreply.github.com> Date: Thu, 8 Dec 2016 00:22:16 -0500 Subject: [PATCH 169/184] :arrow_up: bracket-matcher@0.85.0 @ungb --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index ace973b41..a79e05111 100644 --- a/package.json +++ b/package.json @@ -95,7 +95,7 @@ "autosave": "0.23.2", "background-tips": "0.26.1", "bookmarks": "0.43.4", - "bracket-matcher": "0.84.0", + "bracket-matcher": "0.85.0", "command-palette": "0.39.2", "deprecation-cop": "0.55.1", "dev-live-reload": "0.47.0", From bf4e0d35ec27d87fee7769559fa6eaca7666645a Mon Sep 17 00:00:00 2001 From: Ian Olsen Date: Thu, 8 Dec 2016 11:58:47 -0800 Subject: [PATCH 170/184] :arrow_up: atom-keymap@7.1.14 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index a79e05111..e1a30832b 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "electronVersion": "1.3.13", "dependencies": { "async": "0.2.6", - "atom-keymap": "7.1.13", + "atom-keymap": "7.1.14", "atom-space-pen-views": "^2.0.0", "atom-ui": "0.4.1", "babel-core": "5.8.38", From 9be8373930256c5b134118b1c4b4d868c7066ae4 Mon Sep 17 00:00:00 2001 From: Joe Fitzgerald Date: Fri, 9 Dec 2016 10:03:42 +1100 Subject: [PATCH 171/184] Remove console warning MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Per @nathansobo, we’re not sure whether it’s even helpful to know this --- src/text-editor-component.coffee | 1 - 1 file changed, 1 deletion(-) diff --git a/src/text-editor-component.coffee b/src/text-editor-component.coffee index dff5b7215..8bf72d62d 100644 --- a/src/text-editor-component.coffee +++ b/src/text-editor-component.coffee @@ -420,7 +420,6 @@ class TextEditorComponent onScrollViewScroll: => if @mounted - console.warn "TextEditorScrollView scrolled when it shouldn't have." @scrollViewNode.scrollTop = 0 @scrollViewNode.scrollLeft = 0 From efd20774de62fba5a7adc14582b881d82bd0cff3 Mon Sep 17 00:00:00 2001 From: Max Brunsfeld Date: Thu, 8 Dec 2016 16:05:45 -0800 Subject: [PATCH 172/184] Make each atom-text-editor keep a consistent hidden input node for its lifetime Signed-off-by: Damien Guard --- spec/text-editor-element-spec.coffee | 13 +++++++++++++ src/input-component.coffee | 8 +------- src/text-editor-component.coffee | 8 ++++---- src/text-editor-element.coffee | 17 ++++++++++++----- 4 files changed, 30 insertions(+), 16 deletions(-) diff --git a/spec/text-editor-element-spec.coffee b/spec/text-editor-element-spec.coffee index 7ed4a106f..468adaf04 100644 --- a/spec/text-editor-element-spec.coffee +++ b/spec/text-editor-element-spec.coffee @@ -78,6 +78,19 @@ describe "TextEditorElement", -> jasmine.attachToDOM(element) expect(element.querySelectorAll('.decoration').length).toBe initialDecorationCount + it "can be re-focused using the previous `document.activeElement`", -> + editorElement = document.createElement('atom-text-editor') + jasmine.attachToDOM(editorElement) + editorElement.focus() + + activeElement = document.activeElement + + editorElement.remove() + jasmine.attachToDOM(editorElement) + activeElement.focus() + + expect(editorElement.hasFocus()).toBe(true) + describe "focus and blur handling", -> it "proxies focus/blur events to/from the hidden input", -> element = new TextEditorElement diff --git a/src/input-component.coffee b/src/input-component.coffee index b8081b0d6..2883488ce 100644 --- a/src/input-component.coffee +++ b/src/input-component.coffee @@ -1,12 +1,6 @@ module.exports = class InputComponent - constructor: -> - @domNode = document.createElement('input') - @domNode.classList.add('hidden-input') - @domNode.setAttribute('tabindex', -1) - @domNode.setAttribute('data-react-skip-selection-restoration', true) - @domNode.style['-webkit-transform'] = 'translateZ(0)' - @domNode.addEventListener 'paste', (event) -> event.preventDefault() + constructor: (@domNode) -> getDomNode: -> @domNode diff --git a/src/text-editor-component.coffee b/src/text-editor-component.coffee index 8bf72d62d..db0eaddb8 100644 --- a/src/text-editor-component.coffee +++ b/src/text-editor-component.coffee @@ -42,7 +42,7 @@ class TextEditorComponent @assert domNode?, "TextEditorComponent::domNode was set to null." @domNodeValue = domNode - constructor: ({@editor, @hostElement, tileSize, @views, @themes, @styles, @assert}) -> + constructor: ({@editor, @hostElement, tileSize, @views, @themes, @styles, @assert, hiddenInputElement}) -> @tileSize = tileSize if tileSize? @disposables = new CompositeDisposable @@ -70,12 +70,12 @@ class TextEditorComponent @scrollViewNode.classList.add('scroll-view') @domNode.appendChild(@scrollViewNode) - @hiddenInputComponent = new InputComponent - @scrollViewNode.appendChild(@hiddenInputComponent.getDomNode()) + @hiddenInputComponent = new InputComponent(hiddenInputElement) + @scrollViewNode.appendChild(hiddenInputElement) # Add a getModel method to the hidden input component to make it easy to # access the editor in response to DOM events or when using # document.activeElement. - @hiddenInputComponent.getDomNode().getModel = => @editor + hiddenInputElement.getModel = => @editor @linesComponent = new LinesComponent({@presenter, @domElementPool, @assert, @grammars, @views}) @scrollViewNode.appendChild(@linesComponent.getDomNode()) diff --git a/src/text-editor-element.coffee b/src/text-editor-element.coffee index 8f2538ede..ee17867df 100644 --- a/src/text-editor-element.coffee +++ b/src/text-editor-element.coffee @@ -25,8 +25,17 @@ class TextEditorElement extends HTMLElement @emitter = new Emitter @subscriptions = new CompositeDisposable + @hiddenInputElement = document.createElement('input') + @hiddenInputElement.classList.add('hidden-input') + @hiddenInputElement.setAttribute('tabindex', -1) + @hiddenInputElement.setAttribute('data-react-skip-selection-restoration', true) + @hiddenInputElement.style['-webkit-transform'] = 'translateZ(0)' + @hiddenInputElement.addEventListener 'paste', (event) -> event.preventDefault() + @addEventListener 'focus', @focused.bind(this) @addEventListener 'blur', @blurred.bind(this) + @hiddenInputElement.addEventListener 'focus', @focused.bind(this) + @hiddenInputElement.addEventListener 'blur', @inputNodeBlurred.bind(this) @classList.add('editor') @setAttribute('tabindex', -1) @@ -117,12 +126,10 @@ class TextEditorElement extends HTMLElement themes: @themes styles: @styles workspace: @workspace - assert: @assert + assert: @assert, + hiddenInputElement: @hiddenInputElement ) @rootElement.appendChild(@component.getDomNode()) - inputNode = @component.hiddenInputComponent.getDomNode() - inputNode.addEventListener 'focus', @focused.bind(this) - inputNode.addEventListener 'blur', @inputNodeBlurred.bind(this) unmountComponent: -> if @component? @@ -134,7 +141,7 @@ class TextEditorElement extends HTMLElement @component?.focused() blurred: (event) -> - if event.relatedTarget is @component?.hiddenInputComponent.getDomNode() + if event.relatedTarget is @hiddenInputElement event.stopImmediatePropagation() return @component?.blurred() From 6f4a506517a4865686ac17b240476a67003f7cfe Mon Sep 17 00:00:00 2001 From: Max Brunsfeld Date: Thu, 8 Dec 2016 16:12:26 -0800 Subject: [PATCH 173/184] Remove InputComponent.getDomNode method Access the dom node directly in TextEditorElement instead Signed-off-by: Damien Guard --- src/input-component.coffee | 3 --- src/text-editor-component.coffee | 1 - src/text-editor-element.coffee | 1 + 3 files changed, 1 insertion(+), 4 deletions(-) diff --git a/src/input-component.coffee b/src/input-component.coffee index 2883488ce..27543a2fd 100644 --- a/src/input-component.coffee +++ b/src/input-component.coffee @@ -2,9 +2,6 @@ module.exports = class InputComponent constructor: (@domNode) -> - getDomNode: -> - @domNode - updateSync: (state) -> @oldState ?= {} newState = state.hiddenInput diff --git a/src/text-editor-component.coffee b/src/text-editor-component.coffee index db0eaddb8..e8591819f 100644 --- a/src/text-editor-component.coffee +++ b/src/text-editor-component.coffee @@ -346,7 +346,6 @@ class TextEditorComponent focused: -> if @mounted @presenter.setFocused(true) - @hiddenInputComponent.getDomNode().focus() blurred: -> if @mounted diff --git a/src/text-editor-element.coffee b/src/text-editor-element.coffee index ee17867df..8c9792916 100644 --- a/src/text-editor-element.coffee +++ b/src/text-editor-element.coffee @@ -139,6 +139,7 @@ class TextEditorElement extends HTMLElement focused: (event) -> @component?.focused() + @hiddenInputElement.focus() blurred: (event) -> if event.relatedTarget is @hiddenInputElement From 5301c556698c68432f74511dd00f2b98f350efe8 Mon Sep 17 00:00:00 2001 From: portal Date: Fri, 9 Dec 2016 19:00:11 +0200 Subject: [PATCH 174/184] Add desktop.ini to ignored names --- src/config-schema.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/config-schema.js b/src/config-schema.js index 63b92d844..0445d5970 100644 --- a/src/config-schema.js +++ b/src/config-schema.js @@ -12,7 +12,7 @@ const configSchema = { properties: { ignoredNames: { type: 'array', - default: ['.git', '.hg', '.svn', '.DS_Store', '._*', 'Thumbs.db'], + default: ['.git', '.hg', '.svn', '.DS_Store', '._*', 'Thumbs.db', 'desktop.ini'], items: { type: 'string' }, From cd591caaf19e21d4d675c6c2bba3fbc5f46a2890 Mon Sep 17 00:00:00 2001 From: Matthias Winkelmann Date: Fri, 9 Dec 2016 19:15:22 +0100 Subject: [PATCH 175/184] Fixed link (issue label is mac, not os-x) --- docs/build-instructions/macos.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/build-instructions/macos.md b/docs/build-instructions/macos.md index f03d0e385..18169435f 100644 --- a/docs/build-instructions/macos.md +++ b/docs/build-instructions/macos.md @@ -26,4 +26,4 @@ To also install the newly built application, use `script/build --install`. ## Troubleshooting ### macOS build error reports in atom/atom -* Use [this search](https://github.com/atom/atom/search?q=label%3Abuild-error+label%3Aos-x&type=Issues) to get a list of reports about build errors on macOS. +* Use [this search](https://github.com/atom/atom/search?q=label%3Abuild-error+label%3Amac&type=Issues) to get a list of reports about build errors on macOS. From af4da948e9aed3d62de3a52992fab5f8c69e5f36 Mon Sep 17 00:00:00 2001 From: Phil Wyett Date: Sat, 10 Dec 2016 15:14:24 +0000 Subject: [PATCH 176/184] Commit... * Correct requires for libXss across Fedora/RedHat (and derivatives) and SUSE. --- resources/linux/redhat/atom.spec.in | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/resources/linux/redhat/atom.spec.in b/resources/linux/redhat/atom.spec.in index bc2397126..ca9fa290f 100644 --- a/resources/linux/redhat/atom.spec.in +++ b/resources/linux/redhat/atom.spec.in @@ -7,7 +7,12 @@ URL: https://atom.io/ AutoReqProv: no # Avoid libchromiumcontent.so missing dependency Prefix: <%= installDir %> -Requires: lsb-core-noarch, libXss.so.1 +Requires: lsb-core-noarch +%if 0%{?fedora} || 0%{?rhel} +Requires: libXScrnSaver +%else +Requires: libXss1 +%endif %description <%= description %> From 49526593a93cae533696f93e98129c6d1b573e14 Mon Sep 17 00:00:00 2001 From: Phil Wyett Date: Sat, 10 Dec 2016 15:38:15 +0000 Subject: [PATCH 177/184] Commit... * Split instructions for Fedora and RHEL etc. i.e. yum and dnf. * Never use --assumeyes or -y installing packages. atom 1.12.7 shows if this had been done by end users it would have caused them great issue. --- docs/build-instructions/linux.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/docs/build-instructions/linux.md b/docs/build-instructions/linux.md index a05bbff16..2a3e76b69 100644 --- a/docs/build-instructions/linux.md +++ b/docs/build-instructions/linux.md @@ -49,9 +49,13 @@ To also install the newly built application, use `--create-debian-package` or `- sudo update-alternatives --config gcc # choose gcc-5 from the list ``` -### Fedora / CentOS / RHEL +### Fedora -* `sudo dnf --assumeyes install make gcc gcc-c++ glibc-devel git-core libgnome-keyring-devel rpmdevtools libX11-devel libxkbfile-devel` +* `sudo dnf install make gcc gcc-c++ glibc-devel git-core libgnome-keyring-devel rpmdevtools libX11-devel libxkbfile-devel` + +### RHEL / CentOS + +* `sudo yum install make gcc gcc-c++ glibc-devel git-core libgnome-keyring-devel rpmdevtools libX11-devel libxkbfile-devel` ### Arch From 76f08a8f26ffa41c453ecb22e432b2ccf8bddcb7 Mon Sep 17 00:00:00 2001 From: Phil Wyett Date: Sat, 10 Dec 2016 15:46:50 +0000 Subject: [PATCH 178/184] Commit... * Fedora 22 is End Of Life (EOL), so no instructions needed. --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index dc22ae866..0aff6e44b 100644 --- a/README.md +++ b/README.md @@ -53,7 +53,7 @@ Atom is only available for 64-bit Linux systems. The Linux version does not currently automatically update so you will need to repeat these steps to upgrade to future releases. -### Red Hat Linux (Fedora 21 and under, CentOS, Red Hat) +### Red Hat Enterprise Linux (RHEL) / CentOS Atom is only available for 64-bit Linux systems. @@ -64,12 +64,12 @@ Atom is only available for 64-bit Linux systems. The Linux version does not currently automatically update so you will need to repeat these steps to upgrade to future releases. -### Fedora 22+ +### Fedora Atom is only available for 64-bit Linux systems. 1. Download `atom.x86_64.rpm` from the [Atom releases page](https://github.com/atom/atom/releases/latest). -2. Run `sudo dnf install ./atom.x86_64.rpm` on the downloaded package. +2. Run `sudo dnf install atom.x86_64.rpm` on the downloaded package. 3. Launch Atom using the installed `atom` command. The Linux version does not currently automatically update so you will need to From 5a446ff467822eec4c81c3db6665490cc1435a8c Mon Sep 17 00:00:00 2001 From: Damien Guard Date: Mon, 5 Dec 2016 09:53:55 -0800 Subject: [PATCH 179/184] Clean up portable mode, try local .atom before ATOM_HOME --- spec/atom-paths-spec.js | 119 +++++++++++++++++++++++ spec/atom-portable-spec.coffee | 65 ------------- src/atom-environment.coffee | 10 -- src/atom-paths.js | 62 ++++++++++++ src/main-process/atom-application.coffee | 3 +- src/main-process/atom-portable.js | 58 ----------- src/main-process/parse-command-line.js | 6 -- src/main-process/start.js | 35 +------ 8 files changed, 185 insertions(+), 173 deletions(-) create mode 100644 spec/atom-paths-spec.js delete mode 100644 spec/atom-portable-spec.coffee create mode 100644 src/atom-paths.js delete mode 100644 src/main-process/atom-portable.js diff --git a/spec/atom-paths-spec.js b/spec/atom-paths-spec.js new file mode 100644 index 000000000..4b1fc7902 --- /dev/null +++ b/spec/atom-paths-spec.js @@ -0,0 +1,119 @@ +/** @babel */ + +import {it, fit, ffit, fffit, beforeEach, afterEach} from './async-spec-helpers' +import {app} from 'remote' +import atomPaths from '../src/atom-paths' +import fs from 'fs-plus' +import path from 'path' +const temp = require('temp').track() + +describe("AtomPaths", () => { + const portableAtomHomePath = path.join(atomPaths.getAppDirectory(), '.atom') + console.log(portableAtomHomePath) + + afterEach(() => { + atomPaths.setAtomHome(app.getPath('home')) + }) + + describe('SetAtomHomePath', () => { + describe('when a portable .atom folder exists', () => { + beforeEach(() => { + delete process.env.ATOM_HOME + if (!fs.existsSync(portableAtomHomePath)) + fs.mkdirSync(portableAtomHomePath) + }) + + afterEach(() => { + delete process.env.ATOM_HOME + fs.removeSync(portableAtomHomePath) + }) + + it('sets ATOM_HOME to the portable .atom folder if it has permission', () => { + atomPaths.setAtomHome(app.getPath('home')) + expect(process.env.ATOM_HOME).toEqual(portableAtomHomePath) + }) + + it('uses ATOM_HOME if no write access to portable .atom folder', () => { + if (process.platform === 'win32') return + + const readOnlyPath = temp.mkdirSync('atom-path-spec-no-write-access') + process.env.ATOM_HOME = readOnlyPath + fs.chmodSync(portableAtomHomePath, 444) + atomPaths.setAtomHome(app.getPath('home')) + expect(process.env.ATOM_HOME).toEqual(readOnlyPath) + }) + }) + + describe('when a portable folder does not exist', () => { + beforeEach(() => { + delete process.env.ATOM_HOME + fs.removeSync(portableAtomHomePath) + }) + + afterEach(() => { + delete process.env.ATOM_HOME + }) + + it('leaves ATOM_HOME unmodified if it was already set', () => { + const temporaryHome = temp.mkdirSync('atom-spec-setatomhomepath') + process.env.ATOM_HOME = temporaryHome + atomPaths.setAtomHome(app.getPath('home')) + expect(process.env.ATOM_HOME).toEqual(temporaryHome) + }) + + it('sets ATOM_HOME to a default location if not yet set', () => { + const expectedPath = path.join(app.getPath('home'), '.atom') + atomPaths.setAtomHome(app.getPath('home')) + expect(process.env.ATOM_HOME).toEqual(expectedPath) + }) + }) + }) + + describe('setUserData', () => { + let tempAtomHomePath = null + let electronUserDataPath = null + let defaultElectronUserDataPath = null + + beforeEach(() => { + defaultElectronUserDataPath = app.getPath('userData') + delete process.env.ATOM_HOME + tempAtomHomePath = temp.mkdirSync('atom-paths-specs-userdata-home') + tempAtomConfigPath = path.join(tempAtomHomePath, '.atom') + fs.mkdirSync(tempAtomConfigPath) + electronUserDataPath = path.join(tempAtomConfigPath, 'electronUserData') + atomPaths.setAtomHome(tempAtomHomePath) + }) + + afterEach(() => { + delete process.env.ATOM_HOME + fs.removeSync(electronUserDataPath) + temp.cleanupSync() + app.setPath('userData', defaultElectronUserDataPath) + }) + + describe('when an electronUserData folder exists', () => { + it('sets userData path to the folder if it has permission', () => { + fs.mkdirSync(electronUserDataPath) + atomPaths.setUserData(app) + expect(app.getPath('userData')).toEqual(electronUserDataPath) + }) + + it('leaves userData unchanged if no write access to electronUserData folder', () => { + if (process.platform === 'win32') return + + fs.mkdirSync(electronUserDataPath) + fs.chmodSync(electronUserDataPath, 444) + atomPaths.setUserData(app) + fs.chmodSync(electronUserDataPath, 666) + expect(app.getPath('userData')).toEqual(defaultElectronUserDataPath) + }) + }) + + describe('when an electronUserDataPath folder does not exist', () => { + it('leaves userData app path unchanged', () => { + atomPaths.setUserData(app) + expect(app.getPath('userData')).toEqual(defaultElectronUserDataPath) + }) + }) + }) +}) diff --git a/spec/atom-portable-spec.coffee b/spec/atom-portable-spec.coffee deleted file mode 100644 index 7a6cc4d65..000000000 --- a/spec/atom-portable-spec.coffee +++ /dev/null @@ -1,65 +0,0 @@ -path = require 'path' -fs = require 'fs-plus' -AtomPortable = require '../src/main-process/atom-portable' - -portableModeCommonPlatformBehavior = (platform) -> - describe "with ATOM_HOME environment variable", -> - it "returns false", -> - expect(AtomPortable.isPortableInstall(platform, "C:\\some\\path")).toBe false - - describe "without ATOM_HOME environment variable", -> - return # Disabled - interferes with user home directory - - environmentAtomHome = undefined - portableAtomHomePath = path.join(path.dirname(process.execPath), "..", ".atom") - portableAtomHomeNaturallyExists = fs.existsSync(portableAtomHomePath) - portableAtomHomeBackupPath = "#{portableAtomHomePath}.temp" - - beforeEach -> - fs.renameSync(portableAtomHomePath, portableAtomHomeBackupPath) if fs.existsSync(portableAtomHomePath) - - afterEach -> - if portableAtomHomeNaturallyExists - fs.renameSync(portableAtomHomeBackupPath, portableAtomHomePath) if not fs.existsSync(portableAtomHomePath) - else - fs.removeSync(portableAtomHomePath) if fs.existsSync(portableAtomHomePath) - fs.removeSync(portableAtomHomeBackupPath) if fs.existsSync(portableAtomHomeBackupPath) - - describe "with .atom directory sibling to exec", -> - beforeEach -> - fs.mkdirSync(portableAtomHomePath) if not fs.existsSync(portableAtomHomePath) - - describe "without .atom directory sibling to exec", -> - beforeEach -> - fs.removeSync(portableAtomHomePath) if fs.existsSync(portableAtomHomePath) - - it "returns false", -> - expect(AtomPortable.isPortableInstall(platform, environmentAtomHome)).toBe false - -describe "Set Portable Mode on #win32", -> - portableAtomHomePath = path.join(path.dirname(process.execPath), "..", ".atom") - portableAtomHomeNaturallyExists = fs.existsSync(portableAtomHomePath) - portableAtomHomeBackupPath = "#{portableAtomHomePath}.temp" - - beforeEach -> - fs.renameSync(portableAtomHomePath, portableAtomHomeBackupPath) if fs.existsSync(portableAtomHomePath) - - afterEach -> - if portableAtomHomeNaturallyExists - fs.renameSync(portableAtomHomeBackupPath, portableAtomHomePath) if not fs.existsSync(portableAtomHomePath) - else - fs.removeSync(portableAtomHomePath) if fs.existsSync(portableAtomHomePath) - fs.removeSync(portableAtomHomeBackupPath) if fs.existsSync(portableAtomHomeBackupPath) - -describe "Check for Portable Mode", -> - return # Disabled - interferes with user home directory - - describe "Windows", -> - portableModeCommonPlatformBehavior "win32" - - describe "Mac", -> - it "returns false", -> - expect(AtomPortable.isPortableInstall("darwin", "darwin")).toBe false - - describe "Linux", -> - portableModeCommonPlatformBehavior "linux" diff --git a/src/atom-environment.coffee b/src/atom-environment.coffee index 32cfa331d..02bbf8b22 100644 --- a/src/atom-environment.coffee +++ b/src/atom-environment.coffee @@ -240,16 +240,6 @@ class AtomEnvironment extends Model new ReopenProjectMenuManager({@menu, @commands, @history, @config, open: (paths) => @open(pathsToOpen: paths)}) - checkPortableHomeWritable = => - responseChannel = "check-portable-home-writable-response" - ipcRenderer.on responseChannel, (event, response) -> - ipcRenderer.removeAllListeners(responseChannel) - @notifications.addWarning("#{response.message.replace(/([\\\.+\\-_#!])/g, '\\$1')}") if not response.writable - @disposables.add new Disposable -> ipcRenderer.removeAllListeners(responseChannel) - ipcRenderer.send('check-portable-home-writable', responseChannel) - - checkPortableHomeWritable() - attachSaveStateListeners: -> saveState = _.debounce((=> window.requestIdleCallback => @saveState({isUnloading: false}) unless @unloaded diff --git a/src/atom-paths.js b/src/atom-paths.js new file mode 100644 index 000000000..6a5c107b3 --- /dev/null +++ b/src/atom-paths.js @@ -0,0 +1,62 @@ +/** @babel */ + +const fs = require('fs-plus') +const path = require('path') + +const hasWriteAccess = (dir) => { + const testFilePath = path.join(dir, 'write.test') + try { + fs.writeFileSync(testFilePath, new Date().toISOString(), { flag: 'w+' }) + fs.unlinkSync(testFilePath) + return true + } catch (err) { + return false + } +} + +const getAppDirectory = () => { + switch (process.platform) { + case 'darwin': + return path.join(process.execPath.substring(0, process.execPath.indexOf('.app')), '..') + case 'linux': + case 'win32': + return path.join(process.execPath, '..') + } +} + +module.exports = { + setAtomHome: (homePath) => { + // When a read-writeable .atom folder exists above app use that + const portableHomePath = path.join(getAppDirectory(), '.atom') + if (fs.existsSync(portableHomePath)) { + if (hasWriteAccess(portableHomePath)) { + process.env.ATOM_HOME = portableHomePath + } else { + // A path exists so it was intended to be used but we didn't have rights, so warn. + console.log(`Insufficient permission to portable Atom home "${portableHomePath}".`) + } + } + + // Check ATOM_HOME environment variable next + if (process.env.ATOM_HOME !== undefined) { + return + } + + // Fall back to default .atom folder in users home folder + process.env.ATOM_HOME = path.join(homePath, '.atom') + }, + + setUserData: (app) => { + const electronUserDataPath = path.join(process.env.ATOM_HOME, 'electronUserData') + if (fs.existsSync(electronUserDataPath)) { + if (hasWriteAccess(electronUserDataPath)) { + app.setPath('userData', electronUserDataPath) + } else { + // A path exists so it was intended to be used but we didn't have rights, so warn. + console.log(`Insufficient permission to Electron user data "${electronUserDataPath}".`) + } + } + }, + + getAppDirectory: getAppDirectory +} diff --git a/src/main-process/atom-application.coffee b/src/main-process/atom-application.coffee index fc218782a..1f064da6e 100644 --- a/src/main-process/atom-application.coffee +++ b/src/main-process/atom-application.coffee @@ -63,7 +63,7 @@ class AtomApplication exit: (status) -> app.exit(status) constructor: (options) -> - {@resourcePath, @devResourcePath, @version, @devMode, @safeMode, @socketPath, @logFile, @setPortable, @userDataDir} = options + {@resourcePath, @devResourcePath, @version, @devMode, @safeMode, @socketPath, @logFile, @userDataDir} = options @socketPath = null if options.test or options.benchmark or options.benchmarkTest @pidsToOpenWindows = {} @windows = [] @@ -796,7 +796,6 @@ class AtomApplication restart: -> args = [] args.push("--safe") if @safeMode - args.push("--portable") if @setPortable args.push("--log-file=#{@logFile}") if @logFile? args.push("--socket-path=#{@socketPath}") if @socketPath? args.push("--user-data-dir=#{@userDataDir}") if @userDataDir? diff --git a/src/main-process/atom-portable.js b/src/main-process/atom-portable.js deleted file mode 100644 index 7d395c0e7..000000000 --- a/src/main-process/atom-portable.js +++ /dev/null @@ -1,58 +0,0 @@ -const fs = require('fs-plus') -const path = require('path') -const {ipcMain} = require('electron') - -module.exports = class AtomPortable { - static getPortableAtomHomePath () { - const execDirectoryPath = path.dirname(process.execPath) - return path.join(execDirectoryPath, '..', '.atom') - } - - static setPortable (existingAtomHome) { - fs.copySync(existingAtomHome, this.getPortableAtomHomePath()) - } - - static isPortableInstall (platform, environmentAtomHome, defaultHome) { - if (!['linux', 'win32'].includes(platform)) { - return false - } - - if (environmentAtomHome) { - return false - } - - if (!fs.existsSync(this.getPortableAtomHomePath())) { - return false - } - - // Currently checking only that the directory exists and is writable, - // probably want to do some integrity checks on contents in future. - return this.isPortableAtomHomePathWritable(defaultHome) - } - - static isPortableAtomHomePathWritable (defaultHome) { - let writable = false - let message = '' - try { - const writePermissionTestFile = path.join(this.getPortableAtomHomePath(), 'write.test') - - if (!fs.existsSync(writePermissionTestFile)) { - fs.writeFileSync(writePermissionTestFile, 'test') - } - - fs.removeSync(writePermissionTestFile) - writable = true - } catch (error) { - message = `Failed to use portable Atom home directory (${this.getPortableAtomHomePath()}). Using the default instead (${defaultHome}). ${error.message}.` - } - - ipcMain.on('check-portable-home-writable', function (event) { - event.sender.send('check-portable-home-writable-response', { - writable: writable, - message: message - }) - }) - - return writable - } -} diff --git a/src/main-process/parse-command-line.js b/src/main-process/parse-command-line.js index 68a18fa30..4227b63ba 100644 --- a/src/main-process/parse-command-line.js +++ b/src/main-process/parse-command-line.js @@ -41,10 +41,6 @@ module.exports = function parseCommandLine (processArgs) { 'safe', 'Do not load packages from ~/.atom/packages or ~/.atom/dev/packages.' ) - options.boolean('portable').describe( - 'portable', - 'Set portable mode. Copies the ~/.atom folder to be a sibling of the installed Atom location if a .atom folder is not already there.' - ) options.boolean('benchmark').describe('benchmark', 'Open a new window that runs the specified benchmarks.') options.boolean('benchmark-test').describe('benchmark--test', 'Run a faster version of the benchmarks in headless mode.') options.alias('t', 'test').boolean('t').describe('t', 'Run the specified specs and exit with error code on failures.') @@ -104,7 +100,6 @@ module.exports = function parseCommandLine (processArgs) { const profileStartup = args['profile-startup'] const clearWindowState = args['clear-window-state'] const urlsToOpen = [] - const setPortable = args.portable let devMode = args['dev'] let devResourcePath = process.env.ATOM_DEV_RESOURCE_PATH || path.join(app.getPath('home'), 'github', 'atom') let resourcePath = null @@ -152,7 +147,6 @@ module.exports = function parseCommandLine (processArgs) { userDataDir, profileStartup, timeout, - setPortable, clearWindowState, addToLastWindow, mainProcess, diff --git a/src/main-process/start.js b/src/main-process/start.js index d4161e325..f54d263e0 100644 --- a/src/main-process/start.js +++ b/src/main-process/start.js @@ -1,10 +1,10 @@ const {app} = require('electron') -const fs = require('fs-plus') const nslog = require('nslog') const path = require('path') const temp = require('temp') const parseCommandLine = require('./parse-command-line') const startCrashReporter = require('../crash-reporter-start') +const atomPaths = require('../atom-paths') module.exports = function start (resourcePath, startTime) { global.shellStartTime = startTime @@ -23,7 +23,8 @@ module.exports = function start (resourcePath, startTime) { console.log = nslog const args = parseCommandLine(process.argv.slice(1)) - setupAtomHome(args) + atomPaths.setAtomHome(app.getPath('home')) + atomPaths.setUserData() setupCompileCache() if (handleStartupEventWithSquirrel()) { @@ -79,36 +80,6 @@ function handleStartupEventWithSquirrel () { return SquirrelUpdate.handleStartupEvent(app, squirrelCommand) } -function setupAtomHome ({setPortable}) { - if (process.env.ATOM_HOME) { - return - } - - let atomHome = path.join(app.getPath('home'), '.atom') - const AtomPortable = require('./atom-portable') - - if (setPortable && !AtomPortable.isPortableInstall(process.platform, process.env.ATOM_HOME, atomHome)) { - try { - AtomPortable.setPortable(atomHome) - } catch (error) { - console.log(`Failed copying portable directory '${atomHome}' to '${AtomPortable.getPortableAtomHomePath()}'`) - console.log(`${error.message} ${error.stack}`) - } - } - - if (AtomPortable.isPortableInstall(process.platform, process.env.ATOM_HOME, atomHome)) { - atomHome = AtomPortable.getPortableAtomHomePath() - } - - try { - atomHome = fs.realpathSync(atomHome) - } catch (e) { - // Don't throw an error if atomHome doesn't exist. - } - - process.env.ATOM_HOME = atomHome -} - function setupCompileCache () { const CompileCache = require('../compile-cache') CompileCache.setAtomHomeDirectory(process.env.ATOM_HOME) From 21a56b82412ad79954df42d5886c36a119e09276 Mon Sep 17 00:00:00 2001 From: Wliu <50Wliu@users.noreply.github.com> Date: Mon, 12 Dec 2016 10:44:42 -0500 Subject: [PATCH 180/184] :arrow_up: language-git@0.19.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 9844352d9..0247feef9 100644 --- a/package.json +++ b/package.json @@ -135,7 +135,7 @@ "language-csharp": "0.13.0", "language-css": "0.41.0", "language-gfm": "0.88.0", - "language-git": "0.18.0", + "language-git": "0.19.0", "language-go": "0.43.0", "language-html": "0.47.1", "language-hyperlink": "0.16.1", From a17cf6e822ab4cc2008f95572b033a8367c14e1c Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Mon, 12 Dec 2016 17:11:02 +0100 Subject: [PATCH 181/184] Lock git-utils version to 4.1.2 Using a weaker version constraint was causing npm to install version 4.1.4 of this module and, as a result, broke some specs (https://github.com/atom/atom/blob/21a56b82412ad79954df42d5886c36a119e09276/spec/git-repository-spec.coffee#L34). /cc: @damieng Signed-off-by: Nathan Sobo --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 0247feef9..aafc34149 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,7 @@ "fs-plus": "2.9.2", "fstream": "0.1.24", "fuzzaldrin": "^2.1", - "git-utils": "^4.1.2", + "git-utils": "4.1.2", "glob": "^7.1.1", "grim": "1.5.0", "jasmine-json": "~0.0", From a08967028bc4e368e7626c565ba9bc119d243a44 Mon Sep 17 00:00:00 2001 From: Damien Guard Date: Mon, 12 Dec 2016 14:56:07 -0800 Subject: [PATCH 182/184] :arrow_up: electron-winstaller (squirrel) --- script/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/script/package.json b/script/package.json index 2ba28ba41..1e56f13c9 100644 --- a/script/package.json +++ b/script/package.json @@ -9,7 +9,7 @@ "csslint": "1.0.2", "donna": "1.0.13", "electron-packager": "7.3.0", - "electron-winstaller": "2.4.0", + "electron-winstaller": "2.5.0", "fs-extra": "0.30.0", "glob": "7.0.3", "joanna": "0.0.6", From 11ec60d203af61db4bd8381a0a8f9536af049412 Mon Sep 17 00:00:00 2001 From: Damien Guard Date: Mon, 12 Dec 2016 15:52:30 -0800 Subject: [PATCH 183/184] Switch master to new key, old key on old env vars for stable/beta --- script/lib/create-windows-installer.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/script/lib/create-windows-installer.js b/script/lib/create-windows-installer.js index 7de22833b..9c1657bfa 100644 --- a/script/lib/create-windows-installer.js +++ b/script/lib/create-windows-installer.js @@ -28,19 +28,19 @@ module.exports = function (packagedAppPath, codeSign) { } const certPath = path.join(os.tmpdir(), 'win.p12') - const signing = codeSign && process.env.WIN_P12KEY_URL + const signing = codeSign && process.env.ATOM_WIN_CODE_SIGNING_CERT_DOWNLOAD_URL if (signing) { - downloadFileFromGithub(process.env.WIN_P12KEY_URL, certPath) + downloadFileFromGithub(process.env.ATOM_WIN_CODE_SIGNING_CERT_DOWNLOAD_URL, certPath) var signParams = [] signParams.push(`/f ${certPath}`) // Signing cert file - signParams.push(`/p ${process.env.WIN_P12KEY_PASSWORD}`) // Signing cert password + signParams.push(`/p ${process.env.ATOM_WIN_CODE_SIGNING_CERT_PASSWORD}`) // Signing cert password signParams.push('/fd sha256') // File digest algorithm signParams.push('/tr http://timestamp.digicert.com') // Time stamp server signParams.push('/td sha256') // Times stamp algorithm options.signWithParams = signParams.join(' ') } else { - console.log('Skipping code-signing. Specify the --code-sign option and provide a WIN_P12KEY_URL environment variable to perform code-signing'.gray) + console.log('Skipping code-signing. Specify the --code-sign option and provide a ATOM_WIN_CODE_SIGNING_CERT_DOWNLOAD_URL environment variable to perform code-signing'.gray) } const cleanUp = function () { From 270b078f67b57f14048f27454c1c4a643be63f26 Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Tue, 13 Dec 2016 10:12:23 -0700 Subject: [PATCH 184/184] :arrow_up: atom-keymap --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index aafc34149..372e2f162 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "electronVersion": "1.3.13", "dependencies": { "async": "0.2.6", - "atom-keymap": "7.1.14", + "atom-keymap": "7.1.15", "atom-select-list": "0.0.6", "atom-ui": "0.4.1", "babel-core": "5.8.38",