Comparar commits

...

81 Commits

Autor SHA1 Mensagem Data
Kevin Sawicki 9105348c8c Merge pull request #5424 from atom/ks-handle-save-errors-in-pane
Show custom notifications for more save errors
2015-02-05 16:22:26 -08:00
Kevin Sawicki 30419027a8 Show notification on config save failures 2015-02-05 15:34:17 -08:00
Kevin Sawicki 5de95759cd Spy on editor.save 2015-02-05 15:24:00 -08:00
Kevin Sawicki f7502d8508 Handle UNKNOWN save errors 2015-02-05 15:17:23 -08:00
Kevin Sawicki c9f13afb72 Remove stray logging 2015-02-05 15:12:20 -08:00
Kevin Sawicki e51c8f3407 Add specs for save/saveAs error handling 2015-02-05 15:07:42 -08:00
Kevin Sawicki 63ee46023d Remove profiling 2015-02-05 14:57:09 -08:00
Kevin Sawicki 68e5839b14 Add missing error var 2015-02-05 14:44:16 -08:00
Kevin Sawicki 477801ba52 Remove save error reporting from Workspace 2015-02-05 14:43:50 -08:00
Kevin Sawicki 3850550345 Handle save errors in Pane 2015-02-05 14:42:21 -08:00
Kevin Sawicki 728a8049d9 ⬆️ markdown-preview@0.134 2015-02-05 13:42:55 -08:00
Kevin Sawicki 77741b6f3f Set ATOM_HOME as early as possible in render process
Moves it from window-bootstrap.coffee to index.js so it runs before
the coffee cache is registered.

Refs #5412
2015-02-05 12:18:51 -08:00
Kevin Sawicki 4597dd5594 Add render process check for ATOM_HOME
Setting it in the browser process does not seem to make it into
the render processes on Linux.

Closes #5412
2015-02-05 12:11:13 -08:00
Kevin Sawicki 04d015a7e0 Use app.getHomeDir 2015-02-05 11:39:58 -08:00
Kevin Sawicki 4bd07be7d8 ⬆️ timecop@0.29 2015-02-05 10:55:06 -08:00
Kevin Sawicki 40de6a7114 Add executable value to desktop file template
Closes #5419
2015-02-05 10:12:30 -08:00
Kevin Sawicki 9100d20dc4 Merge pull request #5417 from atom/iz-fix-semver
Fix atom engine semver in upgrading docs
2015-02-05 08:55:35 -08:00
Ivan Žužak 4361b67214 Fix atom engine semver in upgrading docs 2015-02-05 15:07:16 +01:00
Kevin Sawicki 83c8d904cf 🎨 Add space before arrow 2015-02-04 17:44:33 -08:00
Kevin Sawicki 3257d17fc0 Merge pull request #5408 from atom/add-csharp
Add language-csharp to core packages
2015-02-04 17:28:19 -08:00
Kevin Sawicki fd1d872840 Prompt split editors to save on close
Previously an editor that was split into multiple panes would not
prompt to save correctly when the window was unloading.

This adds a new `windowCloseRequested` option passed through from the
beforeunload handler to the editor so that it can specially handle this
case.

Closes #5257
2015-02-04 17:14:46 -08:00
Kevin Sawicki c5b6b90c88 Normalize opened paths to handle ~
Closes #3829
2015-02-04 16:39:25 -08:00
Kevin Sawicki 9618ec45cf Remove unused require 2015-02-04 15:35:41 -08:00
Kevin Sawicki 6e3d41f433 Suppress deprecations in BufferedNodeProcess
This keeps it consistent with the render process which also suppresses
deprecations

Closes #5383
2015-02-04 15:27:17 -08:00
Kevin Sawicki 6f438ca7da ⬆️ language-csharp@0.5 2015-02-04 14:44:49 -08:00
Daniel Hengeveld c629eb73b2 Add language-csharp to core packages 2015-02-04 14:16:01 -08:00
Kevin Sawicki cbe5eff04c Tweak chocolatey instructions
chocolatey now uses the new installer
2015-02-04 13:35:47 -08:00
Ben Ogle 01bf346d0f ⬆️ metrics@0.42.0 to fix error 2015-02-04 11:36:44 -08:00
Kevin Sawicki c3bd501b84 Merge pull request #5385 from atom/ks-portable
Respect ATOM_HOME env var for portability
2015-02-04 11:22:09 -08:00
Kevin Sawicki 556bb5b65e Merge pull request #5403 from eestrada/rpmbuild
Let Linux packages fully determine executable path
2015-02-04 11:21:37 -08:00
Kevin Sawicki de1c6d1a5d Remove unused require 2015-02-04 10:54:25 -08:00
Kevin Sawicki a985942b16 Use realpath to maintain old behavior 2015-02-04 10:52:32 -08:00
Kevin Sawicki 9ba106192d 📝 Add missing in 2015-02-04 10:49:28 -08:00
Kevin Sawicki 83568a1d85 📝 Mention ATOM_HOME 2015-02-04 10:46:58 -08:00
Kevin Sawicki 71333bbc93 Remove custom Windows behavior 2015-02-04 10:42:13 -08:00
Kevin Sawicki 4e10ea0b10 Remove unused Subscriber mixin 2015-02-04 10:35:57 -08:00
Kevin Sawicki 888d6dfab5 Inline compile cache path 2015-02-04 10:35:57 -08:00
Kevin Sawicki 622b396111 Guard against no LOCALAPPDATA env var 2015-02-04 10:35:57 -08:00
Kevin Sawicki 0f2943989f 📝 Fix comment typos 2015-02-04 10:35:57 -08:00
Kevin Sawicki 63e618cf74 Add missing rootAtomFolder var 2015-02-04 10:35:57 -08:00
Kevin Sawicki 76f37277d9 Use sibling .atom when non-standard installer location 2015-02-04 10:35:57 -08:00
Kevin Sawicki 745e9c8284 📝 Default -> Defaults 2015-02-04 10:35:57 -08:00
Kevin Sawicki 456e511031 📝 Doc ATOM_HOME 2015-02-04 10:35:57 -08:00
Kevin Sawicki 390be558e2 Use ATOM_HOME when setting configDirPath 2015-02-04 10:35:57 -08:00
Kevin Sawicki 4acd5951f5 Use ATOM_HOME for nohup.out location 2015-02-04 10:35:57 -08:00
Kevin Sawicki 8cd7d7dc0c ⬆️ apm@0.135 2015-02-04 10:35:57 -08:00
Kevin Sawicki a127240f4f Use ATOM_HOME as config dir path 2015-02-04 10:35:56 -08:00
Kevin Sawicki c0ab2c4ac8 Use ATOM_HOME when building cache path 2015-02-04 10:35:56 -08:00
Kevin Sawicki 4c534606c2 Use inherited ATOM_HOME env var 2015-02-04 10:35:56 -08:00
Kevin Sawicki f330e207b4 Set ATOM_HOME env var at startup 2015-02-04 10:35:56 -08:00
Ethan Estrada d05a3f370e Have atom.desktop use PATH to find executable
Currently for RPM build only.
2015-02-04 11:20:52 -07:00
Ethan Estrada 08edcf23c9 Let Linux packages fully determine executable path
It is no longer hard coded into the atom.desktop.in file; the
individual grunt tasks now determine how the executable is accessed.
2015-02-04 11:06:20 -07:00
Kevin Sawicki dc4640eee0 ⬆️ markdown-preview@0.133 2015-02-04 09:13:52 -08:00
Kevin Sawicki 33073ea270 Merge pull request #5399 from eestrada/rpmbuild
Reverted atom.desktop.in
2015-02-04 09:05:30 -08:00
Ethan Estrada 449acc7ced Reverted atom.desktop.in
I realize the debian package build depends on this. Although it
probably won't break anything, I would rather implement a solution
that doesn't change the behavior of the debian installer.
2015-02-04 10:01:47 -07:00
Kevin Sawicki dde253160c Merge pull request #5392 from eestrada/rpmbuild
Make atom.spec.in actually use grunt variables
2015-02-04 08:59:47 -08:00
Ethan Estrada c547039f1d Automated rpm package builds to '/usr'
This is instead of the default of '/usr/local'. Targeting '/usr'
is more in line with what most RPM distros expect.
2015-02-04 01:42:52 -07:00
Ethan Estrada afb795d8cc mkrpm honors the '--install-dir' option of grunt
Also, atom.spec now uses the description provided by grunt instead
of hardcoding its own description.
2015-02-03 22:43:18 -07:00
Ethan Estrada ef8a493b9a Remove some hardcoded paths from atom.spec.in
Also, fix a couple lines in atom.spec.in that either weren't
really doing anything or were inconsistent with the rest of the
script.
2015-02-03 22:03:49 -07:00
Ethan Estrada c738145dc7 Revert "Fixes RPM install path and icon location"
This reverts commit b92e6f5a2d.
2015-02-03 21:37:14 -07:00
Nathan Sobo 86991bbec2 Merge branch 'driskell-bugs/ident_guide_whitespace_only' 2015-02-03 21:26:25 -07:00
Nathan Sobo 973d7ebf13 Add spec coverage for indent guides + invisibles on blank lines 2015-02-03 21:26:01 -07:00
Ethan Estrada 93c67b670a Merge pull request #1 from atom/sm-linux-icons
Add Linux icons
2015-02-03 21:25:21 -07:00
Kevin Sawicki c7315e2be6 Merge pull request #5342 from paulcbetts/deltas
Delta Packages for Windows + Update Squirrel.Windows
2015-02-03 17:14:36 -08:00
Kevin Sawicki a4976c32ae Remove release notes from event payload
The release notes are provided by Squirrel on Mac but not by Squirrel for
Windows and the release notes package pulls them down manually anyway
so this field is no longer needed.

Checking for the presence of the release notes previously was preventing the
event from firing on Windows which would cause old release notes to show in
the package.

Closes #3757
2015-02-03 14:57:33 -08:00
Kevin Sawicki 37a85bcdd0 ⬆️ language-css@0.27 2015-02-03 13:50:45 -08:00
Kevin Sawicki 47bd093d68 🐎 Load 6to5 version directly from package.json
This prevents the entire library from being required just to check the
cache so when 6to5 is being used and all files are cached it should shave
~250ms off startup.
2015-02-03 13:36:26 -08:00
Kevin Sawicki a788a7e9b7 ⬆️ language-xml@0.28 2015-02-03 10:53:29 -08:00
Kevin Sawicki 9101da11ce ⬆️ update-package-dependencies@0.8 2015-02-03 10:41:26 -08:00
Max Brunsfeld f7159181ac 📝 Tweak docs for new service APIs 2015-02-03 10:21:23 -08:00
Kevin Sawicki 1784a7f726 ⬆️ Upgrade one themes 2015-02-03 10:20:23 -08:00
Kevin Sawicki a28a8447a7 ⬆️ language-json@0.12 2015-02-03 10:18:25 -08:00
Kevin Sawicki 197e74f18d Prepare 0.178 2015-02-03 09:43:05 -08:00
simurai 740e6de5f3 Add Linux icons 2015-02-03 12:47:30 +09:00
Jason Woods 2e72790e72 🐛 Fix ident guides missing on whitespace only lines with invis chars 2015-02-01 18:13:39 +00:00
Paul Betts 8fcd71f207 Publish delta packages 2015-02-01 01:51:49 -08:00
Paul Betts 776eedd473 Set us up to download the current release so we can create deltas 2015-02-01 01:51:48 -08:00
Paul Betts 62c515e4e7 ⬆️ grunt-atom-shell-installer@0.21.0 2015-02-01 01:51:42 -08:00
Ethan Estrada 223334181b Place atom.png icons in standard system locations
This is so that the atom.desktop file will be able to find the
"atom" icon when requested. This adds the dependency of ImageMagick
to convert atom.png to varying resolutions, although, only during
the rpm build process (not during actual install). So the result
is ultimatly no different for the end user.

Also, fixed an absolute path from the rpm build process and made
it relative. It was hardcoded in the spec file to
"/tmp/atom-build/Atom/*", so builds that were made elsewhere would
have broken when attempting to package into an rpm. Now rpm packaging
should work from a build made anywhere. Also needed to modify
script/mkrpm so that it copies the build files in such a way that
they can more easily be dealt with in the spec file in a relative
way.
2015-01-31 22:14:07 -07:00
Ethan Estrada a7e18b05d3 Depend on $PATH to find executable in atom.desktop
With the atom atom executable now located in /usr/bin instead
of /usr/local/bin, it should always be available as part of the
system PATH. Thus hardcoding the filepath is not needed. Also, this
increase the flexibility of relocating the rpm at installation time
(not just build time) since the user or sys admin need only make
sure that the atom executable is in the system PATH and the
atom.desktop file will work correctly.
2015-01-31 22:12:26 -07:00
Edgard Castro b92e6f5a2d Fixes RPM install path and icon location
This makes Atom a better desktop citizen relocating to where the usual install
directory is (like on the debian package) and also fix the icon using absolute
paths, breaking icon-themes.
2015-01-31 15:04:24 -02:00
52 arquivos alterados com 314 adições e 143 exclusões
+2 -12
Ver Arquivo
@@ -24,18 +24,8 @@ 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).
The `.zip` version will not automatically update.
#### Uninstalling Chocolatey Version
The recommended installation of Atom on Windows used to be using [Chocolatey](https://chocolatey.org/packages/Atom/).
This is no longer recommended now that the Atom Windows installer & auto-updater
exists.
To switch from Chocolatey to the new installer:
* Upgrade to Atom 0.155 or above by running `cup Atom`
* Run `cuninst Atom` to uninstall the Chocolatey version of Atom
* This will not delete any of your installed packages or Atom config files.
* Download the latest [AtomSetup.exe installer](https://github.com/atom/atom/releases/latest).
* Double-click the downloaded file to install Atom
Using [chocolatey](https://chocolatey.org/)? Run `cinst Atom` to install
the latest version of Atom.
### Debian Linux (Ubuntu)
+1 -1
Ver Arquivo
@@ -6,6 +6,6 @@
"url": "https://github.com/atom/atom.git"
},
"dependencies": {
"atom-package-manager": "0.134.0"
"atom-package-manager": "0.135.0"
}
}
+4 -4
Ver Arquivo
@@ -75,9 +75,9 @@ elif [ $OS == 'Linux' ]; then
SCRIPT=$(readlink -f "$0")
USR_DIRECTORY=$(readlink -f $(dirname $SCRIPT)/..)
ATOM_PATH="$USR_DIRECTORY/share/atom/atom"
DOT_ATOM_DIR="$HOME/.atom"
ATOM_HOME="${ATOM_HOME:-$HOME/.atom}"
mkdir -p "$DOT_ATOM_DIR"
mkdir -p "$ATOM_HOME"
: ${TMPDIR:=/tmp}
@@ -88,9 +88,9 @@ elif [ $OS == 'Linux' ]; then
exit $?
else
(
nohup "$ATOM_PATH" --executed-from="$(pwd)" --pid=$$ "$@" > "$DOT_ATOM_DIR/nohup.out" 2>&1
nohup "$ATOM_PATH" --executed-from="$(pwd)" --pid=$$ "$@" > "$ATOM_HOME/nohup.out" 2>&1
if [ $? -ne 0 ]; then
cat "$DOT_ATOM_DIR/nohup.out"
cat "$ATOM_HOME/nohup.out"
exit $?
fi
) &
+1
Ver Arquivo
@@ -207,6 +207,7 @@ module.exports = (grunt) ->
loadingGif: path.resolve(__dirname, '..', 'resources', 'win', 'loading.gif')
iconUrl: 'https://raw.githubusercontent.com/atom/atom/master/resources/win/atom.ico'
setupIcon: path.resolve(__dirname, '..', 'resources', 'win', 'atom.ico')
remoteReleases: 'https://atom.io/api/updates'
shell:
'kill-atom':
+1 -1
Ver Arquivo
@@ -12,7 +12,7 @@
"fs-plus": "2.x",
"github-releases": "~0.2.0",
"grunt": "~0.4.1",
"grunt-atom-shell-installer": "^0.20.0",
"grunt-atom-shell-installer": "^0.21.0",
"grunt-cli": "~0.1.9",
"grunt-coffeelint": "git+https://github.com/atom/grunt-coffeelint.git#cfb99aa99811d52687969532bd5a98011ed95bfe",
"grunt-contrib-coffee": "~0.12.0",
+2 -2
Ver Arquivo
@@ -47,9 +47,9 @@ module.exports = (grunt) ->
{description} = grunt.file.readJSON('package.json')
iconName = path.join(shareDir, 'resources', 'app', 'resources', 'atom.png')
installDir = path.join(installDir, '.') # To prevent "Exec=/usr/local//share/atom/atom"
executable = path.join(shareDir, 'atom')
template = _.template(String(fs.readFileSync(desktopFile)))
filled = template({description, installDir, iconName})
filled = template({description, iconName, executable})
grunt.file.write(desktopInstallFile, filled)
+2 -1
Ver Arquivo
@@ -36,8 +36,9 @@ module.exports = (grunt) ->
maintainer = 'GitHub <atom@github.com>'
installDir = '/usr'
iconName = 'atom'
executable = path.join(installDir, 'share', 'atom', 'atom')
getInstalledSize buildDir, (error, installedSize) ->
data = {name, version, description, section, arch, maintainer, installDir, iconName, installedSize}
data = {name, version, description, section, arch, maintainer, installDir, iconName, installedSize, executable}
controlFilePath = fillTemplate(path.join('resources', 'linux', 'debian', 'control'), data)
desktopFilePath = fillTemplate(path.join('resources', 'linux', 'atom.desktop'), data)
icon = path.join('resources', 'atom.png')
+2 -1
Ver Arquivo
@@ -33,8 +33,9 @@ module.exports = (grunt) ->
installDir = grunt.config.get('atom.installDir')
shareDir = path.join(installDir, 'share', 'atom')
iconName = path.join(shareDir, 'resources', 'app', 'resources', 'atom.png')
executable = 'atom'
data = {name, version, description, installDir, iconName}
data = {name, version, description, installDir, iconName, executable}
specFilePath = fillTemplate(path.join('resources', 'linux', 'redhat', 'atom.spec'), data)
desktopFilePath = fillTemplate(path.join('resources', 'linux', 'atom.desktop'), data)
+1 -1
Ver Arquivo
@@ -68,7 +68,7 @@ getAssets = ->
]
when 'win32'
assets = [{assetName: 'atom-windows.zip', sourcePath: 'Atom'}]
for squirrelAsset in ['AtomSetup.exe', 'RELEASES', "atom-#{version}-full.nupkg"]
for squirrelAsset in ['AtomSetup.exe', 'RELEASES', "atom-#{version}-full.nupkg", "atom-#{version}-delta.nupkg"]
cp path.join(buildDir, 'installer', squirrelAsset), path.join(buildDir, squirrelAsset)
assets.push({assetName: squirrelAsset, sourcePath: assetName})
assets
+10 -9
Ver Arquivo
@@ -366,7 +366,7 @@ to indicate the type your value should be, its default, etc.
See the [Config API Docs](https://atom.io/docs/api/latest/Config) for more
details specifying your configuration.
## Providing and Consuming Services
## Interacting With Other Packages Via Services
Atom packages can interact with each other through versioned APIs called
*services*. To provide a service, in your `package.json`, specify one or more
@@ -386,9 +386,9 @@ version numbers, each paired with the name of a method on your package's main mo
}
```
In your package's main module, implement the methods named above. The methods
will be called any time a package is activated that consumes the specified
service, and should return a value that implements the service's API.
In your package's main module, implement the methods named above. These methods
will be called any time a package is activated that consumes their corresponding
service. They should return a value that implements the service's API.
```coffeescript
@@ -402,8 +402,8 @@ module.exports =
myService
```
Similarly, to consume a service, specify one or more version *ranges*, each paired
with the name of a method on the package's main module:
Similarly, to consume a service, specify one or more [version *ranges*][version-ranges],
each paired with the name of a method on the package's main module:
```json
{
@@ -418,10 +418,10 @@ with the name of a method on the package's main module:
}
```
These methods will be called any time a package is activated that *provides* the
specified services. They will receive the service object as an argument. You
These methods will be called any time a package is activated that *provides* their
corresponding service. They will receive the service object as an argument. You
will usually need to perform some kind of cleanup in the event that the package
implementing the service is deactivated. To do this, return a `Disposable` from
providing the service is deactivated. To do this, return a `Disposable` from
your service-consuming method:
```coffeescript
@@ -512,3 +512,4 @@ all the other available commands.
[convert-bundle]: converting-a-text-mate-bundle.html
[convert-theme]: converting-a-text-mate-theme.html
[json-schema]: http://json-schema.org/
[version-ranges]: https://docs.npmjs.com/misc/semver#ranges
+8
Ver Arquivo
@@ -100,6 +100,14 @@ namespaces: `core` and `editor`.
You can open this file in an editor from the _Atom > Open Your Config_ menu.
### Custom Configuration Location
You can override the location that Atom stores configuration files and folders
in by setting the `ATOM_HOME` environment variable. The `ATOM_HOME` path will be
used instead of `~/.atom` when it is set.
This option can be useful when you want to make Atom portable across machines.
### Configuration Key Reference
- `core`
+1 -1
Ver Arquivo
@@ -63,7 +63,7 @@ When you are deprecation free and all done converting, upgrade the `engines` fie
```json
{
"engines": {
"atom": ">=0.174.0, <2.0.0"
"atom": ">=0.174.0 <2.0.0"
}
}
```
+14 -13
Ver Arquivo
@@ -1,7 +1,7 @@
{
"name": "atom",
"productName": "Atom",
"version": "0.177.0",
"version": "0.178.0",
"description": "A hackable text editor for the 21st Century.",
"main": "./src/browser/main.js",
"repository": {
@@ -31,7 +31,7 @@
"emissary": "^1.3.1",
"event-kit": "^1.0.2",
"first-mate": "^3.0.0",
"fs-plus": "^2.3.2",
"fs-plus": "^2.5",
"fstream": "0.1.24",
"fuzzaldrin": "^2.1",
"git-utils": "^3.0.0",
@@ -76,10 +76,10 @@
"atom-light-ui": "0.40.0",
"base16-tomorrow-dark-theme": "0.25.0",
"base16-tomorrow-light-theme": "0.8.0",
"one-dark-ui": "0.2.0",
"one-dark-syntax": "0.2.0",
"one-light-syntax": "0.2.0",
"one-light-ui": "0.1.0",
"one-dark-ui": "0.3.0",
"one-dark-syntax": "0.3.0",
"one-light-syntax": "0.3.0",
"one-light-ui": "0.2.0",
"solarized-dark-syntax": "0.32.0",
"solarized-light-syntax": "0.19.0",
"archive-view": "0.46.0",
@@ -103,8 +103,8 @@
"incompatible-packages": "0.21.0",
"keybinding-resolver": "0.27.0",
"link": "0.30.0",
"markdown-preview": "0.132.0",
"metrics": "0.41.0",
"markdown-preview": "0.134.0",
"metrics": "0.42.0",
"notifications": "0.26.0",
"open-on-github": "0.32.0",
"package-generator": "0.37.0",
@@ -116,16 +116,17 @@
"styleguide": "0.43.0",
"symbols-view": "0.81.0",
"tabs": "0.64.0",
"timecop": "0.28.0",
"timecop": "0.29.0",
"tree-view": "0.154.0",
"update-package-dependencies": "0.7.0",
"update-package-dependencies": "0.8.0",
"welcome": "0.21.0",
"whitespace": "0.28.0",
"wrap-guide": "0.31.0",
"language-c": "0.38.0",
"language-clojure": "0.10.0",
"language-coffee-script": "0.39.0",
"language-css": "0.26.0",
"language-csharp": "0.5.0",
"language-css": "0.27.0",
"language-gfm": "0.63.0",
"language-git": "0.10.0",
"language-go": "0.21.0",
@@ -133,7 +134,7 @@
"language-hyperlink": "0.12.2",
"language-java": "0.14.0",
"language-javascript": "0.56.0",
"language-json": "0.11.0",
"language-json": "0.12.0",
"language-less": "0.24.0",
"language-make": "0.13.0",
"language-mustache": "0.11.0",
@@ -151,7 +152,7 @@
"language-text": "0.6.0",
"language-todo": "0.16.0",
"language-toml": "0.15.0",
"language-xml": "0.27.0",
"language-xml": "0.28.0",
"language-yaml": "0.22.0"
},
"private": true,
+1 -1
Ver Arquivo
@@ -2,7 +2,7 @@
Name=Atom
Comment=<%= description %>
GenericName=Text Editor
Exec=<%= installDir %>/share/atom/atom %U
Exec=<%= executable %> %U
Icon=<%= iconName %>
Type=Application
StartupNotify=true
Arquivo binário não exibido.

Depois

Largura:  |  Altura:  |  Tamanho: 628 KiB

Arquivo binário não exibido.

Depois

Largura:  |  Altura:  |  Tamanho: 20 KiB

Arquivo binário não exibido.

Depois

Largura:  |  Altura:  |  Tamanho: 944 B

Arquivo binário não exibido.

Depois

Largura:  |  Altura:  |  Tamanho: 1.6 KiB

Arquivo binário não exibido.

Depois

Largura:  |  Altura:  |  Tamanho: 61 KiB

Arquivo binário não exibido.

Depois

Largura:  |  Altura:  |  Tamanho: 2.4 KiB

Arquivo binário não exibido.

Depois

Largura:  |  Altura:  |  Tamanho: 4.5 KiB

Arquivo binário não exibido.

Depois

Largura:  |  Altura:  |  Tamanho: 192 KiB

Arquivo binário não exibido.

Depois

Largura:  |  Altura:  |  Tamanho: 7.0 KiB

+14 -14
Ver Arquivo
@@ -1,27 +1,27 @@
Name: <%= name %>
Version: <%= version %>
Release: 0.1%{?dist}
Summary: Atom is a hackable text editor for the 21st century
Summary: <%= description %>
License: MIT
URL: https://atom.io/
AutoReqProv: no # Avoid libchromiumcontent.so missing dependency
Prefix: /usr/local
Prefix: <%= installDir %>
%description
<%= description %>
%install
mkdir -p %{buildroot}/usr/local/share/atom
cp -r /tmp/atom-build/Atom/* %{buildroot}/usr/local/share/atom
mkdir -p %{buildroot}/usr/local/bin/
ln -sf ../share/atom/resources/app/apm/node_modules/.bin/apm %{buildroot}/usr/local/bin/apm
cp atom.sh %{buildroot}/usr/local/bin/atom
chmod 755 atom.sh
mkdir -p %{buildroot}/usr/local/share/applications/
mv atom.desktop %{buildroot}/usr/local/share/applications/
mkdir -p %{buildroot}/<%= installDir %>/share/atom/
cp -r Atom/* %{buildroot}/<%= installDir %>/share/atom/
mkdir -p %{buildroot}/<%= installDir %>/bin/
ln -sf ../share/atom/resources/app/apm/node_modules/.bin/apm %{buildroot}/<%= installDir %>/bin/apm
cp atom.sh %{buildroot}/<%= installDir %>/bin/atom
chmod 755 %{buildroot}/<%= installDir %>/bin/atom
mkdir -p %{buildroot}/<%= installDir %>/share/applications/
cp atom.desktop %{buildroot}/<%= installDir %>/share/applications/
%files
/usr/local/bin/atom
/usr/local/bin/apm
/usr/local/share/atom/
/usr/local/share/applications/atom.desktop
<%= installDir %>/bin/atom
<%= installDir %>/bin/apm
<%= installDir %>/share/atom/
<%= installDir %>/share/applications/atom.desktop
+1 -1
Ver Arquivo
@@ -11,7 +11,7 @@ ARCH=`uname -m`
rpmdev-setuptree
cp -r $BUILD_DIRECTORY/Atom/* $RPM_BUILD_ROOT/BUILD
cp -r $BUILD_DIRECTORY/Atom $RPM_BUILD_ROOT/BUILD
cp $SPEC_FILE $RPM_BUILD_ROOT/SPECS
cp ./atom.sh $RPM_BUILD_ROOT/BUILD
cp $DESKTOP_FILE $RPM_BUILD_ROOT/BUILD
+1 -1
Ver Arquivo
@@ -3,4 +3,4 @@
set -e
script/build
script/grunt mkrpm publish-build --stack
script/grunt mkrpm publish-build --stack --install-dir /usr
+1 -2
Ver Arquivo
@@ -47,9 +47,8 @@ describe "the `atom` global", ->
updateAvailableHandler.callCount > 0
runs ->
{releaseVersion, releaseNotes} = updateAvailableHandler.mostRecentCall.args[0]
{releaseVersion} = updateAvailableHandler.mostRecentCall.args[0]
expect(releaseVersion).toBe 'version'
expect(releaseNotes).toBe 'notes'
describe "loading default config", ->
it 'loads the default core config', ->
+39
Ver Arquivo
@@ -0,0 +1,39 @@
path = require 'path'
BufferedNodeProcess = require '../src/buffered-node-process'
describe "BufferedNodeProcess", ->
it "executes the script in a new process", ->
exit = jasmine.createSpy('exitCallback')
output = ''
stdout = (lines) -> output += lines
error = ''
stderr = (lines) -> error += lines
args = ['hi']
command = path.join(__dirname, 'fixtures', 'script.js')
new BufferedNodeProcess({command, args, stdout, stderr, exit})
waitsFor ->
exit.callCount is 1
runs ->
expect(output).toBe 'hi'
expect(error).toBe ''
expect(args).toEqual ['hi']
it "suppresses deprecations in the new process", ->
exit = jasmine.createSpy('exitCallback')
output = ''
stdout = (lines) -> output += lines
error = ''
stderr = (lines) -> error += lines
command = path.join(__dirname, 'fixtures', 'script-with-deprecations.js')
new BufferedNodeProcess({command, stdout, stderr, exit})
waitsFor ->
exit.callCount is 1
runs ->
expect(output).toBe 'hi'
expect(error).toBe ''
+17
Ver Arquivo
@@ -666,6 +666,23 @@ describe "Config", ->
foo:
bar: 'coffee'
describe "when an error is thrown writing the file to disk", ->
addErrorHandler = null
beforeEach ->
atom.notifications.onDidAddNotification addErrorHandler = jasmine.createSpy()
it "creates a notification", ->
jasmine.unspy CSON, 'writeFileSync'
spyOn(CSON, 'writeFileSync').andCallFake ->
error = new Error()
error.code = 'EPERM'
error.path = atom.config.getUserConfigPath()
throw error
save = -> atom.config.save()
expect(save).not.toThrow()
expect(addErrorHandler.callCount).toBe 1
describe ".loadUserConfig()", ->
beforeEach ->
expect(fs.existsSync(atom.config.configDirPath)).toBeFalsy()
+2
Ver Arquivo
@@ -0,0 +1,2 @@
require('fs').existsSync('hi');
process.stdout.write('hi');
+1
Ver Arquivo
@@ -0,0 +1 @@
process.stdout.write(process.argv[2]);
+38
Ver Arquivo
@@ -383,6 +383,25 @@ describe "Pane", ->
pane.saveActiveItem()
expect(atom.showSaveDialogSync).not.toHaveBeenCalled()
describe "when the item's saveAs method throws a well-known IO error", ->
notificationSpy = null
beforeEach ->
atom.notifications.onDidAddNotification notificationSpy = jasmine.createSpy()
it "creates a notification", ->
pane.getActiveItem().saveAs = ->
error = new Error("EACCES, permission denied '/foo'")
error.path = '/foo'
error.code = 'EACCES'
throw error
pane.saveActiveItem()
expect(notificationSpy).toHaveBeenCalled()
notification = notificationSpy.mostRecentCall.args[0]
expect(notification.getType()).toBe 'warning'
expect(notification.getMessage()).toContain 'Permission denied'
expect(notification.getMessage()).toContain '/foo'
describe "::saveActiveItemAs()", ->
pane = null
@@ -404,6 +423,25 @@ describe "Pane", ->
pane.saveActiveItemAs()
expect(atom.showSaveDialogSync).not.toHaveBeenCalled()
describe "when the item's saveAs method throws a well-known IO error", ->
notificationSpy = null
beforeEach ->
atom.notifications.onDidAddNotification notificationSpy = jasmine.createSpy()
it "creates a notification", ->
pane.getActiveItem().saveAs = ->
error = new Error("EACCES, permission denied '/foo'")
error.path = '/foo'
error.code = 'EACCES'
throw error
pane.saveActiveItemAs()
expect(notificationSpy).toHaveBeenCalled()
notification = notificationSpy.mostRecentCall.args[0]
expect(notification.getType()).toBe 'warning'
expect(notification.getMessage()).toContain 'Permission denied'
expect(notification.getMessage()).toContain '/foo'
describe "::itemForURI(uri)", ->
it "returns the item for which a call to .getURI() returns the given uri", ->
pane = new Pane(items: [new Item("A"), new Item("B"), new Item("C"), new Item("D")])
+16
Ver Arquivo
@@ -374,6 +374,22 @@ describe "TextEditorComponent", ->
expect(line2LeafNodes[2].textContent).toBe ' '
expect(line2LeafNodes[2].classList.contains('indent-guide')).toBe true
it "renders indent guides correctly on lines containing only whitespace when invisibles are enabled", ->
atom.config.set 'editor.showInvisibles', true
atom.config.set 'editor.invisibles', space: '-', eol: 'x'
editor.getBuffer().insert([1, Infinity], '\n ')
nextAnimationFrame()
line2LeafNodes = getLeafNodes(component.lineNodeForScreenRow(2))
expect(line2LeafNodes.length).toBe 4
expect(line2LeafNodes[0].textContent).toBe '--'
expect(line2LeafNodes[0].classList.contains('indent-guide')).toBe true
expect(line2LeafNodes[1].textContent).toBe '--'
expect(line2LeafNodes[1].classList.contains('indent-guide')).toBe true
expect(line2LeafNodes[2].textContent).toBe '--'
expect(line2LeafNodes[2].classList.contains('indent-guide')).toBe true
expect(line2LeafNodes[3].textContent).toBe 'x'
it "does not render indent guides in trailing whitespace for lines containing non whitespace characters", ->
editor.getBuffer().setText " hi "
nextAnimationFrame()
+22 -1
Ver Arquivo
@@ -1,5 +1,7 @@
{$, $$} = require '../src/space-pen-extensions'
path = require 'path'
fs = require 'fs-plus'
temp = require 'temp'
TextEditor = require '../src/text-editor'
WindowEventHandler = require '../src/window-event-handler'
@@ -54,7 +56,7 @@ describe "Window", ->
jasmine.unspy(TextEditor.prototype, "shouldPromptToSave")
beforeUnloadEvent = $.Event(new Event('beforeunload'))
describe "when pane items are are modified", ->
describe "when pane items are modified", ->
it "prompts user to save and calls atom.workspace.confirmClose", ->
editor = null
spyOn(atom.workspace, 'confirmClose').andCallThrough()
@@ -92,6 +94,25 @@ describe "Window", ->
$(window).trigger(beforeUnloadEvent)
expect(atom.confirm).toHaveBeenCalled()
describe "when the same path is modified in multiple panes", ->
it "prompts to save the item", ->
editor = null
filePath = path.join(temp.mkdirSync('atom-file'), 'file.txt')
fs.writeFileSync(filePath, 'hello')
spyOn(atom.workspace, 'confirmClose').andCallThrough()
spyOn(atom, 'confirm').andReturn(0)
waitsForPromise ->
atom.workspace.open(filePath).then (o) -> editor = o
runs ->
atom.workspace.getActivePane().splitRight(copyActiveItem: true)
editor.setText('world')
$(window).trigger(beforeUnloadEvent)
expect(atom.workspace.confirmClose).toHaveBeenCalled()
expect(atom.confirm.callCount).toBe 1
expect(fs.readFileSync(filePath, 'utf8')).toBe 'world'
describe ".unloadEditorWindow()", ->
it "saves the serialized state of the window so it can be deserialized after reload", ->
workspaceState = atom.workspace.serialize()
+12 -7
Ver Arquivo
@@ -955,9 +955,14 @@ describe "Workspace", ->
expect(editor.isModified()).toBeTruthy()
describe "::saveActivePaneItem()", ->
editor = null
beforeEach ->
waitsForPromise ->
atom.workspace.open('sample.js').then (o) -> editor = o
describe "when there is an error", ->
it "emits a warning notification when the file cannot be saved", ->
spyOn(Pane::, 'saveActiveItem').andCallFake ->
spyOn(editor, 'save').andCallFake ->
throw new Error("'/some/file' is a directory")
atom.notifications.onDidAddNotification addedSpy = jasmine.createSpy()
@@ -966,7 +971,7 @@ describe "Workspace", ->
expect(addedSpy.mostRecentCall.args[0].getType()).toBe 'warning'
it "emits a warning notification when the directory cannot be written to", ->
spyOn(Pane::, 'saveActiveItem').andCallFake ->
spyOn(editor, 'save').andCallFake ->
throw new Error("ENOTDIR, not a directory '/Some/dir/and-a-file.js'")
atom.notifications.onDidAddNotification addedSpy = jasmine.createSpy()
@@ -975,7 +980,7 @@ describe "Workspace", ->
expect(addedSpy.mostRecentCall.args[0].getType()).toBe 'warning'
it "emits a warning notification when the user does not have permission", ->
spyOn(Pane::, 'saveActiveItem').andCallFake ->
spyOn(editor, 'save').andCallFake ->
error = new Error("EACCES, permission denied '/Some/dir/and-a-file.js'")
error.code = 'EACCES'
error.path = '/Some/dir/and-a-file.js'
@@ -987,14 +992,14 @@ describe "Workspace", ->
expect(addedSpy.mostRecentCall.args[0].getType()).toBe 'warning'
it "emits a warning notification when the operation is not permitted", ->
spyOn(Pane::, 'saveActiveItem').andCallFake ->
spyOn(editor, 'save').andCallFake ->
error = new Error("EPERM, operation not permitted '/Some/dir/and-a-file.js'")
error.code = 'EPERM'
error.path = '/Some/dir/and-a-file.js'
throw error
it "emits a warning notification when the file is already open by another app", ->
spyOn(Pane::, 'saveActiveItem').andCallFake ->
spyOn(editor, 'save').andCallFake ->
error = new Error("EBUSY, resource busy or locked '/Some/dir/and-a-file.js'")
error.code = 'EBUSY'
error.path = '/Some/dir/and-a-file.js'
@@ -1009,7 +1014,7 @@ describe "Workspace", ->
expect(notificaiton.getMessage()).toContain 'Unable to save'
it "emits a warning notification when the file system is read-only", ->
spyOn(Pane::, 'saveActiveItem').andCallFake ->
spyOn(editor, 'save').andCallFake ->
error = new Error("EROFS, read-only file system '/Some/dir/and-a-file.js'")
error.code = 'EROFS'
error.path = '/Some/dir/and-a-file.js'
@@ -1024,7 +1029,7 @@ describe "Workspace", ->
expect(notification.getMessage()).toContain 'Unable to save'
it "emits a warning notification when the file cannot be saved", ->
spyOn(Pane::, 'saveActiveItem').andCallFake ->
spyOn(editor, 'save').andCallFake ->
throw new Error("no one knows")
save = -> atom.workspace.saveActivePaneItem()
+3 -3
Ver Arquivo
@@ -95,9 +95,9 @@ getCachePath = (sourceCode) ->
digest = crypto.createHash('sha1').update(sourceCode, 'utf8').digest('hex')
unless jsCacheDir?
to5 ?= require '6to5-core'
cacheDir = path.join(fs.absolute('~/.atom'), 'compile-cache')
jsCacheDir = path.join(cacheDir, 'js', '6to5', create6to5VersionAndOptionsDigest(to5.version, defaultOptions))
to5Version = require('6to5-core/package.json').version
cacheDir = path.join(process.env.ATOM_HOME, 'compile-cache')
jsCacheDir = path.join(cacheDir, 'js', '6to5', create6to5VersionAndOptionsDigest(to5Version, defaultOptions))
path.join(jsCacheDir, "#{digest}.js")
+1 -4
Ver Arquivo
@@ -109,7 +109,7 @@ class Atom extends Model
#
# Returns the absolute path to ~/.atom
@getConfigDirPath: ->
@configDirPath ?= fs.absolute('~/.atom')
@configDirPath ?= process.env.ATOM_HOME
# Get the path to Atom's storage directory.
#
@@ -263,9 +263,6 @@ class Atom extends Model
# Make react.js faster
process.env.NODE_ENV ?= 'production' unless devMode
# Set Atom's home so packages don't have to guess it
process.env.ATOM_HOME = configDirPath
@config = new Config({configDirPath, resourcePath})
@keymaps = new KeymapManager({configDirPath, resourcePath})
@keymap = @keymaps # Deprecated
+3 -3
Ver Arquivo
@@ -5,7 +5,7 @@ AutoUpdateManager = require './auto-update-manager'
BrowserWindow = require 'browser-window'
Menu = require 'menu'
app = require 'app'
fs = require 'fs'
fs = require 'fs-plus'
ipc = require 'ipc'
path = require 'path'
os = require 'os'
@@ -342,6 +342,7 @@ class AtomApplication
# :window - {AtomWindow} to open file paths in.
openPath: ({pathToOpen, pidToKillWhenClosed, newWindow, devMode, safeMode, windowDimensions, window}={}) ->
{pathToOpen, initialLine, initialColumn} = @locationForPathToOpen(pathToOpen)
pathToOpen = fs.normalize(pathToOpen)
unless pidToKillWhenClosed or newWindow
pathToOpenStat = fs.statSyncNoException(pathToOpen)
@@ -414,9 +415,8 @@ class AtomApplication
openUrl: ({urlToOpen, devMode, safeMode}) ->
unless @packages?
PackageManager = require '../package-manager'
fs = require 'fs-plus'
@packages = new PackageManager
configDirPath: fs.absolute('~/.atom')
configDirPath: process.env.ATOM_HOME
devMode: devMode
resourcePath: @resourcePath
+3 -3
Ver Arquivo
@@ -47,7 +47,7 @@ class AutoUpdateManager
@setState(ErrorState)
console.error "Error Downloading Update: #{message}"
autoUpdater.on 'update-downloaded', (event, @releaseNotes, @releaseVersion) =>
autoUpdater.on 'update-downloaded', (event, releaseNotes, @releaseVersion) =>
@setState(UpdateAvailableState)
@emitUpdateAvailableEvent(@getWindows()...)
@@ -61,9 +61,9 @@ class AutoUpdateManager
@setState(UnsupportedState)
emitUpdateAvailableEvent: (windows...) ->
return unless @releaseVersion? and @releaseNotes
return unless @releaseVersion?
for atomWindow in windows
atomWindow.sendMessage('update-available', {@releaseVersion, @releaseNotes})
atomWindow.sendMessage('update-available', {@releaseVersion})
setState: (state) ->
return if @state is state
+19 -5
Ver Arquivo
@@ -2,7 +2,7 @@ global.shellStartTime = Date.now()
crashReporter = require 'crash-reporter'
app = require 'app'
fs = require 'fs'
fs = require 'fs-plus'
path = require 'path'
optimist = require 'optimist'
nslog = require 'nslog'
@@ -14,6 +14,7 @@ process.on 'uncaughtException', (error={}) ->
nslog(error.stack) if error.stack?
start = ->
setupAtomHome()
if process.platform is 'win32'
SquirrelUpdate = require './squirrel-update'
squirrelCommand = process.argv[1]
@@ -42,10 +43,11 @@ start = ->
cwd = args.executedFrom?.toString() or process.cwd()
args.pathsToOpen = args.pathsToOpen.map (pathToOpen) ->
pathToOpen = fs.normalize(pathToOpen)
if cwd
path.resolve(cwd, pathToOpen.toString())
path.resolve(cwd, pathToOpen)
else
path.resolve(pathToOpen.toString())
path.resolve(pathToOpen)
setupCoffeeScript()
if args.devMode
@@ -73,6 +75,14 @@ setupCoffeeScript = ->
js = CoffeeScript.compile(coffee, filename: filePath)
module._compile(js, filePath)
setupAtomHome = ->
return if process.env.ATOM_HOME
atomHome = path.join(app.getHomeDir(), '.atom')
try
atomHome = fs.realpathSync(atomHome)
process.env.ATOM_HOME = atomHome
parseCommandLine = ->
version = app.getVersion()
options = optimist(process.argv[1..])
@@ -89,8 +99,12 @@ parseCommandLine = ->
opened or a new window if it hasn't.
Environment Variables:
ATOM_DEV_RESOURCE_PATH The path from which Atom loads source code in dev mode.
Defaults to `~/github/atom`.
ATOM_DEV_RESOURCE_PATH The path from which Atom loads source code in dev mode.
Defaults to `~/github/atom`.
ATOM_HOME The root path for all configuration files and folders.
Defaults to `~/.atom`.
"""
options.alias('d', 'dev').boolean('d').describe('d', 'Run in development mode.')
options.alias('f', 'foreground').boolean('f').describe('f', 'Keep the browser process in the foreground.')
+3
Ver Arquivo
@@ -48,5 +48,8 @@ class BufferedNodeProcess extends BufferedProcess
options.env ?= Object.create(process.env)
options.env['ATOM_SHELL_INTERNAL_RUN_AS_NODE'] = 1
args = args?.slice() ? []
args.unshift(command)
args.unshift('--no-deprecation')
super({command: node, args, options, stdout, stderr, exit})
+1 -1
Ver Arquivo
@@ -5,7 +5,7 @@ CoffeeScript = require 'coffee-script'
CSON = require 'season'
fs = require 'fs-plus'
cacheDir = path.join(fs.absolute('~/.atom'), 'compile-cache')
cacheDir = path.join(process.env.ATOM_HOME, 'compile-cache')
stats =
hits: 0
+6 -1
Ver Arquivo
@@ -868,7 +868,12 @@ class Config
save: ->
allSettings = {'*': @settings}
allSettings = _.extend allSettings, @scopedSettingsStore.propertiesForSource(@getUserConfigPath())
CSON.writeFileSync(@configFilePath, allSettings)
try
CSON.writeFileSync(@configFilePath, allSettings)
catch error
message = "Failed to save `#{path.basename(@configFilePath)}`"
detail = error.message
@notifyFailure(message, detail)
###
Section: Private methods managing global settings
+1 -7
Ver Arquivo
@@ -1,14 +1,10 @@
path = require 'path'
fs = require 'fs-plus'
LessCache = require 'less-cache'
{Subscriber} = require 'emissary'
# {LessCache} wrapper used by {ThemeManager} to read stylesheets.
module.exports =
class LessCompileCache
Subscriber.includeInto(this)
@cacheDir: path.join(require('./coffee-cache').cacheDir, 'less')
@cacheDir: path.join(process.env.ATOM_HOME, 'compile-cache', 'less')
constructor: ({resourcePath, importPaths}) ->
@lessSearchPaths = [
@@ -35,5 +31,3 @@ class LessCompileCache
cssForFile: (stylesheetPath, lessContent) ->
@cache.cssForFile(stylesheetPath, lessContent)
destroy: -> @unsubscribe()
+1 -2
Ver Arquivo
@@ -213,8 +213,7 @@ LinesComponent = React.createClass
innerHTML = ""
scopeStack = []
firstTrailingWhitespacePosition = text.search(/\s*$/)
lineIsWhitespaceOnly = firstTrailingWhitespacePosition is 0
lineIsWhitespaceOnly = line.isOnlyWhitespace()
for token in tokens
innerHTML += @updateScopeStack(scopeStack, token.scopes)
hasIndentGuide = not editor.isMini() and showIndentGuide and (token.hasLeadingWhitespace() or (token.hasTrailingWhitespace() and lineIsWhitespaceOnly))
+2 -2
Ver Arquivo
@@ -152,12 +152,12 @@ class PaneContainer extends Model
saveAll: ->
pane.saveItems() for pane in @getPanes()
confirmClose: ->
confirmClose: (options) ->
allSaved = true
for pane in @getPanes()
for item in pane.getItems()
unless pane.promptToSaveItem(item)
unless pane.promptToSaveItem(item, options)
allSaved = false
break
+25 -4
Ver Arquivo
@@ -437,8 +437,8 @@ class Pane extends Model
destroyInactiveItems: ->
@destroyItem(item) for item in @getItems() when item isnt @activeItem
promptToSaveItem: (item) ->
return true unless item.shouldPromptToSave?()
promptToSaveItem: (item, options={}) ->
return true unless item.shouldPromptToSave?(options)
if typeof item.getURI is 'function'
uri = item.getURI()
@@ -481,7 +481,10 @@ class Pane extends Model
itemURI = item.getUri()
if itemURI?
item.save?()
try
item.save?()
catch error
@handleSaveError(error)
nextAction?()
else
@saveItemAs(item, nextAction)
@@ -498,7 +501,10 @@ class Pane extends Model
itemPath = item.getPath?()
newItemPath = atom.showSaveDialogSync(itemPath)
if newItemPath
item.saveAs(newItemPath)
try
item.saveAs(newItemPath)
catch error
@handleSaveError(error)
nextAction?()
# Public: Save all items.
@@ -667,3 +673,18 @@ class Pane extends Model
for item in @getItems()
return false unless @promptToSaveItem(item)
true
handleSaveError: (error) ->
if error.message.endsWith('is a directory')
atom.notifications.addWarning("Unable to save file: #{error.message}")
else if error.code is 'EACCES' and error.path?
atom.notifications.addWarning("Unable to save file: Permission denied '#{error.path}'")
else if error.code in ['EPERM', 'EBUSY', 'UNKNOWN'] and error.path?
atom.notifications.addWarning("Unable to save file '#{error.path}'", detail: error.message)
else if error.code is 'EROFS' and error.path?
atom.notifications.addWarning("Unable to save file: Read-only file system '#{error.path}'")
else if errorMatch = /ENOTDIR, not a directory '([^']+)'/.exec(error.message)
fileName = errorMatch[1]
atom.notifications.addWarning("Unable to save file: A directory in the path '#{fileName}' could not be written to")
else
throw error
+5 -1
Ver Arquivo
@@ -641,7 +641,11 @@ class TextEditor extends Model
# Determine whether the user should be prompted to save before closing
# this editor.
shouldPromptToSave: -> @isModified() and not @buffer.hasMultipleEditors()
shouldPromptToSave: ({windowCloseRequested}={}) ->
if windowCloseRequested
@isModified()
else
@isModified() and not @buffer.hasMultipleEditors()
###
Section: Reading Text
+3 -7
Ver Arquivo
@@ -9,6 +9,7 @@ idCounter = 1
module.exports =
class TokenizedLine
endOfLineInvisibles: null
lineIsWhitespaceOnly: false
constructor: ({tokens, @lineEnding, @ruleStack, @startBufferColumn, @fold, @tabLength, @indentLevel, @invisibles}) ->
@startBufferColumn ?= 0
@@ -146,7 +147,7 @@ class TokenizedLine
markLeadingAndTrailingWhitespaceTokens: ->
firstNonWhitespaceIndex = @text.search(NonWhitespaceRegex)
firstTrailingWhitespaceIndex = @text.search(TrailingWhitespaceRegex)
lineIsWhitespaceOnly = firstTrailingWhitespaceIndex is 0
@lineIsWhitespaceOnly = firstTrailingWhitespaceIndex is 0
index = 0
for token in @tokens
if index < firstNonWhitespaceIndex
@@ -202,12 +203,7 @@ class TokenizedLine
false
isOnlyWhitespace: ->
if @text == ''
true
else
for token in @tokens
return false unless token.isOnlyWhitespace()
true
@lineIsWhitespaceOnly
tokenAtIndex: (index) ->
@tokens[index]
+3 -3
Ver Arquivo
@@ -31,8 +31,8 @@ class WindowEventHandler
atom.updateAvailable(detail)
# FIXME: Remove this when deprecations are removed
{releaseVersion, releaseNotes} = detail
detail = [releaseVersion, releaseNotes]
{releaseVersion} = detail
detail = [releaseVersion]
if workspaceElement = atom.views.getView(atom.workspace)
atom.commands.dispatch workspaceElement, "window:update-available", detail
@@ -52,7 +52,7 @@ class WindowEventHandler
@subscribe $(window), 'blur', -> document.body.classList.add('is-blurred')
@subscribe $(window), 'beforeunload', =>
confirmed = atom.workspace?.confirmClose()
confirmed = atom.workspace?.confirmClose(windowCloseRequested: true)
atom.hide() if confirmed and not @reloadRequested and atom.getCurrentWindow().isWebViewFocused()
@reloadRequested = false
+4 -24
Ver Arquivo
@@ -599,8 +599,8 @@ class Workspace extends Model
saveAll: ->
@paneContainer.saveAll()
confirmClose: ->
@paneContainer.confirmClose()
confirmClose: (options) ->
@paneContainer.confirmClose(options)
# Save the active pane item.
#
@@ -609,7 +609,7 @@ class Workspace extends Model
# {::saveActivePaneItemAs} # will be called instead. This method does nothing
# if the active item does not implement a `.save` method.
saveActivePaneItem: ->
@saveActivePaneItemAndReportErrors('saveActiveItem')
@getActivePane().saveActiveItem()
# Prompt the user for a path and save the active pane item to it.
#
@@ -617,27 +617,7 @@ class Workspace extends Model
# `.saveAs` on the item with the selected path. This method does nothing if
# the active item does not implement a `.saveAs` method.
saveActivePaneItemAs: ->
@saveActivePaneItemAndReportErrors('saveActiveItemAs')
saveActivePaneItemAndReportErrors: (method) ->
try
@getActivePane()[method]()
catch error
if error.message.endsWith('is a directory')
atom.notifications.addWarning("Unable to save file: #{error.message}")
else if error.code is 'EACCES' and error.path?
atom.notifications.addWarning("Unable to save file: Permission denied '#{error.path}'")
else if error.code is 'EPERM' and error.path?
atom.notifications.addWarning("Unable to save file '#{error.path}'", detail: error.message)
else if error.code is 'EBUSY' and error.path?
atom.notifications.addWarning("Unable to save file '#{error.path}'", detail: error.message)
else if error.code is 'EROFS' and error.path?
atom.notifications.addWarning("Unable to save file: Read-only file system '#{error.path}'")
else if errorMatch = /ENOTDIR, not a directory '([^']+)'/.exec(error.message)
fileName = errorMatch[1]
atom.notifications.addWarning("Unable to save file: A directory in the path '#{fileName}' could not be written to")
else
throw error
@getActivePane().saveActiveItemAs()
# Destroy (close) the active pane item.
#
+17
Ver Arquivo
@@ -13,6 +13,23 @@ window.onload = function() {
var fs = require('fs');
var path = require('path');
// Ensure ATOM_HOME is always set before anything else is required
if (!process.env.ATOM_HOME) {
var home;
if (process.platform === 'win32') {
home = process.env.USERPROFILE;
} else {
home = process.env.HOME;
}
var atomHome = path.join(home, '.atom');
try {
atomHome = fs.realpathSync(atomHome);
} catch (error) {
// Ignore since the path might just not exist yet.
}
process.env.ATOM_HOME = atomHome;
}
// Skip "?loadSettings=".
var rawLoadSettings = decodeURIComponent(location.search.substr(14));
var loadSettings;