From defbe3578312f415563a2c190ed2cc89727b54b2 Mon Sep 17 00:00:00 2001 From: Damien Guard Date: Thu, 19 May 2016 14:49:16 -0700 Subject: [PATCH 01/13] Enable Windows codesigning via Squirrel for MSI --- build/Gruntfile.coffee | 12 +++- build/tasks/codesign-task.coffee | 94 +++++++++++++++++++------------- 2 files changed, 65 insertions(+), 41 deletions(-) diff --git a/build/Gruntfile.coffee b/build/Gruntfile.coffee index 16e0ed5d6..b248eda2e 100644 --- a/build/Gruntfile.coffee +++ b/build/Gruntfile.coffee @@ -172,6 +172,8 @@ module.exports = (grunt) -> dest: path.join(appDir, jsFile) }) + windowsInstallerConfig = + grunt.initConfig pkg: grunt.file.readJSON('package.json') @@ -286,12 +288,16 @@ module.exports = (grunt) -> ciTasks.push('set-version', 'check-licenses', 'lint', 'generate-asar') ciTasks.push('mkdeb') if process.platform is 'linux' ciTasks.push('mktar') if process.platform is 'linux' - ciTasks.push('codesign:exe') if process.platform is 'win32' and not process.env.CI - ciTasks.push('create-windows-installer:installer') if process.platform is 'win32' ciTasks.push('test') if process.platform is 'darwin' - ciTasks.push('codesign:installer') if process.platform is 'win32' and not process.env.CI ciTasks.push('codesign:app') if process.platform is 'darwin' and not process.env.CI + if process.platform is 'win32' + ciTasks.push('codesign:exe') if process.env.JANKY_SIGNTOOL + ciTasks.push('codesign:installer-deferred') if not process.env.JANKY_SIGNTOOL + ciTasks.push('create-windows-installer:installer') + ciTasks.push('codesign:installer') if process.env.JANKY_SIGNTOOL + ciTasks.push('codesign:cleanup') ciTasks.push('publish-build') unless process.env.CI + grunt.registerTask('ci', ciTasks) defaultTasks = ['download-electron', 'download-electron-chromedriver', 'build', 'set-version', 'generate-asar'] diff --git a/build/tasks/codesign-task.coffee b/build/tasks/codesign-task.coffee index 559d41bbf..13ea9f4df 100644 --- a/build/tasks/codesign-task.coffee +++ b/build/tasks/codesign-task.coffee @@ -5,46 +5,10 @@ request = require 'request' module.exports = (grunt) -> {spawn} = require('./task-helpers')(grunt) - signUsingWindowsSDK = (exeToSign, callback) -> - {WIN_P12KEY_PASSWORD, WIN_P12KEY_URL} = process.env - if WIN_P12KEY_URL? - grunt.log.ok("Obtaining signing key") - downloadedKeyFile = path.resolve(__dirname, 'DownloadedSignKey.p12') - downloadFile WIN_P12KEY_URL, downloadedKeyFile, (done) -> - signUsingWindowsSDKTool exeToSign, downloadedKeyFile, WIN_P12KEY_PASSWORD, (done) -> - fs.unlinkSync(downloadedKeyFile) - callback() - else - signUsingWindowsSDKTool exeToSign, path.resolve(__dirname, '..', 'certs', 'AtomDevTestSignKey.p12'), 'password', callback - - signUsingWindowsSDKTool = (exeToSign, keyFilePath, password, callback) -> - grunt.log.ok("Signing #{exeToSign}") - args = ['sign', '/v', '/p', password, '/f', keyFilePath, exeToSign] - spawn {cmd: 'C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v7.1A\\bin\\signtool.exe', args: args}, callback - - signUsingJanky = (exeToSign, callback) -> - spawn {cmd: process.env.JANKY_SIGNTOOL, args: [exeToSign]}, callback - - signWindowsExecutable = if process.env.JANKY_SIGNTOOL then signUsingJanky else signUsingWindowsSDK - - grunt.registerTask 'codesign:exe', 'CodeSign Atom.exe and Update.exe', -> - done = @async() - spawn {cmd: 'taskkill', args: ['/F', '/IM', 'atom.exe']}, -> - atomExePath = path.join(grunt.config.get('atom.shellAppDir'), 'atom.exe') - signWindowsExecutable atomExePath, (error) -> - return done(error) if error? - - updateExePath = path.resolve(__dirname, '..', 'node_modules', 'grunt-electron-installer', 'vendor', 'Update.exe') - signWindowsExecutable updateExePath, (error) -> done(error) - - grunt.registerTask 'codesign:installer', 'CodeSign AtomSetup.exe', -> - done = @async() - atomSetupExePath = path.resolve(grunt.config.get('atom.buildDir'), 'installer', 'AtomSetup.exe') - signWindowsExecutable atomSetupExePath, (error) -> done(error) + # Mac OS X code signing grunt.registerTask 'codesign:app', 'CodeSign Atom.app', -> done = @async() - unlockKeychain (error) -> return done(error) if error? @@ -53,11 +17,65 @@ module.exports = (grunt) -> unlockKeychain = (callback) -> return callback() unless process.env.XCODE_KEYCHAIN - {XCODE_KEYCHAIN_PASSWORD, XCODE_KEYCHAIN} = process.env args = ['unlock-keychain', '-p', XCODE_KEYCHAIN_PASSWORD, XCODE_KEYCHAIN] spawn {cmd: 'security', args: args}, (error) -> callback(error) + # Windows code signing + + grunt.registerTask 'codesign:exe', 'CodeSign Windows binaries', -> + done = @async() + atomExePath = path.join(grunt.config.get('atom.shellAppDir'), 'atom.exe') + signWindowsExecutable atomExePath, (error) -> + return done(error) if error? + updateExePath = path.resolve(__dirname, '..', 'node_modules', 'grunt-electron-installer', 'vendor', 'Update.exe') + signWindowsExecutable updateExePath, (error) -> done(error) + + grunt.registerTask 'codesign:installer', 'CodeSign Windows installer (AtomSetup.exe)', -> + done = @async() + atomSetupExePath = path.resolve(grunt.config.get('atom.buildDir'), 'installer', 'AtomSetup.exe') + signWindowsExecutable atomSetupExePath, (error) -> done(error) + + grunt.registerTask 'codesign:installer-deferred', 'Obtain cert and configure installer to perform CodeSign', -> + done = @async() + getCertificate (file, password) -> + grunt.config('create-windows-installer.installer.certificateFile', file) + grunt.config('create-windows-installer.installer.certificatePassword', password) + grunt.log.ok('Certificate ready for create-windows-installer task') + done() + + grunt.registerTask 'codesign:cleanup', 'Clean up any temporary or downloaded files used for CodeSign', -> + try fs.unlinkSync(downloadedCertificateFile) catch e then return + + downloadedCertificateFile = path.resolve(__dirname, 'DownloadedCertFile.p12') + + signWindowsExecutable = (exeToSign, callback) -> + if process.env.JANKY_SIGNTOOL + signUsingJanky exeToSign, callback + else + signUsingWindowsSDK exeToSign, callback + + signUsingJanky = (exeToSign, callback) -> + grunt.log.ok("Signing #{exeToSign} using Janky SignTool") + spawn {cmd: process.env.JANKY_SIGNTOOL, args: [exeToSign]}, callback + + signUsingWindowsSDK = (exeToSign, callback) -> + getCertificate (file, password) -> + signUsingWindowsSDKTool exeToSign, file, password, callback + + signUsingWindowsSDKTool = (exeToSign, certificateFile, certificatePassword, callback) -> + grunt.log.ok("Signing '#{exeToSign}' using Windows SDK") + args = ['sign', '/v', '/p', certificatePassword, '/f', certificateFile, exeToSign] + spawn {cmd: 'C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v7.1A\\bin\\signtool.exe', args: args}, callback + + getCertificate = (callback) -> + if process.env.WIN_P12KEY_URL? + grunt.log.ok("Obtaining certificate file") + downloadFile process.env.WIN_P12KEY_URL, downloadedCertificateFile, (done) -> + callback(downloadedCertificateFile, process.env.WIN_P12KEY_PASSWORD ? 'password') + else + callback(path.resolve(__dirname, '..', 'certs', 'AtomDevTestSignKey.p12'), process.env.WIN_P12KEY_PASSWORD ? 'password') + downloadFile = (sourceUrl, targetPath, callback) -> options = { url: sourceUrl From f34e4b3b13a9080e50b713a8a01d3eceb636fee8 Mon Sep 17 00:00:00 2001 From: Damien Guard Date: Thu, 19 May 2016 14:49:38 -0700 Subject: [PATCH 02/13] Add MSI output for AppVeyor artifact list --- appveyor.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/appveyor.yml b/appveyor.yml index 20211da8c..51e074a4c 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -33,6 +33,8 @@ deploy: off artifacts: - path: out\**\AtomSetup.exe name: AtomSetup.exe + - path: out\**\AtomSetup.msi + name: AtomSetup.msi cache: - '%USERPROFILE%\.atom\.apm' From d6026557086f439a7ac65e3b50cb04a7707c5410 Mon Sep 17 00:00:00 2001 From: Mihail Bodrov Date: Fri, 20 May 2016 01:27:27 +0300 Subject: [PATCH 03/13] replace _.extend in favore of Object.assign --- src/browser/atom-application.coffee | 4 ++-- src/browser/atom-window.coffee | 5 ++--- src/browser/auto-update-manager.coffee | 3 +-- src/browser/auto-updater-win32.coffee | 3 +-- src/config.coffee | 4 ++-- src/cursor.coffee | 4 ++-- src/git-repository.coffee | 2 +- src/scan-handler.coffee | 3 +-- src/selection.coffee | 4 ++-- src/text-editor.coffee | 2 +- src/workspace.coffee | 4 ++-- 11 files changed, 17 insertions(+), 21 deletions(-) diff --git a/src/browser/atom-application.coffee b/src/browser/atom-application.coffee index d08990264..c142e2b5d 100644 --- a/src/browser/atom-application.coffee +++ b/src/browser/atom-application.coffee @@ -25,7 +25,7 @@ LocationSuffixRegExp = /(:\d+)(:\d+)?$/ # module.exports = class AtomApplication - _.extend @prototype, EventEmitter.prototype + Object.assign @prototype, EventEmitter.prototype # Public: The entry point into the Atom application. @open: (options) -> @@ -528,7 +528,7 @@ class AtomApplication restorePreviousState = @config.get('core.restorePreviousWindowsOnStart') ? true if restorePreviousState and (states = @storageFolder.load('application.json'))?.length > 0 for state in states - @openWithOptions(_.extend(options, { + @openWithOptions(Object.assign(options, { initialPaths: state.initialPaths pathsToOpen: state.initialPaths.filter (directoryPath) -> fs.isDirectorySync(directoryPath) urlsToOpen: [] diff --git a/src/browser/atom-window.coffee b/src/browser/atom-window.coffee index 60e6d0553..41c3830e7 100644 --- a/src/browser/atom-window.coffee +++ b/src/browser/atom-window.coffee @@ -2,12 +2,11 @@ path = require 'path' fs = require 'fs' url = require 'url' -_ = require 'underscore-plus' {EventEmitter} = require 'events' module.exports = class AtomWindow - _.extend @prototype, EventEmitter.prototype + Object.assign @prototype, EventEmitter.prototype @iconPath: path.resolve(__dirname, '..', '..', 'resources', 'atom.png') @includeShellLoadTime: true @@ -40,7 +39,7 @@ class AtomWindow @handleEvents() - loadSettings = _.extend({}, settings) + loadSettings = Object.assign({}, settings) loadSettings.appVersion = app.getVersion() loadSettings.resourcePath = @resourcePath loadSettings.devMode ?= false diff --git a/src/browser/auto-update-manager.coffee b/src/browser/auto-update-manager.coffee index 602284b07..54f91dcd8 100644 --- a/src/browser/auto-update-manager.coffee +++ b/src/browser/auto-update-manager.coffee @@ -1,5 +1,4 @@ autoUpdater = null -_ = require 'underscore-plus' {EventEmitter} = require 'events' path = require 'path' @@ -13,7 +12,7 @@ ErrorState = 'error' module.exports = class AutoUpdateManager - _.extend @prototype, EventEmitter.prototype + Object.assign @prototype, EventEmitter.prototype constructor: (@version, @testMode, resourcePath, @config) -> @state = IdleState diff --git a/src/browser/auto-updater-win32.coffee b/src/browser/auto-updater-win32.coffee index e31578d49..ee49e5096 100644 --- a/src/browser/auto-updater-win32.coffee +++ b/src/browser/auto-updater-win32.coffee @@ -1,9 +1,8 @@ {EventEmitter} = require 'events' -_ = require 'underscore-plus' SquirrelUpdate = require './squirrel-update' class AutoUpdater - _.extend @prototype, EventEmitter.prototype + Object.assign @prototype, EventEmitter.prototype setFeedURL: (@updateUrl) -> diff --git a/src/config.coffee b/src/config.coffee index 66f07516e..290d0ca09 100644 --- a/src/config.coffee +++ b/src/config.coffee @@ -785,7 +785,7 @@ class Config properties[key] ?= {} rootSchema = properties[key] - _.extend rootSchema, schema + Object.assign rootSchema, schema @setDefaults(keyPath, @extractDefaultsFromSchema(schema)) @setScopedDefaultsFromSchema(keyPath, schema) @resetSettingsForSchemaChange() @@ -870,7 +870,7 @@ class Config return if @shouldNotAccessFileSystem() allSettings = {'*': @settings} - allSettings = _.extend allSettings, @scopedSettingsStore.propertiesForSource(@getUserConfigPath()) + allSettings = Object.assign allSettings, @scopedSettingsStore.propertiesForSource(@getUserConfigPath()) allSettings = sortObject(allSettings) try CSON.writeFileSync(@configFilePath, allSettings) diff --git a/src/cursor.coffee b/src/cursor.coffee index b8f7c72b4..e2eaa8c05 100644 --- a/src/cursor.coffee +++ b/src/cursor.coffee @@ -537,8 +537,8 @@ class Cursor extends Model # * `wordRegex` A {RegExp} indicating what constitutes a "word" # (default: {::wordRegExp}). getCurrentWordBufferRange: (options={}) -> - startOptions = _.extend(_.clone(options), allowPrevious: false) - endOptions = _.extend(_.clone(options), allowNext: false) + startOptions = Object.assign(_.clone(options), allowPrevious: false) + endOptions = Object.assign(_.clone(options), allowNext: false) new Range(@getBeginningOfCurrentWordBufferPosition(startOptions), @getEndOfCurrentWordBufferPosition(endOptions)) # Public: Returns the buffer Range for the current line. diff --git a/src/git-repository.coffee b/src/git-repository.coffee index fcbc40830..fceb4850a 100644 --- a/src/git-repository.coffee +++ b/src/git-repository.coffee @@ -318,7 +318,7 @@ class GitRepository getDirectoryStatus: (directoryPath) -> directoryPath = "#{@relativize(directoryPath)}/" directoryStatus = 0 - for path, status of _.extend({}, @async.getCachedPathStatuses(), @statusesByPath) + for path, status of Object.assign({}, @async.getCachedPathStatuses(), @statusesByPath) directoryStatus |= status if path.indexOf(directoryPath) is 0 directoryStatus diff --git a/src/scan-handler.coffee b/src/scan-handler.coffee index 6199c1fb1..18e00dedc 100644 --- a/src/scan-handler.coffee +++ b/src/scan-handler.coffee @@ -1,4 +1,3 @@ -_ = require "underscore-plus" path = require "path" async = require "async" {PathSearcher, PathScanner, search} = require 'scandal' @@ -26,7 +25,7 @@ module.exports = (rootPaths, regexSource, options) -> async.each( rootPaths, (rootPath, next) -> - options2 = _.extend {}, options, + options2 = Object.assign {}, options, inclusions: processPaths(rootPath, options.inclusions) globalExclusions: processPaths(rootPath, options.globalExclusions) diff --git a/src/selection.coffee b/src/selection.coffee index 7ecbb3fbc..8e9bf827e 100644 --- a/src/selection.coffee +++ b/src/selection.coffee @@ -1,5 +1,5 @@ {Point, Range} = require 'text-buffer' -{pick} = _ = require 'underscore-plus' +{pick} = require 'underscore-plus' {Emitter} = require 'event-kit' Model = require './model' @@ -738,7 +738,7 @@ class Selection extends Model else options.goalScreenRange = myGoalScreenRange ? otherGoalScreenRange - @setBufferRange(@getBufferRange().union(otherSelection.getBufferRange()), _.extend(autoscroll: false, options)) + @setBufferRange(@getBufferRange().union(otherSelection.getBufferRange()), Object.assign(autoscroll: false, options)) otherSelection.destroy() ### diff --git a/src/text-editor.coffee b/src/text-editor.coffee index 740f9e5f3..f94480b12 100644 --- a/src/text-editor.coffee +++ b/src/text-editor.coffee @@ -2595,7 +2595,7 @@ class TextEditor extends Model # Returns the new {Selection}. addSelection: (marker, options={}) -> cursor = @addCursor(marker) - selection = new Selection(_.extend({editor: this, marker, cursor, @clipboard}, options)) + selection = new Selection(Object.assign({editor: this, marker, cursor, @clipboard}, options)) @selections.push(selection) selectionBufferRange = selection.getBufferRange() @mergeIntersectingSelections(preserveFolds: options.preserveFolds) diff --git a/src/workspace.coffee b/src/workspace.coffee index 5e9de93dd..faa7b84c9 100644 --- a/src/workspace.coffee +++ b/src/workspace.coffee @@ -549,7 +549,7 @@ class Workspace extends Model throw error @project.bufferForPath(filePath, options).then (buffer) => - editor = @buildTextEditor(_.extend({buffer, largeFileMode}, options)) + editor = @buildTextEditor(Object.assign({buffer, largeFileMode}, options)) disposable = atom.textEditors.add(editor) grammarSubscription = editor.observeGrammar(@handleGrammarUsed.bind(this)) editor.onDidDestroy -> @@ -572,7 +572,7 @@ class Workspace extends Model # # Returns a {TextEditor}. buildTextEditor: (params) -> - params = _.extend({ + params = Object.assign({ @config, @clipboard, @grammarRegistry, @assert }, params) new TextEditor(params) From eac4ce5c954347b61421fe9ff4a20bd107461051 Mon Sep 17 00:00:00 2001 From: simurai Date: Sat, 21 May 2016 10:22:14 +0900 Subject: [PATCH 04/13] :memo: Add a note how to hide the wrap-guide --- src/config-schema.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/config-schema.coffee b/src/config-schema.coffee index ed6691380..eec7bfd76 100644 --- a/src/config-schema.coffee +++ b/src/config-schema.coffee @@ -197,7 +197,7 @@ module.exports = softWrapAtPreferredLineLength: type: 'boolean' default: false - description: 'Instead of wrapping lines to the window\'s width, wrap lines to the number of characters defined by the `Preferred Line Length` setting. This will only take effect when the soft wrap config setting is enabled globally or for the current language.' + description: 'Instead of wrapping lines to the window\'s width, wrap lines to the number of characters defined by the `Preferred Line Length` setting. This will only take effect when the soft wrap config setting is enabled globally or for the current language. Note: I you like to hide the wrap guide (the vertical line) you can disable the `wrap-guide` package.' softWrapHangingIndent: type: 'integer' default: 0 From 96292b41fef289c743f884563db2a022bf310661 Mon Sep 17 00:00:00 2001 From: simurai Date: Sat, 21 May 2016 21:45:04 +0900 Subject: [PATCH 05/13] :memo: Typo --- src/config-schema.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/config-schema.coffee b/src/config-schema.coffee index eec7bfd76..644d6a0e0 100644 --- a/src/config-schema.coffee +++ b/src/config-schema.coffee @@ -197,7 +197,7 @@ module.exports = softWrapAtPreferredLineLength: type: 'boolean' default: false - description: 'Instead of wrapping lines to the window\'s width, wrap lines to the number of characters defined by the `Preferred Line Length` setting. This will only take effect when the soft wrap config setting is enabled globally or for the current language. Note: I you like to hide the wrap guide (the vertical line) you can disable the `wrap-guide` package.' + description: 'Instead of wrapping lines to the window\'s width, wrap lines to the number of characters defined by the `Preferred Line Length` setting. This will only take effect when the soft wrap config setting is enabled globally or for the current language. Note: If you like to hide the wrap guide (the vertical line) you can disable the `wrap-guide` package.' softWrapHangingIndent: type: 'integer' default: 0 From 39f769420e6202fa2e1942d1df809bfff9c6e79e Mon Sep 17 00:00:00 2001 From: Eric Bower Date: Sun, 22 May 2016 11:27:50 -0400 Subject: [PATCH 06/13] match apms node version --- script/bootstrap | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/script/bootstrap b/script/bootstrap index 83ec712ff..3b9a35735 100755 --- a/script/bootstrap +++ b/script/bootstrap @@ -75,7 +75,7 @@ function bootstrap() { var buildInstallCommand = initialNpmCommand + npmFlags + 'install'; var buildInstallOptions = {cwd: path.resolve(__dirname, '..', 'build')}; - var apmInstallCommand = npmPath + npmFlags + '--target=0.10.35 ' + 'install'; + var apmInstallCommand = npmPath + npmFlags + '--target=0.10.40 ' + 'install'; var apmInstallOptions = {cwd: apmInstallPath}; var moduleInstallCommand = apmPath + ' install' + apmFlags; var dedupeApmCommand = apmPath + ' dedupe' + apmFlags; From 248409b131cdf872fd7ebf4c70955f44838001ca Mon Sep 17 00:00:00 2001 From: Ruth Grace Wong Date: Sun, 22 May 2016 22:45:17 -0400 Subject: [PATCH 07/13] Update CONTRIBUTING.md added flight manual to Your First Code Contribution --- CONTRIBUTING.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 0aa249c18..ea39317bb 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -221,6 +221,8 @@ Unsure where to begin contributing to Atom? You can start by looking through the Both issue lists are sorted by total number of comments. While not perfect, number of comments is a reasonable proxy for impact a given change will have. +If you want to read about using Atom or developing packages in Atom, the [Atom Flight Manual](https://atom.io/docs/latest/) is free and available online, along with ePub, PDF and mobi versions. You can find the source to the manual in [atom/docs](https://github.com/atom/docs). + ### Pull Requests * Include screenshots and animated GIFs in your pull request whenever possible. From eeee377c7e4e48b1b7d4696119f13293f54566a7 Mon Sep 17 00:00:00 2001 From: joshaber Date: Mon, 23 May 2016 14:32:14 -0400 Subject: [PATCH 08/13] :arrow_up: ohnogit@0.0.12 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 3f8ab99ec..24be22395 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,7 @@ "marked": "^0.3.5", "normalize-package-data": "^2.0.0", "nslog": "^3", - "ohnogit": "0.0.11", + "ohnogit": "0.0.12", "oniguruma": "^5", "pathwatcher": "~6.5", "property-accessors": "^1.1.3", From 5dab35290a1abb816f4cd6a3bf12bf356c2dacd7 Mon Sep 17 00:00:00 2001 From: Ruth Grace Wong Date: Mon, 23 May 2016 16:55:14 -0400 Subject: [PATCH 09/13] Update CONTRIBUTING.md Updated flight manual links as recommended by @50Wliu. --- CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index ea39317bb..3f890e129 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -221,7 +221,7 @@ Unsure where to begin contributing to Atom? You can start by looking through the Both issue lists are sorted by total number of comments. While not perfect, number of comments is a reasonable proxy for impact a given change will have. -If you want to read about using Atom or developing packages in Atom, the [Atom Flight Manual](https://atom.io/docs/latest/) is free and available online, along with ePub, PDF and mobi versions. You can find the source to the manual in [atom/docs](https://github.com/atom/docs). +If you want to read about using Atom or developing packages in Atom, the [Atom Flight Manual](http://flight-manual.atom.io) is free and available as a PDF or web version. You can find the source to the manual in [atom/docs](https://github.com/atom/flight-manual.atom.io). ### Pull Requests From 7245c1b6fd7d03e67a1188b89331495a4f23254f Mon Sep 17 00:00:00 2001 From: Ruth Grace Wong Date: Mon, 23 May 2016 17:27:47 -0400 Subject: [PATCH 10/13] Update CONTRIBUTING.md --- CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 3f890e129..c72ee2b9c 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -221,7 +221,7 @@ Unsure where to begin contributing to Atom? You can start by looking through the Both issue lists are sorted by total number of comments. While not perfect, number of comments is a reasonable proxy for impact a given change will have. -If you want to read about using Atom or developing packages in Atom, the [Atom Flight Manual](http://flight-manual.atom.io) is free and available as a PDF or web version. You can find the source to the manual in [atom/docs](https://github.com/atom/flight-manual.atom.io). +If you want to read about using Atom or developing packages in Atom, the [Atom Flight Manual](http://flight-manual.atom.io) is free and available online or as a PDF. You can find the source to the manual in [atom/flight-manual.atom.io](https://github.com/atom/flight-manual.atom.io). ### Pull Requests From 4e8311f18fa0ceee673a5d68f1f8f2fa84399603 Mon Sep 17 00:00:00 2001 From: ruthgrace Date: Mon, 23 May 2016 18:01:16 -0400 Subject: [PATCH 11/13] Updated README.md: flight manual links, no ebook versions --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 20e940689..b31d0e58b 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@ By participating, you are expected to uphold this code. Please report unacceptab ## Documentation -If you want to read about using Atom or developing packages in Atom, the [Atom Flight Manual](https://atom.io/docs/latest/) is free and available online, along with ePub, PDF and mobi versions. You can find the source to the manual in [atom/docs](https://github.com/atom/docs). +If you want to read about using Atom or developing packages in Atom, the [Atom Flight Manual](http://flight-manual.atom.io) is free and available online. You can find the source to the manual in [atom/flight-manual.atom.io](https://github.com/atom/flight-manual.atom.io). The [API reference](https://atom.io/docs/api) for developing packages is also documented on Atom.io. From ec0e1ab85eb60868a0314834c060452d117fd1b2 Mon Sep 17 00:00:00 2001 From: Ruth Grace Wong Date: Mon, 23 May 2016 18:04:05 -0400 Subject: [PATCH 12/13] Update CONTRIBUTING.md No PDF version of the flight manual. --- CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index c72ee2b9c..1f06c34a8 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -221,7 +221,7 @@ Unsure where to begin contributing to Atom? You can start by looking through the Both issue lists are sorted by total number of comments. While not perfect, number of comments is a reasonable proxy for impact a given change will have. -If you want to read about using Atom or developing packages in Atom, the [Atom Flight Manual](http://flight-manual.atom.io) is free and available online or as a PDF. You can find the source to the manual in [atom/flight-manual.atom.io](https://github.com/atom/flight-manual.atom.io). +If you want to read about using Atom or developing packages in Atom, the [Atom Flight Manual](http://flight-manual.atom.io) is free and available online. You can find the source to the manual in [atom/flight-manual.atom.io](https://github.com/atom/flight-manual.atom.io). ### Pull Requests From ea94f69051da9df17d71562814fecaec322d60a6 Mon Sep 17 00:00:00 2001 From: Lee Dohm Date: Mon, 23 May 2016 15:20:13 -0700 Subject: [PATCH 13/13] Make the wording more clear and bold the Note --- src/config-schema.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/config-schema.coffee b/src/config-schema.coffee index 644d6a0e0..c113f53db 100644 --- a/src/config-schema.coffee +++ b/src/config-schema.coffee @@ -197,7 +197,7 @@ module.exports = softWrapAtPreferredLineLength: type: 'boolean' default: false - description: 'Instead of wrapping lines to the window\'s width, wrap lines to the number of characters defined by the `Preferred Line Length` setting. This will only take effect when the soft wrap config setting is enabled globally or for the current language. Note: If you like to hide the wrap guide (the vertical line) you can disable the `wrap-guide` package.' + description: 'Instead of wrapping lines to the window\'s width, wrap lines to the number of characters defined by the `Preferred Line Length` setting. This will only take effect when the soft wrap config setting is enabled globally or for the current language. **Note:** If you want to hide the wrap guide (the vertical line) you can disable the `wrap-guide` package.' softWrapHangingIndent: type: 'integer' default: 0