From 27d8e979ced5fdfeab5f015e328a90bc45abd621 Mon Sep 17 00:00:00 2001 From: simurai Date: Thu, 12 Nov 2015 15:43:49 +0900 Subject: [PATCH 01/26] Add more file extensions to match all languages bundled with Atom --- resources/mac/atom-Info.plist | 116 ++++++++++++++++++++++++++++++++++ 1 file changed, 116 insertions(+) diff --git a/resources/mac/atom-Info.plist b/resources/mac/atom-Info.plist index e5337551b..e6dbdb8a2 100644 --- a/resources/mac/atom-Info.plist +++ b/resources/mac/atom-Info.plist @@ -214,6 +214,20 @@ LSHandlerRank Alternate + + CFBundleTypeExtensions + + COMMIT_EDITMSG + + CFBundleTypeIconFile + file.icns + CFBundleTypeName + Commit message + CFBundleTypeRole + Editor + LSHandlerRank + Alternate + CFBundleTypeExtensions @@ -228,6 +242,21 @@ LSHandlerRank Alternate + + CFBundleTypeExtensions + + clj + cljs + + CFBundleTypeIconFile + file.icns + CFBundleTypeName + Clojure source + CFBundleTypeRole + Editor + LSHandlerRank + Alternate + CFBundleTypeExtensions @@ -422,6 +451,20 @@ LSHandlerRank Alternate + + CFBundleTypeExtensions + + go + + CFBundleTypeIconFile + file.icns + CFBundleTypeName + Go source + CFBundleTypeRole + Editor + LSHandlerRank + Alternate + CFBundleTypeExtensions @@ -624,6 +667,20 @@ LSHandlerRank Alternate + + CFBundleTypeExtensions + + less + + CFBundleTypeIconFile + file.icns + CFBundleTypeName + Less source + CFBundleTypeRole + Editor + LSHandlerRank + Alternate + CFBundleTypeExtensions @@ -702,6 +759,20 @@ LSHandlerRank Alternate + + CFBundleTypeExtensions + + mk + + CFBundleTypeIconFile + file.icns + CFBundleTypeName + Makefile source + CFBundleTypeRole + Editor + LSHandlerRank + Alternate + CFBundleTypeExtensions @@ -809,6 +880,21 @@ LSHandlerRank Alternate + + CFBundleTypeExtensions + + mustache + hbs + + CFBundleTypeIconFile + file.icns + CFBundleTypeName + Mustache document + CFBundleTypeRole + Editor + LSHandlerRank + Alternate + CFBundleTypeExtensions @@ -998,6 +1084,7 @@ CFBundleTypeExtensions rhtml + erb CFBundleTypeIconFile file.icns @@ -1039,6 +1126,21 @@ LSHandlerRank Alternate + + CFBundleTypeExtensions + + sass + scss + + CFBundleTypeIconFile + file.icns + CFBundleTypeName + Sass source + CFBundleTypeRole + Editor + LSHandlerRank + Alternate + CFBundleTypeExtensions @@ -1243,6 +1345,20 @@ LSHandlerRank Alternate + + CFBundleTypeExtensions + + toml + + CFBundleTypeIconFile + file.icns + CFBundleTypeName + TOML file + CFBundleTypeRole + Editor + LSHandlerRank + Alternate + CFBundleTypeExtensions From af22a149bdd8989f5c279863ff319bdc652d7c66 Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Mon, 16 Nov 2015 13:47:23 -0800 Subject: [PATCH 02/26] Replace getLongTitle with getUniqueTitle --- src/text-editor.coffee | 24 ++++-------------------- 1 file changed, 4 insertions(+), 20 deletions(-) diff --git a/src/text-editor.coffee b/src/text-editor.coffee index e5b3bd481..29d56c6c8 100644 --- a/src/text-editor.coffee +++ b/src/text-editor.coffee @@ -586,18 +586,18 @@ class TextEditor extends Model else 'untitled' - # Essential: Get unique title for display in other parts of the UI - # such as the window title. + # Essential: Get unique title for display in other parts of the UI, such as + # the window title. # # If the editor's buffer is unsaved, its title is "untitled" # If the editor's buffer is saved, its unique title is formatted as one # of the following, # * "" when it is the only editing buffer with this file name. # * "/.../", where the "..." may be omitted - # if the the direct parent directory is already different. + # if the the direct parent directory is already different. # # Returns a {String} - getUniqueTitle: -> + getLongTitle: -> if sessionPath = @getPath() title = @getTitle() @@ -625,22 +625,6 @@ class TextEditor extends Model else 'untitled' - # Essential: Get the editor's long title for display in other parts of the UI - # such as the window title. - # - # If the editor's buffer is saved, its long title is formatted as - # " - ". If it is unsaved, its title is "untitled" - # - # Returns a {String}. - getLongTitle: -> - if sessionPath = @getPath() - fileName = path.basename(sessionPath) - directory = @project.relativize(path.dirname(sessionPath)) - directory = if directory.length > 0 then directory else path.basename(path.dirname(sessionPath)) - "#{fileName} - #{directory}" - else - 'untitled' - # Essential: Returns the {String} path of this editor's text buffer. getPath: -> @buffer.getPath() From 9b649a3108bf78ca83455fee957ba59936fd9381 Mon Sep 17 00:00:00 2001 From: simurai Date: Tue, 17 Nov 2015 11:08:57 +0900 Subject: [PATCH 03/26] :arrow_up: welcome@v0.33.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 7a586cd4a..46ae3ea5a 100644 --- a/package.json +++ b/package.json @@ -113,7 +113,7 @@ "timecop": "0.33.0", "tree-view": "0.198.0", "update-package-dependencies": "0.10.0", - "welcome": "0.32.0", + "welcome": "0.33.0", "whitespace": "0.32.0", "wrap-guide": "0.38.1", "language-c": "0.49.0", From 4ba4fe856b3a5c22ec1c99910ac2fc7a3df9b186 Mon Sep 17 00:00:00 2001 From: simurai Date: Tue, 17 Nov 2015 11:20:11 +0900 Subject: [PATCH 04/26] :arrow_up: language-javascript@v0.101.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 46ae3ea5a..2929251ab 100644 --- a/package.json +++ b/package.json @@ -127,7 +127,7 @@ "language-html": "0.42.0", "language-hyperlink": "0.15.0", "language-java": "0.16.1", - "language-javascript": "0.100.0", + "language-javascript": "0.101.0", "language-json": "0.17.1", "language-less": "0.28.3", "language-make": "0.20.0", From 86e608dc56fb29a2d7f7a0ad95ef618abfc61c13 Mon Sep 17 00:00:00 2001 From: Wliu <50Wliu@users.noreply.github.com> Date: Mon, 16 Nov 2015 21:53:57 -0500 Subject: [PATCH 05/26] :arrow_down: language-javascript@0.100.0 Specs need to be updated for the changes in 0.101.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 2929251ab..46ae3ea5a 100644 --- a/package.json +++ b/package.json @@ -127,7 +127,7 @@ "language-html": "0.42.0", "language-hyperlink": "0.15.0", "language-java": "0.16.1", - "language-javascript": "0.101.0", + "language-javascript": "0.100.0", "language-json": "0.17.1", "language-less": "0.28.3", "language-make": "0.20.0", From 192e804c8f726dbd52932c7fed8a0f309981dad3 Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Tue, 17 Nov 2015 08:53:13 -0800 Subject: [PATCH 06/26] Fix specs. Duh. --- spec/text-editor-spec.coffee | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/spec/text-editor-spec.coffee b/spec/text-editor-spec.coffee index 05e454da3..39740ebd2 100644 --- a/spec/text-editor-spec.coffee +++ b/spec/text-editor-spec.coffee @@ -163,14 +163,8 @@ describe "TextEditor", -> expect(editor.getTitle()).toBe 'untitled' describe ".getLongTitle()", -> - it "appends the name of the containing directory to the basename of the file", -> - expect(editor.getLongTitle()).toBe 'sample.js - fixtures' - buffer.setPath(undefined) - expect(editor.getLongTitle()).toBe 'untitled' - - describe ".getUniqueTitle()", -> it "returns file name when there is no opened file with identical name", -> - expect(editor.getUniqueTitle()).toBe 'sample.js' + expect(editor.getLongTitle()).toBe 'sample.js' buffer.setPath(undefined) expect(editor.getLongTitle()).toBe 'untitled' @@ -183,8 +177,8 @@ describe "TextEditor", -> atom.workspace.open(path.join('sample-theme-2', 'readme')).then (o) -> editor2 = o runs -> - expect(editor1.getUniqueTitle()).toBe 'sample-theme-1/readme' - expect(editor2.getUniqueTitle()).toBe 'sample-theme-2/readme' + expect(editor1.getLongTitle()).toBe 'sample-theme-1/readme' + expect(editor2.getLongTitle()).toBe 'sample-theme-2/readme' it "or returns /.../ when opened files has identical file names", -> editor1 = null @@ -195,8 +189,8 @@ describe "TextEditor", -> atom.workspace.open(path.join('sample-theme-2', 'src', 'js', 'main.js')).then (o) -> editor2 = o runs -> - expect(editor1.getUniqueTitle()).toBe 'sample-theme-1/.../main.js' - expect(editor2.getUniqueTitle()).toBe 'sample-theme-2/.../main.js' + expect(editor1.getLongTitle()).toBe 'sample-theme-1/.../main.js' + expect(editor2.getLongTitle()).toBe 'sample-theme-2/.../main.js' it "notifies ::onDidChangeTitle observers when the underlying buffer path changes", -> From 049672383c2ee30ed4bd4d00ada7e08cbee508da Mon Sep 17 00:00:00 2001 From: Wliu <50Wliu@users.noreply.github.com> Date: Tue, 17 Nov 2015 12:41:54 -0500 Subject: [PATCH 07/26] :arrow_up: language-javascript@0.101.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 46ae3ea5a..2929251ab 100644 --- a/package.json +++ b/package.json @@ -127,7 +127,7 @@ "language-html": "0.42.0", "language-hyperlink": "0.15.0", "language-java": "0.16.1", - "language-javascript": "0.100.0", + "language-javascript": "0.101.0", "language-json": "0.17.1", "language-less": "0.28.3", "language-make": "0.20.0", From 3a34a95947714d7d506aa4f15f1c45480fdd64a0 Mon Sep 17 00:00:00 2001 From: Wliu <50Wliu@users.noreply.github.com> Date: Tue, 17 Nov 2015 12:47:14 -0500 Subject: [PATCH 08/26] :white_check_mark: Update TokenizedBuffer specs --- spec/tokenized-buffer-spec.coffee | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/spec/tokenized-buffer-spec.coffee b/spec/tokenized-buffer-spec.coffee index 9864acff0..5d6d3cfdc 100644 --- a/spec/tokenized-buffer-spec.coffee +++ b/spec/tokenized-buffer-spec.coffee @@ -154,7 +154,7 @@ describe "TokenizedBuffer", -> it "updates tokens to reflect the change", -> buffer.setTextInRange([[0, 0], [2, 0]], "foo()\n7\n") - expect(tokenizedBuffer.tokenizedLineForRow(0).tokens[1]).toEqual(value: '(', scopes: ['source.js', 'meta.brace.round.js']) + expect(tokenizedBuffer.tokenizedLineForRow(0).tokens[1]).toEqual(value: '(', scopes: ['source.js', 'meta.function-call.js', 'punctuation.definition.arguments.begin.js']) expect(tokenizedBuffer.tokenizedLineForRow(1).tokens[0]).toEqual(value: '7', scopes: ['source.js', 'constant.numeric.js']) # line 2 is unchanged expect(tokenizedBuffer.tokenizedLineForRow(2).tokens[2]).toEqual(value: 'if', scopes: ['source.js', 'keyword.control.js']) @@ -201,7 +201,7 @@ describe "TokenizedBuffer", -> expect(tokenizedBuffer.tokenizedLineForRow(0).tokens[0]).toEqual(value: 'var', scopes: ['source.js', 'storage.modifier.js']) # previous line 3 should be combined with input to form line 1 - expect(tokenizedBuffer.tokenizedLineForRow(1).tokens[0]).toEqual(value: 'foo', scopes: ['source.js']) + expect(tokenizedBuffer.tokenizedLineForRow(1).tokens[0]).toEqual(value: 'foo', scopes: ['source.js', 'meta.function-call.js', 'entity.name.function.js']) expect(tokenizedBuffer.tokenizedLineForRow(1).tokens[6]).toEqual(value: '=', scopes: ['source.js', 'keyword.operator.assignment.js']) # lines below deleted regions should be shifted upward @@ -245,12 +245,12 @@ describe "TokenizedBuffer", -> expect(tokenizedBuffer.tokenizedLineForRow(0).tokens[0]).toEqual( value: 'var', scopes: ['source.js', 'storage.modifier.js']) # 3 new lines inserted - expect(tokenizedBuffer.tokenizedLineForRow(1).tokens[0]).toEqual(value: 'foo', scopes: ['source.js']) - expect(tokenizedBuffer.tokenizedLineForRow(2).tokens[0]).toEqual(value: 'bar', scopes: ['source.js']) - expect(tokenizedBuffer.tokenizedLineForRow(3).tokens[0]).toEqual(value: 'baz', scopes: ['source.js']) + expect(tokenizedBuffer.tokenizedLineForRow(1).tokens[0]).toEqual(value: 'foo', scopes: ['source.js', 'meta.function-call.js', 'entity.name.function.js']) + expect(tokenizedBuffer.tokenizedLineForRow(2).tokens[0]).toEqual(value: 'bar', scopes: ['source.js', 'meta.function-call.js', 'entity.name.function.js']) + expect(tokenizedBuffer.tokenizedLineForRow(3).tokens[0]).toEqual(value: 'baz', scopes: ['source.js', 'meta.function-call.js', 'entity.name.function.js']) # previous line 2 is joined with quux() on line 4 - expect(tokenizedBuffer.tokenizedLineForRow(4).tokens[0]).toEqual(value: 'quux', scopes: ['source.js']) + expect(tokenizedBuffer.tokenizedLineForRow(4).tokens[0]).toEqual(value: 'quux', scopes: ['source.js', 'meta.function-call.js', 'entity.name.function.js']) expect(tokenizedBuffer.tokenizedLineForRow(4).tokens[4]).toEqual(value: 'if', scopes: ['source.js', 'keyword.control.js']) # previous line 3 is pushed down to become line 5 From 8da44c4dfc44703cb5daf699370a68c46079aad7 Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Tue, 17 Nov 2015 11:45:51 -0800 Subject: [PATCH 09/26] Discard highlights that end above the visible row range Fixes #9628 --- spec/text-editor-presenter-spec.coffee | 12 ++++++++++++ src/text-editor-presenter.coffee | 26 ++++++++++++++++++-------- 2 files changed, 30 insertions(+), 8 deletions(-) diff --git a/spec/text-editor-presenter-spec.coffee b/spec/text-editor-presenter-spec.coffee index 54899a1d6..06a857a64 100644 --- a/spec/text-editor-presenter-spec.coffee +++ b/spec/text-editor-presenter-spec.coffee @@ -1704,6 +1704,18 @@ describe "TextEditorPresenter", -> expectUndefinedStateForHighlight(presenter, highlight) + it "does not include highlights that end before the first visible row", -> + editor.setText("Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat.") + editor.setSoftWrapped(true) + editor.setWidth(100, true) + editor.setDefaultCharWidth(10) + + marker = editor.markBufferRange([[0, 0], [0, 4]], invalidate: 'never') + highlight = editor.decorateMarker(marker, type: 'highlight', class: 'a') + presenter = buildPresenter(explicitHeight: 30, scrollTop: 10, tileSize: 2) + + expect(stateForHighlightInTile(presenter, highlight, 0)).toBeUndefined() + it "updates when ::scrollTop changes", -> editor.setSelectedBufferRanges([ [[6, 2], [6, 4]], diff --git a/src/text-editor-presenter.coffee b/src/text-editor-presenter.coffee index 7bd66b87f..b1f28af11 100644 --- a/src/text-editor-presenter.coffee +++ b/src/text-editor-presenter.coffee @@ -1244,14 +1244,7 @@ class TextEditorPresenter updateHighlightState: (decorationId, properties, screenRange) -> return unless @startRow? and @endRow? and @lineHeight? and @hasPixelPositionRequirements() - return if screenRange.isEmpty() - - if screenRange.start.row < @startRow - screenRange.start.row = @startRow - screenRange.start.column = 0 - if screenRange.end.row >= @endRow - screenRange.end.row = @endRow - screenRange.end.column = 0 + @constrainRangeToVisibleRowRange(screenRange) return if screenRange.isEmpty() @@ -1281,6 +1274,23 @@ class TextEditorPresenter true + constrainRangeToVisibleRowRange: (screenRange) -> + if screenRange.start.row < @startRow + screenRange.start.row = @startRow + screenRange.start.column = 0 + + if screenRange.end.row < @startRow + screenRange.end.row = @startRow + screenRange.end.column = 0 + + if screenRange.start.row >= @endRow + screenRange.start.row = @endRow + screenRange.start.column = 0 + + if screenRange.end.row >= @endRow + screenRange.end.row = @endRow + screenRange.end.column = 0 + repositionRegionWithinTile: (region, tileStartRow) -> region.top += @scrollTop - tileStartRow * @lineHeight region.left += @scrollLeft From dffe63b1038942fd0fe44460b38716359d771abf Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Tue, 17 Nov 2015 11:46:47 -0800 Subject: [PATCH 10/26] 1.3.0-beta3 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 1d7b24ce8..1242710fd 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "atom", "productName": "Atom", - "version": "1.3.0-beta2", + "version": "1.3.0-beta3", "description": "A hackable text editor for the 21st Century.", "main": "./src/browser/main.js", "repository": { From 3b2c6afdaf1c901dd23e4d6e2e4be53315f9d3c7 Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Tue, 17 Nov 2015 16:23:38 -0800 Subject: [PATCH 11/26] Fix removeListener calls --- spec/atom-environment-spec.coffee | 14 ++++++++++++++ src/application-delegate.coffee | 8 ++++---- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/spec/atom-environment-spec.coffee b/spec/atom-environment-spec.coffee index f9dbc02f9..ea5258556 100644 --- a/spec/atom-environment-spec.coffee +++ b/spec/atom-environment-spec.coffee @@ -249,6 +249,20 @@ describe "AtomEnvironment", -> expect(buffer.getSubscriptionCount()).toBe 0 + it "does not throw exceptions when unsubscribing from ipc events (regression)", -> + configDirPath = temp.mkdirSync() + fakeDocument = { + addEventListener: -> + removeEventListener: -> + head: document.createElement('head') + body: document.createElement('body') + } + atomEnvironment = new AtomEnvironment({applicationDelegate: atom.applicationDelegate, window, document: fakeDocument}) + spyOn(atomEnvironment.packages, 'getAvailablePackagePaths').andReturn [] + atomEnvironment.startEditorWindow() + atomEnvironment.unloadEditorWindow() + atomEnvironment.destroy() + describe "::openLocations(locations) (called via IPC from browser process)", -> beforeEach -> spyOn(atom.workspace, 'open') diff --git a/src/application-delegate.coffee b/src/application-delegate.coffee index 1999c6e83..1e05b3dbb 100644 --- a/src/application-delegate.coffee +++ b/src/application-delegate.coffee @@ -138,7 +138,7 @@ class ApplicationDelegate ipc.on('message', outerCallback) new Disposable -> - ipc.removeEventListener('message', outerCallback) + ipc.removeListener('message', outerCallback) onUpdateAvailable: (callback) -> outerCallback = (message, detail) -> @@ -147,17 +147,17 @@ class ApplicationDelegate ipc.on('message', outerCallback) new Disposable -> - ipc.removeEventListener('message', outerCallback) + ipc.removeListener('message', outerCallback) onApplicationMenuCommand: (callback) -> ipc.on('command', callback) new Disposable -> - ipc.removeEventListener('command', callback) + ipc.removeListener('command', callback) onContextMenuCommand: (callback) -> ipc.on('context-command', callback) new Disposable -> - ipc.removeEventListener('context-command', callback) + ipc.removeListener('context-command', callback) didCancelWindowUnload: -> ipc.send('did-cancel-window-unload') From 6e72ebb8861464765fec5a7a237068b17a1a75bc Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Tue, 17 Nov 2015 16:28:53 -0800 Subject: [PATCH 12/26] Load packages before deserializing workspace This ensures that package-defined deserializers work. --- src/atom-environment.coffee | 2 +- src/initialize-application-window.coffee | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/atom-environment.coffee b/src/atom-environment.coffee index dcd7ca0ea..d24a33d7c 100644 --- a/src/atom-environment.coffee +++ b/src/atom-environment.coffee @@ -612,7 +612,7 @@ class AtomEnvironment extends Model @registerDefaultTargetForKeymaps() @packages.loadPackages() - + @loadStateSync() @document.body.appendChild(@views.getView(@workspace)) @watchProjectPath() diff --git a/src/initialize-application-window.coffee b/src/initialize-application-window.coffee index acf50bc5d..9294cc07f 100644 --- a/src/initialize-application-window.coffee +++ b/src/initialize-application-window.coffee @@ -24,7 +24,6 @@ window.atom = new AtomEnvironment({ }) atom.displayWindow() -atom.loadStateSync() atom.startEditorWindow() # Workaround for focus getting cleared upon window creation From b0fda338dd349a32cbdd3c7a5802a654ae15a913 Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Tue, 17 Nov 2015 16:47:36 -0800 Subject: [PATCH 13/26] 1.2.2 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 0186d9948..7f0914b69 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "atom", "productName": "Atom", - "version": "1.2.1", + "version": "1.2.2", "description": "A hackable text editor for the 21st Century.", "main": "./src/browser/main.js", "repository": { From 6b877df0d9aa01fe74064d7b8d0c5a7556fe589c Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Tue, 17 Nov 2015 16:58:48 -0800 Subject: [PATCH 14/26] 1.3.0-beta4 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 1242710fd..92da702e3 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "atom", "productName": "Atom", - "version": "1.3.0-beta3", + "version": "1.3.0-beta4", "description": "A hackable text editor for the 21st Century.", "main": "./src/browser/main.js", "repository": { From 12935b4c1355054e1c9bbb68f0858da3c4348800 Mon Sep 17 00:00:00 2001 From: Wliu <50Wliu@users.noreply.github.com> Date: Tue, 17 Nov 2015 20:15:29 -0500 Subject: [PATCH 15/26] :arrow_up: language-python@0.42.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 2929251ab..b1a8da1d8 100644 --- a/package.json +++ b/package.json @@ -136,7 +136,7 @@ "language-perl": "0.31.0", "language-php": "0.34.0", "language-property-list": "0.8.0", - "language-python": "0.41.0", + "language-python": "0.42.1", "language-ruby": "0.62.0", "language-ruby-on-rails": "0.24.0", "language-sass": "0.43.0", From 082ebdb5844061a446bf8e5aa90e147925f85862 Mon Sep 17 00:00:00 2001 From: Wliu <50Wliu@users.noreply.github.com> Date: Tue, 17 Nov 2015 20:18:02 -0500 Subject: [PATCH 16/26] :arrow_up: language-ruby@0.63.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index b1a8da1d8..d95a92302 100644 --- a/package.json +++ b/package.json @@ -137,7 +137,7 @@ "language-php": "0.34.0", "language-property-list": "0.8.0", "language-python": "0.42.1", - "language-ruby": "0.62.0", + "language-ruby": "0.63.0", "language-ruby-on-rails": "0.24.0", "language-sass": "0.43.0", "language-shellscript": "0.20.0", From b9cd7e6890c16bcd4b8944946b3074798ee39452 Mon Sep 17 00:00:00 2001 From: Wliu <50Wliu@users.noreply.github.com> Date: Tue, 17 Nov 2015 20:21:53 -0500 Subject: [PATCH 17/26] :arrow_up: language-javascript@0.101.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index d95a92302..1ed2b4fb5 100644 --- a/package.json +++ b/package.json @@ -127,7 +127,7 @@ "language-html": "0.42.0", "language-hyperlink": "0.15.0", "language-java": "0.16.1", - "language-javascript": "0.101.0", + "language-javascript": "0.101.1", "language-json": "0.17.1", "language-less": "0.28.3", "language-make": "0.20.0", From 91f4ab1f1c6caf56421880fa1dabf0fe75ca13c6 Mon Sep 17 00:00:00 2001 From: Wliu <50Wliu@users.noreply.github.com> Date: Tue, 17 Nov 2015 20:34:51 -0500 Subject: [PATCH 18/26] :arrow_up: whitespace@0.32.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 1ed2b4fb5..fd7970e0e 100644 --- a/package.json +++ b/package.json @@ -114,7 +114,7 @@ "tree-view": "0.198.0", "update-package-dependencies": "0.10.0", "welcome": "0.33.0", - "whitespace": "0.32.0", + "whitespace": "0.32.1", "wrap-guide": "0.38.1", "language-c": "0.49.0", "language-clojure": "0.18.0", From b38e4bc9285d0f5eba942bfcdf0124c8b87cbf7e Mon Sep 17 00:00:00 2001 From: Wliu <50Wliu@users.noreply.github.com> Date: Tue, 17 Nov 2015 22:55:32 -0500 Subject: [PATCH 19/26] :arrow_up: language-ruby@0.64.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index fd7970e0e..b488ba3ce 100644 --- a/package.json +++ b/package.json @@ -137,7 +137,7 @@ "language-php": "0.34.0", "language-property-list": "0.8.0", "language-python": "0.42.1", - "language-ruby": "0.63.0", + "language-ruby": "0.64.0", "language-ruby-on-rails": "0.24.0", "language-sass": "0.43.0", "language-shellscript": "0.20.0", From d0cb8e2c558fe01c094a624fe751cb957b4f6570 Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Tue, 17 Nov 2015 21:00:13 -0800 Subject: [PATCH 20/26] Store project directory paths as state on AtomWindow in browser process MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes #9574 Previously, we were storing the project directory paths as the `initialPaths` key in load settings, which were accessed in the browser process by reading the URL hash. However, this URL hash was not always available, subjecting us to timing issues when opening multiple files in the same folder in rapid succession. We now store the project directory paths directly on AtomWindow instances on creation, then RPC changes from the render process to the browser process with a custom code path. Shout out to :airplane::finnadie:’d @as-cii on this for pairing with me. --- spec/atom-environment-spec.coffee | 8 ++++---- src/application-delegate.coffee | 10 ++++------ src/atom-environment.coffee | 8 ++++---- src/browser/atom-application.coffee | 7 +++---- src/browser/atom-window.coffee | 16 ++++++++-------- ...rs.coffee => get-window-load-settings.coffee} | 6 +----- src/initialize-application-window.coffee | 2 +- src/initialize-test-window.coffee | 2 +- 8 files changed, 26 insertions(+), 33 deletions(-) rename src/{window-load-settings-helpers.coffee => get-window-load-settings.coffee} (74%) diff --git a/spec/atom-environment-spec.coffee b/spec/atom-environment-spec.coffee index 3e6536681..127659cf7 100644 --- a/spec/atom-environment-spec.coffee +++ b/spec/atom-environment-spec.coffee @@ -151,7 +151,7 @@ describe "AtomEnvironment", -> [dir1, dir2] = [temp.mkdirSync("dir1-"), temp.mkdirSync("dir2-")] loadSettings = _.extend atom.getLoadSettings(), - initialPaths: [dir1] + projectDirectoryPaths: [dir1] windowState: null spyOn(atom, 'getLoadSettings').andCallFake -> loadSettings @@ -165,7 +165,7 @@ describe "AtomEnvironment", -> atom.loadStateSync() expect(atom.state.stuff).toBeUndefined() - loadSettings.initialPaths = [dir2, dir1] + loadSettings.projectDirectoryPaths = [dir2, dir1] atom.state = {} atom.loadStateSync() expect(atom.state.stuff).toBe("cool") @@ -173,7 +173,7 @@ describe "AtomEnvironment", -> describe "openInitialEmptyEditorIfNecessary", -> describe "when there are no paths set", -> beforeEach -> - spyOn(atom, 'getLoadSettings').andReturn(initialPaths: []) + spyOn(atom, 'getLoadSettings').andReturn(projectDirectoryPaths: []) it "opens an empty buffer", -> spyOn(atom.workspace, 'open') @@ -191,7 +191,7 @@ describe "AtomEnvironment", -> describe "when the project has a path", -> beforeEach -> - spyOn(atom, 'getLoadSettings').andReturn(initialPaths: ['something']) + spyOn(atom, 'getLoadSettings').andReturn(projectDirectoryPaths: ['something']) spyOn(atom.workspace, 'open') it "does not open an empty buffer", -> diff --git a/src/application-delegate.coffee b/src/application-delegate.coffee index 1e05b3dbb..0ea0bdafd 100644 --- a/src/application-delegate.coffee +++ b/src/application-delegate.coffee @@ -4,7 +4,7 @@ remote = require 'remote' shell = require 'shell' webFrame = require 'web-frame' {Disposable} = require 'event-kit' -{getWindowLoadSettings, setWindowLoadSettings} = require './window-load-settings-helpers' +getWindowLoadSettings = require './get-window-load-settings' module.exports = class ApplicationDelegate @@ -80,10 +80,8 @@ class ApplicationDelegate setRepresentedFilename: (filename) -> ipc.send("call-window-method", "setRepresentedFilename", filename) - setRepresentedDirectoryPaths: (paths) -> - loadSettings = getWindowLoadSettings() - loadSettings['initialPaths'] = paths - setWindowLoadSettings(loadSettings) + setProjectDirectoryPaths: (paths) -> + ipc.send("window-command", "set-project-directory-paths", paths) setAutoHideWindowMenuBar: (autoHide) -> ipc.send("call-window-method", "setAutoHideMenuBar", autoHide) @@ -124,7 +122,7 @@ class ApplicationDelegate else params = _.clone(params) params.title ?= 'Save File' - params.defaultPath ?= getWindowLoadSettings().initialPaths[0] + params.defaultPath ?= getWindowLoadSettings().projectDirectoryPaths[0] dialog = remote.require('dialog') dialog.showSaveDialog remote.getCurrentWindow(), params diff --git a/src/atom-environment.coffee b/src/atom-environment.coffee index ac76daf04..c1b25abf1 100644 --- a/src/atom-environment.coffee +++ b/src/atom-environment.coffee @@ -11,7 +11,7 @@ Model = require './model' WindowEventHandler = require './window-event-handler' StylesElement = require './styles-element' StorageFolder = require './storage-folder' -{getWindowLoadSettings} = require './window-load-settings-helpers' +getWindowLoadSettings = require './get-window-load-settings' registerDefaultCommands = require './register-default-commands' DeserializerManager = require './deserializer-manager' @@ -651,7 +651,7 @@ class AtomEnvironment extends Model openInitialEmptyEditorIfNecessary: -> return unless @config.get('core.openEmptyEditorOnStart') - if @getLoadSettings().initialPaths?.length is 0 and @workspace.getPaneItems().length is 0 + if @getLoadSettings().projectDirectoryPaths?.length is 0 and @workspace.getPaneItems().length is 0 @workspace.open(null) installUncaughtErrorHandler: -> @@ -753,7 +753,7 @@ class AtomEnvironment extends Model # Notify the browser project of the window's current project path watchProjectPath: -> @disposables.add @project.onDidChangePaths => - @applicationDelegate.setRepresentedDirectoryPaths(@project.getPaths()) + @applicationDelegate.setProjectDirectoryPaths(@project.getPaths()) setDocumentEdited: (edited) -> @applicationDelegate.setWindowDocumentEdited?(edited) @@ -789,7 +789,7 @@ class AtomEnvironment extends Model startTime = Date.now() - if stateKey = @getStateKey(@getLoadSettings().initialPaths) + if stateKey = @getStateKey(@getLoadSettings().projectDirectoryPaths) if state = @getStorageFolder().load(stateKey) @state = state diff --git a/src/browser/atom-application.coffee b/src/browser/atom-application.coffee index 8bb44349e..7e1f71390 100644 --- a/src/browser/atom-application.coffee +++ b/src/browser/atom-application.coffee @@ -437,9 +437,8 @@ class AtomApplication return if @quitting states = [] for window in @windows - unless window.isSpec - if loadSettings = window.getLoadSettings() - states.push(initialPaths: loadSettings.initialPaths) + if not window.isSpec and window.projectDirectoryPaths? + states.push(projectDirectoryPaths: window.projectDirectoryPaths) if states.length > 0 or allowEmpty @storageFolder.store('application.json', states) @@ -447,7 +446,7 @@ class AtomApplication if (states = @storageFolder.load('application.json'))?.length > 0 for state in states @openWithOptions(_.extend(options, { - pathsToOpen: state.initialPaths + pathsToOpen: state.projectDirectoryPaths urlsToOpen: [] devMode: @devMode safeMode: @safeMode diff --git a/src/browser/atom-window.coffee b/src/browser/atom-window.coffee index c507b634c..e519d9157 100644 --- a/src/browser/atom-window.coffee +++ b/src/browser/atom-window.coffee @@ -55,14 +55,15 @@ class AtomWindow @constructor.includeShellLoadTime = false loadSettings.shellLoadTime ?= Date.now() - global.shellStartTime - loadSettings.initialPaths = + loadSettings.projectDirectoryPaths = for {pathToOpen} in locationsToOpen when pathToOpen if fs.statSyncNoException(pathToOpen).isFile?() path.dirname(pathToOpen) else pathToOpen - loadSettings.initialPaths.sort() + loadSettings.projectDirectoryPaths.sort() + @setProjectDirectoryPaths(loadSettings.projectDirectoryPaths) @browserWindow.loadSettings = loadSettings @browserWindow.once 'window:loaded', => @@ -87,12 +88,9 @@ class AtomWindow slashes: true hash: encodeURIComponent(JSON.stringify(loadSettings)) - getLoadSettings: -> - if @browserWindow.webContents? and not @browserWindow.webContents.isLoading() - hash = url.parse(@browserWindow.webContents.getUrl()).hash.substr(1) - JSON.parse(decodeURIComponent(hash)) + setProjectDirectoryPaths: (@projectDirectoryPaths) -> - hasProjectPath: -> @getLoadSettings().initialPaths?.length > 0 + hasProjectPath: -> @projectDirectoryPaths?.length > 0 setupContextMenu: -> ContextMenu = require './context-menu' @@ -106,7 +104,7 @@ class AtomWindow true containsPath: (pathToCheck) -> - @getLoadSettings()?.initialPaths?.some (projectPath) -> + @projectDirectoryPaths?.some (projectPath) -> if not projectPath false else if not pathToCheck @@ -121,6 +119,8 @@ class AtomWindow false handleEvents: -> + @browserWindow.on 'set-project-directory-paths', @setProjectDirectoryPaths.bind(this) + @browserWindow.on 'closed', => global.atomApplication.removeWindow(this) diff --git a/src/window-load-settings-helpers.coffee b/src/get-window-load-settings.coffee similarity index 74% rename from src/window-load-settings-helpers.coffee rename to src/get-window-load-settings.coffee index 59ee2f382..85e087645 100644 --- a/src/window-load-settings-helpers.coffee +++ b/src/get-window-load-settings.coffee @@ -3,7 +3,7 @@ _ = require 'underscore-plus' windowLoadSettings = null -exports.getWindowLoadSettings = -> +module.exports = -> windowLoadSettings ?= JSON.parse(window.decodeURIComponent(window.location.hash.substr(1))) clone = _.deepClone(windowLoadSettings) @@ -14,7 +14,3 @@ exports.getWindowLoadSettings = -> remote.getCurrentWindow().loadSettings.windowState = value clone - -exports.setWindowLoadSettings = (settings) -> - windowLoadSettings = settings - location.hash = encodeURIComponent(JSON.stringify(settings)) diff --git a/src/initialize-application-window.coffee b/src/initialize-application-window.coffee index 57aa33ce0..4bc50144c 100644 --- a/src/initialize-application-window.coffee +++ b/src/initialize-application-window.coffee @@ -2,7 +2,7 @@ module.exports = ({blobStore}) -> path = require 'path' require './window' - {getWindowLoadSettings} = require './window-load-settings-helpers' + getWindowLoadSettings = require './get-window-load-settings' {resourcePath, isSpec, devMode} = getWindowLoadSettings() diff --git a/src/initialize-test-window.coffee b/src/initialize-test-window.coffee index 375581a96..97caae276 100644 --- a/src/initialize-test-window.coffee +++ b/src/initialize-test-window.coffee @@ -15,7 +15,7 @@ module.exports = ({blobStore}) -> try path = require 'path' ipc = require 'ipc' - {getWindowLoadSettings} = require './window-load-settings-helpers' + getWindowLoadSettings = require './get-window-load-settings' AtomEnvironment = require '../src/atom-environment' ApplicationDelegate = require '../src/application-delegate' From a8147c09a291357834a12a257e9de8f80cb9ad59 Mon Sep 17 00:00:00 2001 From: Thomas Johansen Date: Fri, 23 Oct 2015 22:01:49 +0200 Subject: [PATCH 21/26] :fire: Remove console.log shims --- src/initialize-test-window.coffee | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/src/initialize-test-window.coffee b/src/initialize-test-window.coffee index 375581a96..f3507b479 100644 --- a/src/initialize-test-window.coffee +++ b/src/initialize-test-window.coffee @@ -21,16 +21,7 @@ module.exports = ({blobStore}) -> {testRunnerPath, legacyTestRunnerPath, headless, logFile, testPaths} = getWindowLoadSettings() - if headless - # Override logging in headless mode so it goes to the console, regardless - # of the --enable-logging flag to Electron. - console.log = (args...) -> - ipc.send 'write-to-stdout', args.join(' ') + '\n' - console.warn = (args...) -> - ipc.send 'write-to-stderr', args.join(' ') + '\n' - console.error = (args...) -> - ipc.send 'write-to-stderr', args.join(' ') + '\n' - else + unless headless # Show window synchronously so a focusout doesn't fire on input elements # that are focused in the very first spec run. remote.getCurrentWindow().show() From ae09d687a0c194b6adefb8eb9450c8d5689716d0 Mon Sep 17 00:00:00 2001 From: Thomas Johansen Date: Fri, 23 Oct 2015 22:02:33 +0200 Subject: [PATCH 22/26] Re-enable console.log via ELECTRON_ENABLE_LOGGING --- atom.sh | 4 ++++ resources/win/atom.cmd | 1 + resources/win/atom.sh | 1 + 3 files changed, 6 insertions(+) diff --git a/atom.sh b/atom.sh index fcabc0e52..ef8dbcdc4 100755 --- a/atom.sh +++ b/atom.sh @@ -50,6 +50,10 @@ if [ $REDIRECT_STDERR ]; then exec 2> /dev/null fi +if [ $EXPECT_OUTPUT ]; then + export ELECTRON_ENABLE_LOGGING=1 +fi + if [ $OS == 'Mac' ]; then if [ -n "$BETA_VERSION" ]; then ATOM_APP_NAME="Atom Beta.app" diff --git a/resources/win/atom.cmd b/resources/win/atom.cmd index 04a4ccbb0..d3188b3ea 100644 --- a/resources/win/atom.cmd +++ b/resources/win/atom.cmd @@ -16,6 +16,7 @@ FOR %%a IN (%*) DO ( ) IF "%EXPECT_OUTPUT%"=="YES" ( + SET ELECTRON_ENABLE_LOGGING=YES "%~dp0\..\..\atom.exe" %* ) ELSE ( "%~dp0\..\app\apm\bin\node.exe" "%~dp0\atom.js" %* diff --git a/resources/win/atom.sh b/resources/win/atom.sh index b6edeeb57..9e2c6da65 100644 --- a/resources/win/atom.sh +++ b/resources/win/atom.sh @@ -18,6 +18,7 @@ done directory=$(dirname "$0") if [ $EXPECT_OUTPUT ]; then + export ELECTRON_ENABLE_LOGGING=1 "$directory/../../atom.exe" "$@" else "$directory/../app/apm/bin/node.exe" "$directory/atom.js" "$@" From c09c04669c05f5ad3462c862554163a16c2aa438 Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Wed, 18 Nov 2015 10:41:07 -0800 Subject: [PATCH 23/26] Coerce boolean options to booleans Pairing with @as-cii --- src/browser/atom-application.coffee | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/browser/atom-application.coffee b/src/browser/atom-application.coffee index 7e1f71390..ceac4f2f3 100644 --- a/src/browser/atom-application.coffee +++ b/src/browser/atom-application.coffee @@ -373,6 +373,8 @@ class AtomApplication # :windowDimensions - Object with height and width keys. # :window - {AtomWindow} to open file paths in. openPaths: ({pathsToOpen, executedFrom, pidToKillWhenClosed, newWindow, devMode, safeMode, windowDimensions, profileStartup, window}={}) -> + devMode = Boolean(devMode) + safeMode = Boolean(safeMode) locationsToOpen = (@locationForPathToOpen(pathToOpen, executedFrom) for pathToOpen in pathsToOpen) pathsToOpen = (locationToOpen.pathToOpen for locationToOpen in locationsToOpen) From 75a52968d0b1c332b0f578c1c2a381d4367b9d90 Mon Sep 17 00:00:00 2001 From: Max Brunsfeld Date: Wed, 18 Nov 2015 10:55:40 -0800 Subject: [PATCH 24/26] Avoid using deprecated 'activate-with-no-open-windows' event The current shim for that event has a missing event argument --- src/browser/atom-application.coffee | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/browser/atom-application.coffee b/src/browser/atom-application.coffee index b68ee2c73..9dc73652e 100644 --- a/src/browser/atom-application.coffee +++ b/src/browser/atom-application.coffee @@ -227,9 +227,10 @@ class AtomApplication event.preventDefault() @openUrl({urlToOpen, @devMode, @safeMode}) - app.on 'activate-with-no-open-windows', (event) => - event.preventDefault() - @emit('application:new-window') + app.on 'activate', (event, hasVisibleWindows) => + unless hasVisibleWindows + event.preventDefault() + @emit('application:new-window') # A request from the associated render process to open a new render process. ipc.on 'open', (event, options) => From c81913f917d1bb5b3ddd36109965cd2f2e04a2ef Mon Sep 17 00:00:00 2001 From: Wliu <50Wliu@users.noreply.github.com> Date: Wed, 18 Nov 2015 15:49:36 -0500 Subject: [PATCH 25/26] :arrow_up: notifications@0.62.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index b488ba3ce..f78c3d9b2 100644 --- a/package.json +++ b/package.json @@ -99,7 +99,7 @@ "link": "0.31.0", "markdown-preview": "0.156.2", "metrics": "0.53.0", - "notifications": "0.61.0", + "notifications": "0.62.0", "open-on-github": "0.40.0", "package-generator": "0.41.0", "release-notes": "0.53.0", From 17c5198299f22138619ec2dadf3c89fd8fac5d15 Mon Sep 17 00:00:00 2001 From: Wliu <50Wliu@users.noreply.github.com> Date: Wed, 18 Nov 2015 16:07:41 -0500 Subject: [PATCH 26/26] :arrow_up: language-xml@0.34.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index f78c3d9b2..e389ade0b 100644 --- a/package.json +++ b/package.json @@ -146,7 +146,7 @@ "language-text": "0.7.0", "language-todo": "0.27.0", "language-toml": "0.16.0", - "language-xml": "0.34.0", + "language-xml": "0.34.1", "language-yaml": "0.24.0" }, "private": true,