From 4a26e1848715cd3c90958e37874f078dcfe96253 Mon Sep 17 00:00:00 2001 From: Damien Guard Date: Tue, 23 Aug 2016 13:32:17 -0700 Subject: [PATCH 01/22] Move exports.WinShell to property to avoid unepected process type used in electron_run_as_node --- exports/atom.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/exports/atom.js b/exports/atom.js index 50c8c687f..7bb7cdb1e 100644 --- a/exports/atom.js +++ b/exports/atom.js @@ -27,7 +27,12 @@ const atomExport = { // Shell integration is required by both Squirrel and Settings-View if (process.platform === 'win32') { - atomExport.WinShell = require('../src/main-process/win-shell') + Object.defineProperty(atomExport, 'WinShell', { + enumerable: true, + get () { + return require('../src/main-process/win-shell') + } + }) } // The following classes can't be used from a Task handler and should therefore From b6a72b058d350920fcdf4281bda00dc49fc2adfc Mon Sep 17 00:00:00 2001 From: Damien Guard Date: Tue, 23 Aug 2016 13:32:42 -0700 Subject: [PATCH 02/22] Set the app name in Windows file handler to handle beta --- src/main-process/win-shell.coffee | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main-process/win-shell.coffee b/src/main-process/win-shell.coffee index 2bb993e9c..2abf9b5c5 100644 --- a/src/main-process/win-shell.coffee +++ b/src/main-process/win-shell.coffee @@ -40,7 +40,10 @@ class ShellOption exports.appName = appName exports.fileHandler = new ShellOption("\\Software\\Classes\\Applications\\#{exeName}", - [{key: 'shell\\open\\command', name: '', value: "#{appPath} \"%1\""}] + [ + {key: 'shell\\open', name: 'FriendlyAppName', value: "#{appName}"}, + {key: 'shell\\open\\command', name: '', value: "#{appPath} \"%1\""} + ] ) contextParts = [ From 922f44ff11767547c8e3d0a4abf965492d57f91d Mon Sep 17 00:00:00 2001 From: Damien Guard Date: Wed, 24 Aug 2016 18:08:25 -0700 Subject: [PATCH 03/22] Color serialization fixes atom/settings-view#832 --- src/color.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/color.js b/src/color.js index 9db9e9b16..6208d6837 100644 --- a/src/color.js +++ b/src/color.js @@ -85,6 +85,10 @@ export default class Color { return `rgba(${this.red}, ${this.green}, ${this.blue}, ${this.alpha})` } + toJSON () { + return this.alpha === 1 ? this.toHexString() : this.toRGBAString() + } + isEqual (color) { if (this === color) { return true From 9de172a9edd9a2df28f217ffa9984c1b58f15283 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Machist=C3=A9=20N=2E=20Quintana?= Date: Wed, 24 Aug 2016 20:34:13 -0700 Subject: [PATCH 04/22] :arrow_up: notifications@0.65.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index aae19d538..93fe7b5f0 100644 --- a/package.json +++ b/package.json @@ -106,7 +106,7 @@ "link": "0.31.1", "markdown-preview": "0.158.0", "metrics": "0.53.1", - "notifications": "0.65.0", + "notifications": "0.65.1", "open-on-github": "1.2.0", "package-generator": "1.0.0", "settings-view": "0.241.2", From 829fbe00e61381967a827c83fd626f1ac1745032 Mon Sep 17 00:00:00 2001 From: Machiste Quintana Date: Wed, 24 Aug 2016 20:42:21 -0700 Subject: [PATCH 05/22] :arrow_up: about@1.7.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 93fe7b5f0..2a0099ed0 100644 --- a/package.json +++ b/package.json @@ -77,7 +77,7 @@ "one-light-syntax": "1.3.0", "solarized-dark-syntax": "1.0.2", "solarized-light-syntax": "1.0.2", - "about": "1.6.0", + "about": "1.7.0", "archive-view": "0.61.1", "autocomplete-atom-api": "0.10.0", "autocomplete-css": "0.11.2", From dd73e3e2ec705bf3324aca3c8c4ef1b19bc0a7e7 Mon Sep 17 00:00:00 2001 From: Machiste Quintana Date: Wed, 24 Aug 2016 20:46:19 -0700 Subject: [PATCH 06/22] :arrow_up: welcome@0.35.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 2a0099ed0..aabf2280c 100644 --- a/package.json +++ b/package.json @@ -119,7 +119,7 @@ "timecop": "0.33.2", "tree-view": "0.209.0", "update-package-dependencies": "0.10.0", - "welcome": "0.34.0", + "welcome": "0.35.0", "whitespace": "0.33.0", "wrap-guide": "0.38.2", "language-c": "0.52.1", From 406e1d1349f6c792f13e3c33a914fcf759704e29 Mon Sep 17 00:00:00 2001 From: Machiste Quintana Date: Wed, 24 Aug 2016 20:46:59 -0700 Subject: [PATCH 07/22] :arrow_up: exception-reporting@0.40.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index aabf2280c..91fa60b21 100644 --- a/package.json +++ b/package.json @@ -93,7 +93,7 @@ "deprecation-cop": "0.54.1", "dev-live-reload": "0.47.0", "encoding-selector": "0.22.0", - "exception-reporting": "0.39.0", + "exception-reporting": "0.40.0", "find-and-replace": "0.201.1", "fuzzy-finder": "1.4.0", "git-diff": "1.1.0", From 5a7764d5bff4fd087b99721eb45e6c3a3c28798d Mon Sep 17 00:00:00 2001 From: Machiste Quintana Date: Wed, 24 Aug 2016 20:47:35 -0700 Subject: [PATCH 08/22] :arrow_up: metrics@1.0.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 91fa60b21..2219f20bc 100644 --- a/package.json +++ b/package.json @@ -105,7 +105,7 @@ "line-ending-selector": "0.5.0", "link": "0.31.1", "markdown-preview": "0.158.0", - "metrics": "0.53.1", + "metrics": "1.0.0", "notifications": "0.65.1", "open-on-github": "1.2.0", "package-generator": "1.0.0", From d44dbb373d084623d60dbc667bc90e0f9f98564a Mon Sep 17 00:00:00 2001 From: Damien Guard Date: Wed, 24 Aug 2016 21:45:21 -0700 Subject: [PATCH 09/22] Remove trailing context menu separator fixing #5390 --- spec/context-menu-manager-spec.coffee | 11 +++++++++++ src/context-menu-manager.coffee | 4 ++++ 2 files changed, 15 insertions(+) diff --git a/spec/context-menu-manager-spec.coffee b/spec/context-menu-manager-spec.coffee index b336361f8..63815d1dd 100644 --- a/spec/context-menu-manager-spec.coffee +++ b/spec/context-menu-manager-spec.coffee @@ -149,6 +149,17 @@ describe "ContextMenuManager", -> shouldDisplay = false expect(contextMenu.templateForEvent(dispatchedEvent)).toEqual [] + it "prunes a trailing separator", -> + contextMenu.add + '.grandchild': [ + {label: 'A', command: 'a'}, + {type: 'separator'}, + {label: 'B', command: 'b'}, + {type: 'separator'} + ] + + expect(contextMenu.templateForEvent({target: grandchild}).length).toBe(3) + it "throws an error when the selector is invalid", -> addError = null try diff --git a/src/context-menu-manager.coffee b/src/context-menu-manager.coffee index 936a9c6b6..1fe780db3 100644 --- a/src/context-menu-manager.coffee +++ b/src/context-menu-manager.coffee @@ -145,6 +145,10 @@ class ContextMenuManager currentTarget = currentTarget.parentElement + # Remove trailing separator + if template.length > 0 and template[template.length - 1].type is 'separator' + template.splice(template.length-1, 1) + template # Returns an object compatible with `::add()` or `null`. From 7304fb31cd9646fb2f46e7204a47a76ede726c72 Mon Sep 17 00:00:00 2001 From: simurai Date: Thu, 25 Aug 2016 20:29:30 +0900 Subject: [PATCH 10/22] Add Windows file icon --- resources/win/file.ico | Bin 0 -> 65521 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 resources/win/file.ico diff --git a/resources/win/file.ico b/resources/win/file.ico new file mode 100644 index 0000000000000000000000000000000000000000..138b2ba7cf61c0559b05839bc09e7eaf370ec4ee GIT binary patch literal 65521 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 Date: Thu, 25 Aug 2016 11:31:17 -0700 Subject: [PATCH 11/22] Copy file icon and use as icon for Atom associated files --- build/tasks/build-task.coffee | 7 ++----- src/main-process/win-shell.coffee | 6 +++++- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/build/tasks/build-task.coffee b/build/tasks/build-task.coffee index be72d52c1..d69e46efc 100644 --- a/build/tasks/build-task.coffee +++ b/build/tasks/build-task.coffee @@ -176,11 +176,8 @@ module.exports = (grunt) -> cp path.join('resources', 'mac', 'speakeasy.pem'), path.resolve(appDir, '..', 'speakeasy.pem') if process.platform is 'win32' - cp path.join('resources', 'win', 'atom.cmd'), path.join(shellAppDir, 'resources', 'cli', 'atom.cmd') - cp path.join('resources', 'win', 'atom.sh'), path.join(shellAppDir, 'resources', 'cli', 'atom.sh') - cp path.join('resources', 'win', 'atom.js'), path.join(shellAppDir, 'resources', 'cli', 'atom.js') - cp path.join('resources', 'win', 'apm.cmd'), path.join(shellAppDir, 'resources', 'cli', 'apm.cmd') - cp path.join('resources', 'win', 'apm.sh'), path.join(shellAppDir, 'resources', 'cli', 'apm.sh') + [ 'atom.cmd', 'atom.sh', 'atom.js', 'apm.cmd', 'apm.sh', 'file.ico' ] + .forEach (file) -> cp path.join('resources', 'win', file), path.join(shellAppDir, 'resources', 'cli', file) if process.platform is 'linux' cp path.join('resources', 'app-icons', channel, 'png'), path.join(buildDir, 'icons') diff --git a/src/main-process/win-shell.coffee b/src/main-process/win-shell.coffee index 2bb993e9c..ea070f555 100644 --- a/src/main-process/win-shell.coffee +++ b/src/main-process/win-shell.coffee @@ -3,6 +3,7 @@ Path = require 'path' exeName = Path.basename(process.execPath) appPath = "\"#{process.execPath}\"" +fileIconPath = "\"#{Path.join(process.execPath, '..', 'resources', 'cli', 'file.ico')}\"" isBeta = appPath.includes(' Beta') appName = exeName.replace('atom', (if isBeta then 'Atom Beta' else 'Atom' )).replace('.exe', '') @@ -40,7 +41,10 @@ class ShellOption exports.appName = appName exports.fileHandler = new ShellOption("\\Software\\Classes\\Applications\\#{exeName}", - [{key: 'shell\\open\\command', name: '', value: "#{appPath} \"%1\""}] + [ + {key: 'shell\\open\\command', name: '', value: "#{appPath} \"%1\""}, + {key: 'DefaultIcon', name: '', value: "#{fileIconPath}"} + ] ) contextParts = [ From 0f88949832c46ed6ecec40df9a929f198b7650c7 Mon Sep 17 00:00:00 2001 From: Damien Guard Date: Thu, 25 Aug 2016 12:49:29 -0700 Subject: [PATCH 12/22] Remove all redundant separators --- spec/context-menu-manager-spec.coffee | 40 ++++++++++++++++++++++++++- src/context-menu-manager.coffee | 17 ++++++++++-- 2 files changed, 53 insertions(+), 4 deletions(-) diff --git a/spec/context-menu-manager-spec.coffee b/spec/context-menu-manager-spec.coffee index 63815d1dd..94b45d4fa 100644 --- a/spec/context-menu-manager-spec.coffee +++ b/spec/context-menu-manager-spec.coffee @@ -149,7 +149,7 @@ describe "ContextMenuManager", -> shouldDisplay = false expect(contextMenu.templateForEvent(dispatchedEvent)).toEqual [] - it "prunes a trailing separator", -> + fit "prunes a trailing separator", -> contextMenu.add '.grandchild': [ {label: 'A', command: 'a'}, @@ -160,6 +160,44 @@ describe "ContextMenuManager", -> expect(contextMenu.templateForEvent({target: grandchild}).length).toBe(3) + fit "prunes a leading separator", -> + contextMenu.add + '.grandchild': [ + {type: 'separator'}, + {label: 'A', command: 'a'}, + {type: 'separator'}, + {label: 'B', command: 'b'} + ] + + expect(contextMenu.templateForEvent({target: grandchild}).length).toBe(3) + + fit "prunes duplicate separators", -> + contextMenu.add + '.grandchild': [ + {label: 'A', command: 'a'}, + {type: 'separator'}, + {type: 'separator'}, + {label: 'B', command: 'b'} + ] + + expect(contextMenu.templateForEvent({target: grandchild}).length).toBe(3) + + fit "prunes all redundant separators", -> + contextMenu.add + '.grandchild': [ + {type: 'separator'}, + {type: 'separator'}, + {label: 'A', command: 'a'}, + {type: 'separator'}, + {type: 'separator'}, + {label: 'B', command: 'b'} + {label: 'C', command: 'c'} + {type: 'separator'}, + {type: 'separator'}, + ] + + expect(contextMenu.templateForEvent({target: grandchild}).length).toBe(4) + it "throws an error when the selector is invalid", -> addError = null try diff --git a/src/context-menu-manager.coffee b/src/context-menu-manager.coffee index 1fe780db3..64360dd2e 100644 --- a/src/context-menu-manager.coffee +++ b/src/context-menu-manager.coffee @@ -145,12 +145,23 @@ class ContextMenuManager currentTarget = currentTarget.parentElement - # Remove trailing separator - if template.length > 0 and template[template.length - 1].type is 'separator' - template.splice(template.length-1, 1) + @pruneRedundantSeparators(template) template + pruneRedundantSeparators: (menu) -> + keepNextItemIfSeparator = false + index = 0 + while index < menu.length + if menu[index].type is 'separator' + if not keepNextItemIfSeparator or index is menu.length - 1 + menu.splice(index, 1) + else + index++ + else + keepNextItemIfSeparator = true + index++ + # Returns an object compatible with `::add()` or `null`. cloneItemForEvent: (item, event) -> return null if item.devMode and not @devMode From 147ebe675d9fd06570c70bbee598878ef93dc2a2 Mon Sep 17 00:00:00 2001 From: simurai Date: Fri, 26 Aug 2016 10:29:00 +0900 Subject: [PATCH 13/22] :arrow_up: base16-tomorrow-dark-theme@v1.2.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 2219f20bc..68dfb2f17 100644 --- a/package.json +++ b/package.json @@ -69,7 +69,7 @@ "atom-dark-ui": "0.52.0", "atom-light-syntax": "0.28.0", "atom-light-ui": "0.44.0", - "base16-tomorrow-dark-theme": "1.1.0", + "base16-tomorrow-dark-theme": "1.2.0", "base16-tomorrow-light-theme": "1.1.1", "one-dark-ui": "1.5.0", "one-light-ui": "1.5.0", From a0f766913cc0f364520197f16500435a0e04b3e6 Mon Sep 17 00:00:00 2001 From: simurai Date: Fri, 26 Aug 2016 10:29:52 +0900 Subject: [PATCH 14/22] :arrow_up: base16-tomorrow-light-theme@v1.2.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 68dfb2f17..9cde540fc 100644 --- a/package.json +++ b/package.json @@ -70,7 +70,7 @@ "atom-light-syntax": "0.28.0", "atom-light-ui": "0.44.0", "base16-tomorrow-dark-theme": "1.2.0", - "base16-tomorrow-light-theme": "1.1.1", + "base16-tomorrow-light-theme": "1.2.0", "one-dark-ui": "1.5.0", "one-light-ui": "1.5.0", "one-dark-syntax": "1.3.0", From bf463d59c8c9934155c059f0e8e74e2457a8b829 Mon Sep 17 00:00:00 2001 From: Wliu <50Wliu@users.noreply.github.com> Date: Thu, 25 Aug 2016 22:44:57 -0400 Subject: [PATCH 15/22] Unfocus specs /cc @damieng --- spec/context-menu-manager-spec.coffee | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/spec/context-menu-manager-spec.coffee b/spec/context-menu-manager-spec.coffee index 94b45d4fa..c39f33cea 100644 --- a/spec/context-menu-manager-spec.coffee +++ b/spec/context-menu-manager-spec.coffee @@ -149,7 +149,7 @@ describe "ContextMenuManager", -> shouldDisplay = false expect(contextMenu.templateForEvent(dispatchedEvent)).toEqual [] - fit "prunes a trailing separator", -> + it "prunes a trailing separator", -> contextMenu.add '.grandchild': [ {label: 'A', command: 'a'}, @@ -160,7 +160,7 @@ describe "ContextMenuManager", -> expect(contextMenu.templateForEvent({target: grandchild}).length).toBe(3) - fit "prunes a leading separator", -> + it "prunes a leading separator", -> contextMenu.add '.grandchild': [ {type: 'separator'}, @@ -171,7 +171,7 @@ describe "ContextMenuManager", -> expect(contextMenu.templateForEvent({target: grandchild}).length).toBe(3) - fit "prunes duplicate separators", -> + it "prunes duplicate separators", -> contextMenu.add '.grandchild': [ {label: 'A', command: 'a'}, @@ -182,7 +182,7 @@ describe "ContextMenuManager", -> expect(contextMenu.templateForEvent({target: grandchild}).length).toBe(3) - fit "prunes all redundant separators", -> + it "prunes all redundant separators", -> contextMenu.add '.grandchild': [ {type: 'separator'}, From 5b576698591082142b0ceccb13a80e06458d4adc Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Fri, 26 Aug 2016 15:13:37 +0200 Subject: [PATCH 16/22] Disable telemetry on AtomApplication tests and smoke-spec.coffee Unless a choice has been made by the user, this tab always shows up as the first one when opening Atom, thus breaking some of the assumptions we make in the main process tests. --- spec/integration/fixtures/atom-home/config.cson | 5 ----- spec/integration/smoke-spec.coffee | 8 +++++++- spec/main-process/atom-application.test.js | 5 ++++- 3 files changed, 11 insertions(+), 7 deletions(-) delete mode 100644 spec/integration/fixtures/atom-home/config.cson diff --git a/spec/integration/fixtures/atom-home/config.cson b/spec/integration/fixtures/atom-home/config.cson deleted file mode 100644 index 4cb63891a..000000000 --- a/spec/integration/fixtures/atom-home/config.cson +++ /dev/null @@ -1,5 +0,0 @@ -"*": - welcome: - showOnStartup: false - "exception-reporting": - userId: "7c0a3c52-795c-5e20-5323-64efcf91f212" diff --git a/spec/integration/smoke-spec.coffee b/spec/integration/smoke-spec.coffee index 34c78db32..3f921c4fe 100644 --- a/spec/integration/smoke-spec.coffee +++ b/spec/integration/smoke-spec.coffee @@ -1,5 +1,6 @@ fs = require 'fs-plus' path = require 'path' +season = require 'season' temp = require('temp').track() runAtom = require './helpers/start-atom' @@ -8,7 +9,12 @@ describe "Smoke Test", -> beforeEach -> jasmine.useRealClock() - fs.writeFileSync(path.join(atomHome, 'config.cson'), fs.readFileSync(path.join(__dirname, 'fixtures', 'atom-home', 'config.cson'))) + season.writeFileSync(path.join(atomHome, 'config.cson'), { + '*': { + welcome: {showOnStartup: false}, + core: {telemetryConsent: 'no'} + } + }) it "can open a file in Atom and perform basic operations on it", -> tempDirPath = temp.mkdirSync("empty-dir") diff --git a/spec/main-process/atom-application.test.js b/spec/main-process/atom-application.test.js index bf788c660..0c3218a99 100644 --- a/spec/main-process/atom-application.test.js +++ b/spec/main-process/atom-application.test.js @@ -22,7 +22,10 @@ describe('AtomApplication', function () { // 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')) season.writeFileSync(path.join(process.env.ATOM_HOME, 'config.cson'), { - '*': {welcome: {showOnStartup: false}} + '*': { + welcome: {showOnStartup: false}, + core: {telemetryConsent: 'no'} + } }) atomApplicationsToDestroy = [] }) From 5e6c9bed0405c2b7383e9176945d68b99a018732 Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Fri, 26 Aug 2016 15:47:32 +0200 Subject: [PATCH 17/22] Send notifications to Slack when a CircleCI build of master completes --- circle.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/circle.yml b/circle.yml index 36d9962c1..b2b7143e6 100644 --- a/circle.yml +++ b/circle.yml @@ -40,3 +40,9 @@ test: post: - zip -r out/Atom.zip out/Atom.app + +experimental: + notify: + branches: + only: + - master From 4362de78779f324aff2c324175f0c2d932f9017d Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Fri, 26 Aug 2016 16:28:28 +0200 Subject: [PATCH 18/22] :arrow_up: tree-view --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 9cde540fc..73e94ec42 100644 --- a/package.json +++ b/package.json @@ -117,7 +117,7 @@ "symbols-view": "0.113.1", "tabs": "0.101.0", "timecop": "0.33.2", - "tree-view": "0.209.0", + "tree-view": "0.209.2", "update-package-dependencies": "0.10.0", "welcome": "0.35.0", "whitespace": "0.33.0", From 2bb713712cb052dc3f65aee52d15b05df5715ba7 Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Fri, 26 Aug 2016 18:33:12 +0200 Subject: [PATCH 19/22] :arrow_up: welcome --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 73e94ec42..3d1232187 100644 --- a/package.json +++ b/package.json @@ -119,7 +119,7 @@ "timecop": "0.33.2", "tree-view": "0.209.2", "update-package-dependencies": "0.10.0", - "welcome": "0.35.0", + "welcome": "0.35.1", "whitespace": "0.33.0", "wrap-guide": "0.38.2", "language-c": "0.52.1", From eff5fa6c0a03cbabc3eb93bd1b06781e5796ff81 Mon Sep 17 00:00:00 2001 From: simurai Date: Sat, 27 Aug 2016 13:12:16 +0900 Subject: [PATCH 20/22] :arrow_up: settings-view@v0.242.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 3d1232187..c7d073e49 100644 --- a/package.json +++ b/package.json @@ -109,7 +109,7 @@ "notifications": "0.65.1", "open-on-github": "1.2.0", "package-generator": "1.0.0", - "settings-view": "0.241.2", + "settings-view": "0.242.0", "snippets": "1.0.2", "spell-check": "0.68.2", "status-bar": "1.4.1", From b3009f13875df5f1c6b04ea7bea522ca87164243 Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Sun, 28 Aug 2016 06:17:41 -0600 Subject: [PATCH 21/22] Focus application on all code paths that open windows in main process MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit I think this should take the application out of “app nap” on macOS, leading to better responsiveness when opening paths from the CLI. --- src/main-process/atom-application.coffee | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main-process/atom-application.coffee b/src/main-process/atom-application.coffee index 0fd7f5630..541f70990 100644 --- a/src/main-process/atom-application.coffee +++ b/src/main-process/atom-application.coffee @@ -109,6 +109,8 @@ class AtomApplication @loadState(options) or @openPath(options) openWithOptions: ({initialPaths, pathsToOpen, executedFrom, urlsToOpen, test, pidToKillWhenClosed, devMode, safeMode, newWindow, logFile, profileStartup, timeout, clearWindowState, addToLastWindow, env}) -> + app.focus() + if test @runTests({headless: true, devMode, @resourcePath, executedFrom, pathsToOpen, logFile, timeout, env}) else if pathsToOpen.length > 0 From 6d25cc63d0c158f47016ad1ac92b90f6889ebe5e Mon Sep 17 00:00:00 2001 From: Wliu <50Wliu@users.noreply.github.com> Date: Sun, 28 Aug 2016 17:11:00 -0400 Subject: [PATCH 22/22] :arrow_up: bookmarks@0.42.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index c7d073e49..673b6aa92 100644 --- a/package.json +++ b/package.json @@ -87,7 +87,7 @@ "autoflow": "0.27.0", "autosave": "0.23.1", "background-tips": "0.26.1", - "bookmarks": "0.41.1", + "bookmarks": "0.42.0", "bracket-matcher": "0.82.1", "command-palette": "0.38.0", "deprecation-cop": "0.54.1",