Comparar commits

...

630 Commits

Autor SHA1 Mensagem Data
Nathan Sobo 91d6ad5b03 Update style guide
Signed-off-by: Max Brunsfeld <maxbrunsfeld@gmail.com>
2015-01-12 18:06:36 -08:00
Nathan Sobo 588128d4f0 Capitalize initialisms
Signed-off-by: Max Brunsfeld <maxbrunsfeld@gmail.com>
2015-01-12 18:06:31 -08:00
Kevin Sawicki 415a7e3214 Merge pull request #4930 from atom/ks-add-colors-to-config-schema
Add color support to config schema
2015-01-12 17:54:14 -08:00
Kevin Sawicki 1f3708115e 💄 2015-01-12 17:34:44 -08:00
Kevin Sawicki 55c8b37395 📝 Link to config method 2015-01-12 17:34:44 -08:00
Kevin Sawicki 9d3e9d19e1 📝 Link to Color 2015-01-12 17:34:44 -08:00
Kevin Sawicki 432c31c4dc 💄 2015-01-12 17:34:44 -08:00
Kevin Sawicki e257395f7d Always use settings for parsing 2015-01-12 17:34:44 -08:00
Kevin Sawicki 3f224716a1 💄 2015-01-12 17:34:43 -08:00
Kevin Sawicki 640f8920fb Fix bounds checking of alpha 2015-01-12 17:34:43 -08:00
Kevin Sawicki c015a5c03b 📝 Add period 2015-01-12 17:34:43 -08:00
Kevin Sawicki 88f489715f 📝 Add period 2015-01-12 17:34:43 -08:00
Kevin Sawicki f48a7ac210 Mark methods as essential 2015-01-12 17:34:43 -08:00
Kevin Sawicki 44939a12a0 Validate color properties when set 2015-01-12 17:34:43 -08:00
Kevin Sawicki b256d30bc7 Mark Color as public 2015-01-12 17:34:43 -08:00
Kevin Sawicki 574c56713c Add Color class with string helpers 2015-01-12 17:34:43 -08:00
Kevin Sawicki b8822b32db Only coerce strings and plain objects 2015-01-12 17:34:43 -08:00
Kevin Sawicki 8c39818670 Don't blow up when asking for schema at non-existent path 2015-01-12 17:34:43 -08:00
Kevin Sawicki 5a2c208804 Add specs with invalid objects 2015-01-12 17:34:43 -08:00
Kevin Sawicki fc899f54cf Add specs for setting with an object 2015-01-12 17:34:42 -08:00
Kevin Sawicki c480080dd2 Add fallback values when NaN is parsed 2015-01-12 17:34:42 -08:00
Kevin Sawicki b923b57bcc Add specs for hsl and hsla colors 2015-01-12 17:34:42 -08:00
Kevin Sawicki 1609b6c51b ⬆️ legal-eagle@0.8 2015-01-12 17:34:42 -08:00
Kevin Sawicki 66e30dd38a ⬆️ legal-eagle@0.7 2015-01-12 17:34:42 -08:00
Kevin Sawicki ec96c5f1fc 📝 Add color docs 2015-01-12 17:34:42 -08:00
Kevin Sawicki 319ec244e1 Add spec for invalid values 2015-01-12 17:34:42 -08:00
Kevin Sawicki 1267a1e14e Add spec for default color value 2015-01-12 17:34:42 -08:00
Kevin Sawicki 0411f1584c Add color schema type 2015-01-12 17:34:42 -08:00
Kevin Sawicki 9dc9359e7c ⬆️ apm@0.119 2015-01-12 17:32:27 -08:00
Kevin Sawicki 47668306bd ⬆️ styleguide@0.41 2015-01-12 17:30:48 -08:00
Kevin Sawicki 09920548e8 ⬆️ styleguide@0.40 2015-01-12 17:25:29 -08:00
Kevin Sawicki dea4e4dc19 ⬆️ markdown-preview@0.117 2015-01-12 17:25:29 -08:00
Kevin Sawicki 95ae4a704e ⬆️ snippets@0.67 2015-01-12 17:25:29 -08:00
Kevin Sawicki 903df93933 ⬆️ settings-view@0.169 2015-01-12 17:25:29 -08:00
Kevin Sawicki 4bc6906bdc ⬆️ language-gfm@0.62 2015-01-12 17:25:29 -08:00
Kevin Sawicki f6f71db9ee ⬆️ first-mate@2.2.4 2015-01-12 17:25:29 -08:00
Kevin Sawicki aca8dc3dfb ⬆️ atom-keymap@2.5.1 2015-01-12 17:25:28 -08:00
Nathan Sobo 8e0e6f5508 Merge pull request #5017 from atom/ns-per-editor-gutter-visibility
Add gutter-hidden attribute to atom-text-editor elements
2015-01-12 18:11:50 -07:00
Kevin Sawicki c4d38a738b Merge pull request #4971 from atom/ks-four-season
Stop eval'ing .cson files
2015-01-12 17:06:39 -08:00
Nathan Sobo eee31c3e8c Don’t use component property for TextEditorView::mini shim
Signed-off-by: Max Brunsfeld <maxbrunsfeld@gmail.com>
2015-01-12 17:56:47 -07:00
Kevin Sawicki f40d2fb1cc ⬆️ season@5.0.2 2015-01-12 16:55:58 -08:00
Kevin Sawicki 8c30f5fe3f ⬆️ season@5.0.1 2015-01-12 16:55:58 -08:00
Kevin Sawicki e69bd77ef2 ⬆️ coffeestack@0.8 2015-01-12 16:55:58 -08:00
Kevin Sawicki 1c57a48287 ⬆️ coffee-script@1.8 2015-01-12 16:55:58 -08:00
Kevin Sawicki e5a1f15833 Unfocus spec 2015-01-12 16:55:58 -08:00
Kevin Sawicki 8a13c4b959 ⬆️ season@5 2015-01-12 16:55:58 -08:00
Kevin Sawicki 36c0d214f0 ⬆️ season@4.0.3 2015-01-12 16:55:58 -08:00
Kevin Sawicki ae859bad46 ⬆️ season@4.0.2 2015-01-12 16:55:58 -08:00
Kevin Sawicki 1207a432eb ⬆️ season@4.0.1 2015-01-12 16:55:58 -08:00
Kevin Sawicki 2f31822942 ⬆️ grunt-cson@0.11 2015-01-12 16:55:57 -08:00
Kevin Sawicki dea75513b5 Add missing colon 2015-01-12 16:55:57 -08:00
Kevin Sawicki c3a2b3d321 Add cson-safe license override 2015-01-12 16:55:57 -08:00
Kevin Sawicki 97dd53cbdb ⬆️ season@4 2015-01-12 16:55:57 -08:00
Nathan Sobo dd80226c23 Revert "Handle addition/removal of ‘gutter-hidden’ attribute"
This reverts commit 6926236268.

There seems to be some bug or timing issue that prevents the
attachedCallback from being called in all cases when the
attributeChangedCallback is defined. We can figure this out at
a later time.
2015-01-12 17:39:07 -07:00
Nathan Sobo 6926236268 Handle addition/removal of ‘gutter-hidden’ attribute
Signed-off-by: Max Brunsfeld <maxbrunsfeld@gmail.com>
2015-01-12 16:21:31 -07:00
Nathan Sobo 43f57347d7 Add ‘gutter-hidden’ attribute to TextEditorElement
Signed-off-by: Max Brunsfeld <maxbrunsfeld@gmail.com>
2015-01-12 16:21:31 -07:00
Nathan Sobo c0b78db159 💄
Signed-off-by: Max Brunsfeld <maxbrunsfeld@gmail.com>
2015-01-12 16:21:31 -07:00
Nathan Sobo 002918049d 🐎 Cache gutterVisible state in React component
This avoids a config read on every render.
2015-01-12 16:21:31 -07:00
Nathan Sobo f00b0b7f7a Add TextEditor::set/isGutterVisible
Controls gutter visibility on individual editors.

Signed-off-by: Max Brunsfeld <maxbrunsfeld@gmail.com>
2015-01-12 16:21:31 -07:00
Daniel Hengeveld 6ef8c21977 Merge pull request #5015 from atom/dh-bump-settings-view
⬆️ settings-view@0.168
2015-01-12 12:51:26 -08:00
Daniel Hengeveld 9b2ec09bf1 ⬆️ settings-view@0.168 2015-01-12 12:17:30 -08:00
Ben Ogle 52e91932e0 Merge pull request #5013 from kant/patch-1
Little fix
2015-01-12 11:27:42 -08:00
Darío Hereñú acd34ffaf8 Little fix 2015-01-12 16:27:01 -03:00
Kevin Sawicki 2f62346c58 Link to Windows CI post as well 2015-01-12 11:15:50 -08:00
Ben Ogle f59ffc2485 Merge pull request #4979 from DinisCruz/patch-1
Adding link to blog post with Travis CI instructions
2015-01-12 10:54:32 -08:00
Kevin Sawicki 3090a24957 Prepare 0.171 2015-01-12 10:02:15 -08:00
Kevin Sawicki b39cee3997 ⬆️ language-python@0.30 2015-01-12 09:18:15 -08:00
Kevin Sawicki 8c6e782bd4 ⬆️ language-javascript@0.54 2015-01-12 09:17:13 -08:00
Kevin Sawicki 31106874ed ⬆️ language-xml@0.27 2015-01-12 09:16:23 -08:00
Max Brunsfeld ee73d2cf2a 📝 fix ::onDidChangeActivePaneItem docs
Refs #4946
2015-01-12 08:24:44 -08:00
Dinis Cruz f946061b6c Adding link to blog post with Travis CI instructions 2015-01-10 12:27:32 +00:00
Kevin Sawicki 29f95b88db deprecatedStart is an index 2015-01-09 18:40:57 -08:00
Ben Ogle 48e6cd533d Add wasDisplayed to Notification 2015-01-09 17:35:26 -08:00
Max Brunsfeld 6cc1ffa793 ⬆️ atom-keymap@2.5.0 2015-01-09 17:11:52 -08:00
Max Brunsfeld ee7587e024 Update task docs 2015-01-09 16:59:13 -08:00
Max Brunsfeld fb0769783f Don't use Emitter::off in Task
Signed-off-by: Nathan Sobo <nathan@github.com>
2015-01-09 16:59:13 -08:00
Max Brunsfeld 174b7072b7 Add specs for Task events
Signed-off-by: Nathan Sobo <nathan@github.com>
2015-01-09 16:59:13 -08:00
Kevin Sawicki f5cd8d107f Merge pull request #4973 from atom/ld-scope-notification
Log scopes to notification instead of console
2015-01-09 16:43:50 -08:00
Lee Dohm ef97197681 Use list.map instead of _.map list 2015-01-09 16:42:16 -08:00
Lee Dohm acb19c1fe1 Log scopes to notification instead of console
Fixes #4969
2015-01-09 16:33:48 -08:00
Kevin Sawicki 495a45e723 ⬆️ language-gfm@0.61 2015-01-09 15:48:17 -08:00
Max Brunsfeld 02a6ed554d Make ContextMenuManager::showForEvent private
Signed-off-by: Nathan Sobo <nathan@github.com>
2015-01-09 15:47:30 -08:00
Max Brunsfeld dde5e6123c Make Cursor::updateVisibility private 2015-01-09 15:41:08 -08:00
Nathan Sobo d26c19a0ec Deprecate Project::resolve
It’s not something that will make sense once we add the ability to have
multiple directories in a project. This adds a new private method on
Project, ::resolvePath, with the original implementation for convenience
until we actually implement multi-folder projects.
2015-01-09 15:03:07 -08:00
Max Brunsfeld f9bde050b4 Handle TextEditorElement::focus() while parent is being attached
Fixes atom/autocomplete#61
2015-01-09 15:00:35 -08:00
Nathan Sobo 19bf64f3cd Revert "Deprecate Project::resolve"
This reverts commit 3c5bd9f10a.
2015-01-09 13:58:01 -08:00
Nathan Sobo 3c5bd9f10a Deprecate Project::resolve
It’s not something that will make sense once we add the ability to have
multiple directories in a project.
2015-01-09 13:40:35 -08:00
Ben Ogle a47782ddd8 Fix context menu docs Closes #4963 2015-01-09 13:28:57 -08:00
Nathan Sobo f21dc22803 Merge pull request #4955 from atom/ns-style-sheet-is-2-words
"Style sheet" is two words – Treat it that way in the API
2015-01-09 11:36:16 -08:00
Kevin Sawicki efe9102060 ⬆️ apm@0.118 2015-01-09 11:16:18 -08:00
Nathan Sobo 2c72c1522a ⬆️ open-on-github 2015-01-09 09:28:15 -08:00
Nathan Sobo 0a5b4f9b33 Make “style sheet” two words in package.json metadata
Rename `stylesheets` -> `styleSheets`
Rename `stylesheetsMain` -> `mainStyleSheet`
2015-01-09 09:04:04 -08:00
Nathan Sobo 932d3755ce Rename stylesheets/ directory in fixture packages 2015-01-09 08:56:12 -08:00
Nathan Sobo a2e855f087 Update docs to refer to styles/ instead of stylesheets/ 2015-01-09 08:42:28 -08:00
Nathan Sobo c078f64293 Rename package stylesheets/ directory to styles/ 2015-01-09 08:42:15 -08:00
Nathan Sobo 37ba67728b Fix core deprecations 2015-01-09 08:24:48 -08:00
Nathan Sobo 7f9d06f55b Move TextEditor::pixelPositionForScreen/BufferPosition to view layer
It doesn’t make sense to talk about pixels at the model layer long-term,
even though we currently store view dimension information in the model
so we don’t have to read from the DOM for optimization purposes. This
information is only available if the view is attached, however, making
these methods a liability on the model layer.
2015-01-09 08:22:45 -08:00
Nathan Sobo f151697c4c ⬆️ packages to remove deprecations 2015-01-08 18:29:38 -08:00
Max Brunsfeld d47efdb2f1 Merge pull request #4937 from atom/ns-clean-up-package-manager
Address issues with PackageManager
2015-01-08 18:21:51 -08:00
Nathan Sobo c3efed0a2c Update deprecation messages 2015-01-08 18:21:07 -08:00
Nathan Sobo a945725a2f Add shims for tests that manually dispatch deprecated events 2015-01-08 17:51:11 -08:00
Nathan Sobo 723b4d2787 Fix undefined Grim references 2015-01-08 17:51:11 -08:00
Nathan Sobo 4ab33890fc Add PackageManager::onDidLoad/UnloadPackage
Signed-off-by: Max Brunsfeld <maxbrunsfeld@gmail.com>
2015-01-08 17:51:11 -08:00
Nathan Sobo 7acf3d4d6b Add PackageManager::onDidDeactivatePackage 2015-01-08 17:51:11 -08:00
Nathan Sobo 6dd9834ae1 Remove defunct text-mate package specs 2015-01-08 17:51:11 -08:00
Nathan Sobo a6c9244c77 Add PackageManager::onDidActivatePackage
Signed-off-by: Max Brunsfeld <maxbrunsfeld@gmail.com>
2015-01-08 17:51:11 -08:00
Nathan Sobo dbc88bde18 Remove special case in spec for packages converted from text-mate
Signed-off-by: Max Brunsfeld <maxbrunsfeld@gmail.com>
2015-01-08 17:51:11 -08:00
Nathan Sobo 18ac0091a8 Don’t call onDidActivateInitialPackages listeners until the right time
We wait until all packages without activation commands actually
activate.

Signed-off-by: Max Brunsfeld <maxbrunsfeld@gmail.com>
2015-01-08 17:51:11 -08:00
Nathan Sobo 010bd643c0 Rename onDidActivateAll -> onDidActivateInitialPackages
Signed-off-by: Max Brunsfeld <maxbrunsfeld@gmail.com>
2015-01-08 17:51:11 -08:00
Nathan Sobo 15fa19efa3 Rename onDidLoadAll -> onDidLoadInitialPackages
Signed-off-by: Max Brunsfeld <maxbrunsfeld@gmail.com>
2015-01-08 17:51:11 -08:00
Nathan Sobo 30513cfde0 Rename ThemeManager methods for clarity/consistency
Signed-off-by: Max Brunsfeld <maxbrunsfeld@gmail.com>
2015-01-08 17:51:09 -08:00
Nathan Sobo d999b4eca0 Deprecate ThemeManager::setEnabledThemes
Suggest direct config write instead.

Signed-off-by: Max Brunsfeld <maxbrunsfeld@gmail.com>
2015-01-08 17:48:32 -08:00
Nathan Sobo 4ebd9bc775 ⬆️ deprecation-cop
Closes atom/deprecation-cop#16

Signed-off-by: Max Brunsfeld <maxbrunsfeld@gmail.com>
2015-01-08 17:46:14 -08:00
Nathan Sobo caf613e7c8 Associate packageName metadata with scoped-properties/ deprecation
Signed-off-by: Max Brunsfeld <maxbrunsfeld@gmail.com>
2015-01-08 17:41:50 -08:00
Kevin Sawicki c2da368463 ⬆️ atom-light-ui@0.37 2015-01-08 15:36:47 -08:00
Kevin Sawicki 61f44c9399 ⬆️ language-gfm@0.60 2015-01-08 13:25:07 -08:00
Kevin Sawicki 0a249f776b ⬆️ settings-view@0.167 2015-01-08 13:20:18 -08:00
Kevin Sawicki 00831775dd Merge pull request #4907 from atom/ks-use-different-sudo-compile-cache
Use special compile cache when sudo-ing as root
2015-01-08 11:09:19 -08:00
Ben Ogle 72743235fb Upgrade toatom-dark-ui@0.43.0 2015-01-08 10:47:09 -08:00
Kevin Sawicki 453a44dde3 Use special compile cache when sudo-ing as root 2015-01-08 10:18:54 -08:00
Kevin Sawicki d7158a2ced ⬆️ language-sass@0.31 2015-01-08 10:18:18 -08:00
Kevin Sawicki 4e7a9edefd Prepare 0.170 release 2015-01-08 09:55:06 -08:00
Kevin Sawicki 8fa6fdb90c Merge pull request #4807 from atom/sm-icons
Icon refresh
2015-01-08 09:42:08 -08:00
Kevin Sawicki a57df59cb8 Merge pull request #4911 from postcasio/patch-3
📝 Fix PackageManager::onDidLoadAll description
2015-01-08 09:32:57 -08:00
Kevin Sawicki 99d01b5d0e ⬆️ settings-view@0.166 2015-01-08 09:22:06 -08:00
dominic c806fcf9e7 📝 Fix PackageManager::onDidLoadAll description 2015-01-08 09:42:49 +00:00
Cheng Zhao 1bc9c2eb4b ⬆️ atom-shell@0.20.5 2015-01-08 00:11:59 -08:00
simurai bd08e36d2d Replace Win icons 2015-01-08 14:14:12 +09:00
Kevin Sawicki 76a2b8c54a Add sample list item 2015-01-07 17:57:11 -08:00
Kevin Sawicki 131d2ab3ad 📝 Drop the parens 2015-01-07 17:35:25 -08:00
Kevin Sawicki 0e0c508756 Merge pull request #4901 from danfuzz/fix-url-markdown
📝 Fix URL references for LESS.
2015-01-07 17:34:33 -08:00
Dan Bornstein 325d95ed35 📝 Un-parenthesize the recommendation about LESS.
Per suggestion from @kevinsawicki.
2015-01-07 17:32:07 -08:00
Kevin Sawicki 081fc0e1ae Use icon from resources directory 2015-01-07 16:22:11 -08:00
Kevin Sawicki a6cc6afb16 Don't bundle resources/linux 2015-01-07 16:20:57 -08:00
Nathan Sobo f330e58b4f Prepare 0.169.0 release 2015-01-07 16:35:29 -07:00
Nathan Sobo a406322748 Revert "Remove .pane-item selector from core"
This reverts commit ced66d920d.
2015-01-07 16:12:22 -07:00
Nathan Sobo 8ee428f9dc ⬆️ language-gfm 2015-01-07 15:56:28 -07:00
Nathan Sobo 437873411e ⬆️ base16-tomorrow-light-theme 2015-01-07 15:54:30 -07:00
Nathan Sobo 00eecd4802 ⬆️ settings-view 2015-01-07 15:49:49 -07:00
Kevin Sawicki 2cb13e1a66 Remove lint warning 2015-01-07 14:33:18 -08:00
Kevin Sawicki 8f7f1cef23 Prepare 0.168 2015-01-07 14:25:22 -08:00
Dan Bornstein 34d41efd9a 📝 Fix URL references for LESS. 2015-01-07 14:17:23 -08:00
Ben Ogle 82527c24f2 Upgrade deprecations asking for space-pen to use atom-space-pen-views 2015-01-07 14:02:57 -08:00
Kevin Sawicki ccfe787e4f ⬆️ snippets@0.66 2015-01-07 13:40:26 -08:00
Nathan Sobo 4a5b43553b ⬆️ atom-light-syntax 2015-01-07 14:19:25 -07:00
Kevin Sawicki da1ceb0e51 ⬆️ settings-view@0.164 2015-01-07 12:59:32 -08:00
Kevin Sawicki 97e0ddf15d Null out mainPath on resolve errors
The scope of this variable is outside the loop so this prevent
cache corruption based on using the mainPath value from previous
module.

Refs atom/atom-space-pen-views#5
2015-01-07 10:53:33 -08:00
Kevin Sawicki fb3cc5554c Catch errors spawning squirrel
Closes #4895
2015-01-07 10:24:19 -08:00
Nathan Sobo 184aecb4a4 ⬆️ snippets for onDidLoadSnippets method on main module 2015-01-07 10:48:49 -07:00
Nathan Sobo 181cecaf2f ⬆️ atom-light-syntax 2015-01-07 10:34:31 -07:00
Nathan Sobo ced66d920d Remove .pane-item selector from core
It’s still in some themes, but we should be able to use a structural
selector to style anything in the pane so people don’t have to add
this class.
2015-01-07 10:25:32 -07:00
Kevin Sawicki 6fe7eb086f Gracefully handle empty keymaps and menus
Closes atom/settings-view#310
2015-01-07 09:18:57 -08:00
Nathan Sobo 462af79d21 Fix deprecation suppression in specs 2015-01-07 10:12:04 -07:00
Kevin Sawicki 771a60b1bc ⬆️ language-less@0.24 2015-01-07 09:01:33 -08:00
Kevin Sawicki 3e34e426bf ⬆️ language-c@0.37 2015-01-07 09:00:10 -08:00
Nathan Sobo f77f48102c Merge pull request #4879 from atom/ns-style-priorities
Use 'priority' to correctly order style sheets rather than 'group'
2015-01-07 09:51:55 -07:00
Nathan Sobo 7dd67caf57 Remove ‘group’ parameter to addStyleSheet in favor of ‘priority’ 2015-01-07 09:51:42 -07:00
Nathan Sobo 8081595523 Merge pull request #4890 from SKAhack/fix-1
Fix removing the dragover event listener
2015-01-07 09:51:06 -07:00
Nathan Sobo 47cd2359c8 ⬆️ spell-check for shadow DOM fix 2015-01-07 09:43:19 -07:00
simurai 13cf51f835 Replace file icon 2015-01-07 23:06:08 +09:00
Hiroki Sato 571d146ec0 Fix removing the dragover event listener 2015-01-07 22:49:25 +09:00
simurai dc06173f2f Replace main icon 2015-01-07 17:13:34 +09:00
simurai 358799285e Increse icon line thickness 2015-01-07 16:49:31 +09:00
Kevin Sawicki 8f4555b970 ⬆️ settings-view@0.163 2015-01-06 20:31:23 -08:00
Kevin Sawicki e0bc7948ae ⬆️ settings-view@0.162 2015-01-06 20:27:52 -08:00
Kevin Sawicki a606fc516b 💄 2015-01-06 20:26:45 -08:00
Nathan Sobo 2c1f8ce733 Set the style element priority based on the group
This ensures that elements are always in the desired order regardless
of the order the groups are added.
2015-01-06 19:41:57 -07:00
Nathan Sobo 62adc98b17 Use ‘user’ group for user style sheet instead of ‘userTheme’ 2015-01-06 19:33:39 -07:00
Nathan Sobo 94e12ee886 Handle priority in when inserting style elements in style manager 2015-01-06 19:33:14 -07:00
Nathan Sobo 4c74b07b22 Order style elements by priority 2015-01-06 19:14:54 -07:00
Kevin Sawicki 8eb53696a6 Merge pull request #4877 from atom/ld-doc-mention-unlink
📝 Add section on apm unlink to debugging doc
2015-01-06 18:01:14 -08:00
Lee Dohm f9e28af59b 📝 Add section on apm unlink to debugging doc 2015-01-06 17:56:04 -08:00
Ben Ogle 3b5bb1501c 💄 2015-01-06 17:09:59 -08:00
Ben Ogle 8c4c15c17a Fix colons in examples 2015-01-06 17:03:29 -08:00
Ben Ogle ae61ecf602 Upgrade to event-kit@1.0.1 2015-01-06 17:01:46 -08:00
Ben Ogle 9a7582fd0b Upgrade solarized-light@0.17.0 2015-01-06 16:53:39 -08:00
Ben Ogle f7f2f4497b Add docs for cson format to menu manager 2015-01-06 16:51:15 -08:00
Ben Ogle d4c4ab58b1 More information in the context menu docs 2015-01-06 16:45:31 -08:00
Kevin Sawicki a01e6e543e POST data as JSON 2015-01-06 14:21:46 -08:00
Kevin Sawicki d931b3ed5c Use util.inspect on details 2015-01-06 14:18:47 -08:00
Kevin Sawicki b95a7f47a8 Create draft release when one does not exist 2015-01-06 14:09:52 -08:00
Ben Ogle 06cbbe4b67 Upgrade notifications to 0.23.0 2015-01-06 12:37:18 -08:00
Kevin Sawicki 7d44026a92 ⬆️ tabs@0.61 2015-01-06 12:00:06 -08:00
Nathan Sobo 11b0a80d3d ⬆️ bracket-matcher for partial styling fix 2015-01-06 12:47:50 -07:00
Kevin Sawicki 92a8701c70 Add icon and title to update dialogs
Closes #4718
2015-01-06 11:44:10 -08:00
Nathan Sobo 08e1d550c8 ⬆️ autocomplete for spec fix 2015-01-06 12:14:50 -07:00
Nathan Sobo c9eb84f2a4 Fix deprecation location reporting in spec runner 2015-01-06 11:50:20 -07:00
Ben Ogle 74afcc58ac Merge pull request #4858 from atom/ld-doc-project-contains
📝 Prevent confusion over project.contains
2015-01-06 10:49:17 -08:00
Nathan Sobo 180725799a Unmount TextEditorComponent when TextEditorElement is detached
Fixes #4381
Fixes #4700
2015-01-06 11:35:26 -07:00
Kevin Sawicki 03468e405a ⬆️ bracket-matcher@0.66 2015-01-06 10:26:44 -08:00
Kevin Sawicki 1fd4e945ee ⬆️ tabs@0.60 2015-01-06 10:26:29 -08:00
Nathan Sobo 0b48150b71 ⬆️ bracket-matcher for shadow DOM fix 2015-01-06 10:49:35 -07:00
Kevin Sawicki bed8abea22 ⬆️ first-mate@2.2.3 2015-01-06 09:48:26 -08:00
Nathan Sobo 893bdda47d ⬆️ language- packages to rename scoped-properties/ to settings/ 2015-01-06 10:23:28 -07:00
Lee Dohm 0b98093370 📝 Prevent confusion over project.contains
See https://discuss.atom.io/t/testing-for-the-existence-of-a-file/14079
2015-01-05 21:32:11 -08:00
Kevin Sawicki 6abe05b1ab ⬆️ incompatible-packages@0.19 2015-01-05 17:58:13 -08:00
Kevin Sawicki 0f45937adf ⬆️ language-python@0.28 2015-01-05 17:55:53 -08:00
Kevin Sawicki c8726c991f Merge pull request #4592 from atom/chrome39
Upgrade to Chrome39
2015-01-05 17:42:12 -08:00
Nathan Sobo 60205aaabe ⬆️ wrap-guide 2015-01-05 18:33:06 -07:00
Nathan Sobo 6a16c8a59c ⬆️ whitespace 2015-01-05 18:31:49 -07:00
Nathan Sobo a055f09a6c ⬆️ tree-view 2015-01-05 18:23:03 -07:00
Nathan Sobo c19b42a49c ⬆️ styleguide 2015-01-05 18:20:14 -07:00
Nathan Sobo 2632e9aa10 ⬆️ go-to-line 2015-01-05 18:18:49 -07:00
Nathan Sobo a9753d430e ⬆️ spell-check 2015-01-05 18:17:31 -07:00
Kevin Sawicki 796eefd012 ⬆️ apm@0.117 2015-01-05 17:14:58 -08:00
Kevin Sawicki 0f9eea34a5 ⬆️ atom-shell@0.20.4 2015-01-05 17:14:58 -08:00
Kevin Sawicki a84e19c9bd ⬆️ grunt-atom-shell-installer@0.16 2015-01-05 17:14:58 -08:00
Kevin Sawicki 6d276d39d3 ⬆️ atom-shell@0.20.3 2015-01-05 17:14:58 -08:00
Cheng Zhao ab203e5f81 ⬆️ grunt-atom-shell-installer@0.14.0 2015-01-05 17:14:58 -08:00
Cheng Zhao 61512b9e19 ⬆️ apm@0.115.0 2015-01-05 17:14:58 -08:00
Cheng Zhao c29c4652b0 ⬆️ atom-shell@0.20.0 2015-01-05 17:14:58 -08:00
Nathan Sobo a9c0553e31 ⬆️ snippets 2015-01-05 18:11:27 -07:00
Nathan Sobo 6d6e5baa9a ⬆️ markdown-preview 2015-01-05 18:05:38 -07:00
Nathan Sobo 1de76c7d73 ⬆️ base16-tomorrow-dark-theme 2015-01-05 17:57:18 -07:00
Nathan Sobo f6b7450dea ⬆️ background-tips 2015-01-05 17:53:23 -07:00
Nathan Sobo 71e1928f74 ⬆️ autocomplete 2015-01-05 17:49:31 -07:00
Nathan Sobo 1a709065f8 ⬆️ find-and-replace 2015-01-05 17:32:28 -07:00
Kevin Sawicki dca99cb34e ⬆️ language-css@0.25 2015-01-05 15:11:05 -08:00
Kevin Sawicki 3e79f54860 Prepare 0.167 2015-01-05 14:57:02 -08:00
Nathan Sobo a8b5960bc0 Update shadow DOM config setting description 2015-01-05 13:45:42 -07:00
Kevin Sawicki 70e3484a16 ⬆️ archive-view@0.43 2015-01-05 12:38:11 -08:00
Kevin Sawicki 5ac3f58cdb ⬆️ symbols-view@0.77 2015-01-05 12:11:22 -08:00
Kevin Sawicki 692f6947f2 ⬆️ symbols-view@0.76 2015-01-05 11:20:11 -08:00
Ben Ogle 08fad809d2 Merge pull request #4836 from atom/ld-doc-for-4834
Add priority recommendation for variable-sized panels
2015-01-05 11:06:00 -08:00
Kevin Sawicki ba63239928 ⬆️ grunt-atom-shell-installer@0.13.2 2015-01-05 10:51:42 -08:00
Nathan Sobo d90c8c0fb7 ⬆️ packages to upgrade to space-pen 5.0 everywhere 2015-01-05 11:33:41 -07:00
Kevin Sawicki 35e782f05d ⬆️ notifications@0.22 2015-01-05 10:28:46 -08:00
Kevin Sawicki 00af9a93d7 ⬆️ language-gfm@0.58 2015-01-05 09:52:58 -08:00
Kevin Sawicki 018e22ad8d ⬆️ language-php@0.19 2015-01-05 09:41:25 -08:00
Lee Dohm f73d3df233 📝 Add priority recommendation for variable-sized panels
Applies to #4834
2015-01-03 10:36:56 -08:00
Nathan Sobo 25b44ceb1a ⬆️ release-notes 2015-01-02 15:16:37 -07:00
Nathan Sobo c28ecf1a7d ⬆️ wrap-guide to upgrade its grim dependency to 1.0 2015-01-02 15:10:48 -07:00
Nathan Sobo 478e80e585 Update indirect event-kit dependencies to 1.0 2015-01-02 15:08:00 -07:00
Nathan Sobo 08be377004 Update tree-view to upgrade its event-kit dependency 2015-01-02 14:59:02 -07:00
Nathan Sobo 4db3e47377 ⬆️ event-kit to 1.0 2015-01-02 14:52:22 -07:00
Nathan Sobo 76857b4486 Update dependencies with outdated grim dependencies 2015-01-02 14:50:51 -07:00
Nathan Sobo e743d93d6d Update packages with outdated grim dependencies 2015-01-02 14:50:26 -07:00
Nathan Sobo f443c375d4 ⬆️ packages so all atom-space-pen-views dependencies are 1.0 2015-01-02 14:24:44 -07:00
Nathan Sobo b9b488bee2 ⬆️ grim 2015-01-02 13:02:45 -07:00
Nathan Sobo e192922f0e Don’t add __spacePenView property to jQuery objects in ViewRegistry
This property is added as needed in our legacy SpacePen views, and is
now used to trigger a deprecation warning. We don’t want to add it to
new SpacePen views because they shouldn’t trigger deprecation warnings.
2015-01-02 12:58:49 -07:00
Max Brunsfeld d1c41fbf68 Merge pull request #4827 from atom/mb-fix-cursor-next-word
Respect options to Cursor::getBeginningOfNextWordBufferPosition
2015-01-01 23:18:02 -08:00
Max Brunsfeld aa8b97a039 Respect options to Cursor::getBeginningOfNextWordBufferPosition 2015-01-01 23:02:24 -08:00
Max Brunsfeld 5276cb716a ⬆️ tree-view@0.142 2014-12-30 20:22:36 -08:00
Max Brunsfeld 03f8a32f86 Merge pull request #4812 from atom/mb-fix-fold-all-at-indent-level
Fix LanguageMode::foldAllAtIndentLevel
2014-12-30 18:18:58 -08:00
Max Brunsfeld eabb498af7 Fix LanguageMode::foldAllAtIndentLevel 2014-12-30 18:10:28 -08:00
Max Brunsfeld a1e4c0bb05 Don't use ScopedPropertyStore::getProperties 2014-12-30 16:58:16 -08:00
Nathan Sobo 6a285b695f ⬆️ autocomplete 2014-12-30 17:41:28 -06:00
Nathan Sobo 7f66a2fca4 Default shadow DOM to enabled 2014-12-30 17:10:11 -06:00
Nathan Sobo 6565f6d608 ⬆️ autocomplete to fix key bindings 2014-12-30 16:55:39 -06:00
Nathan Sobo 493035fe4e Merge pull request #4606 from atom/ns-use-global-selector-in-config
Use `*` instead of `global` as the global selector in user settings
2014-12-30 16:37:09 -06:00
Nathan Sobo 6e30998ef5 ⬆️ grim for optimizations and source maps 2014-12-30 16:33:30 -06:00
Max Brunsfeld 825c4f6098 Remove incorrect docs for ::toggleLineCommentsForBufferRows 2014-12-30 12:36:46 -08:00
Nathan Sobo b4756aa9b7 Remove unnecessary deprecation warning suppression 2014-12-30 13:55:49 -06:00
Nathan Sobo 651fa1aa42 💄 spelling 2014-12-30 13:53:46 -06:00
Nathan Sobo db17fe2daa 💄 Move example to a better parent describe 2014-12-30 13:53:38 -06:00
Max Brunsfeld 1e0c839257 Merge pull request #4779 from ultramiraculous/typo
Fix typo in WorkspaceView deprecation
2014-12-30 11:41:27 -08:00
Nathan Sobo 18481789b0 Merge pull request #4801 from atom/ns-package-settings-dir
Load package settings from `settings` directory and deprecate `scoped-properties`
2014-12-30 13:41:13 -06:00
Nathan Sobo 304f63532e Replace ‘global’ config key with ‘*’ selector 2014-12-30 13:38:12 -06:00
Max Brunsfeld 6e7364c7c6 Merge pull request #4802 from atom/mb-reduce-config-saves
Don't write the config to disk so darn often
2014-12-30 10:41:01 -08:00
Max Brunsfeld 339f331776 Debounce saving and loading of config 2014-12-30 10:14:57 -08:00
simurai 6b34a18bd9 Replace Mac icons
with Yosemite version
2014-12-30 23:04:49 +09:00
Max Brunsfeld 32275b27a3 Always spy on _.now 2014-12-30 00:04:17 -08:00
Max Brunsfeld 5c730415b7 Use fake config file for entire Config spec 2014-12-30 00:03:34 -08:00
Max Brunsfeld 637b2b0aba Don't save config when setting w/ non-default source 2014-12-29 17:08:26 -08:00
Nathan Sobo b4246a2f07 Load package settings from settings and deprecate scoped-properties 2014-12-29 15:46:10 -06:00
Nathan Sobo 31170dcfae Merge pull request #4794 from atom/ns-move-project-scan
Move Project::replace and ::scan to Workspace
2014-12-29 15:03:19 -06:00
Daniel Hengeveld f784b51f12 Merge pull request #4078 from atom/doc-apm-search-sorting
Mention sorting by stars in docs (was: document api search and sorting)
2014-12-29 11:44:31 -08:00
Max Brunsfeld 3c6dab22d8 Merge pull request #4796 from atom/mb-config-get-all
Add Config::getAll
2014-12-29 11:35:43 -08:00
Daniel Hengeveld e80f5acd50 Merge branch 'master' into doc-apm-search-sorting
Conflicts:
	docs/apm-rest-api.md
2014-12-29 11:33:04 -08:00
Max Brunsfeld 90aca1c6ad 💄 fix lint errors
Signed-off-by: Nathan Sobo <nathan@github.com>
2014-12-29 11:07:43 -08:00
Max Brunsfeld c7771ffde9 Add Config::getAll, deprecate ::settingsForScopeDescriptor
Signed-off-by: Nathan Sobo <nathan@github.com>
2014-12-29 11:01:46 -08:00
Nathan Sobo bdfc862dac Move Project::replace to Workspace 2014-12-29 11:43:17 -06:00
Nathan Sobo 2c7aa170e9 Move Project::scan to Workspace 2014-12-29 11:35:07 -06:00
Chris Williams 6c8d624e73 Typo in WorkspaceView deprecation 2014-12-27 15:42:23 -05:00
Max Brunsfeld 57a876e677 Merge pull request #4773 from atom/mb-remove-add-scoped-properties
Deprecate `Config::addScopedProperties`
2014-12-26 20:07:10 -08:00
Max Brunsfeld 20adc96e4c Add editor.completions to config schema
It was implicitly part of the schema already, but it used
to be set in a way that bypassed schema validations
2014-12-26 17:32:31 -08:00
Max Brunsfeld d508d1eedf Handle a source but no selector in ::unset 2014-12-26 17:24:27 -08:00
Max Brunsfeld 2949ebfe86 Deprecate Config::addScopedProperties 2014-12-26 17:13:33 -08:00
Max Brunsfeld dbaef8e593 Handle null key-path in Config::set 2014-12-26 14:58:17 -08:00
Max Brunsfeld 3edd2f9590 Implement ::observeScopedKeyPath using ::onDidChangeScopedKeyPath 2014-12-26 14:54:45 -08:00
Max Brunsfeld f2652bcb40 ⬆️ scoped-property-store@0.15.5 2014-12-26 14:40:49 -08:00
Max Brunsfeld d6c8ec83d4 📝 Fix examples in config API docs 2014-12-26 11:19:18 -08:00
Max Brunsfeld b4b492a321 💄 Organize config-spec
* Group tests by method rather than by scoped vs unscoped
* Group deprecated methods together
* Group internal methods together
* Make descriptions more consistent
2014-12-24 16:56:53 -08:00
Max Brunsfeld ba6a976013 Merge pull request #4756 from atom/mb-speed-up-config-loading
Speed up and simplify config file reloading
2014-12-24 16:25:28 -08:00
Max Brunsfeld d0486cc923 ⬆️ bundled packages w/ new c++ scope name
* language-ruby@0.46.0
* language-objective-c@0.14.0
* language-gfm@0.57.0
* language-c0.35.0
* symbols-view@0.73.0
2014-12-24 15:12:48 -08:00
Kevin Sawicki fb09f28c4c ⬆️ tree-view@0.141 2014-12-24 09:21:16 -08:00
Max Brunsfeld 883c48b490 Merge pull request #4753 from atom/mb-add-config-get-sources
Add Config::getSources
2014-12-23 20:35:42 -08:00
Max Brunsfeld ceefc15b15 Speed up and simplify config file reloading 2014-12-23 18:41:44 -08:00
Max Brunsfeld a0cc63273c Merge pull request #4755 from atom/mb-fix-disabled-package-situation
Fix recurring errors when a non-existent package is disabled
2014-12-23 17:22:38 -08:00
Max Brunsfeld c328092463 💄 package-manager-spec 2014-12-23 17:14:25 -08:00
Max Brunsfeld b1a3d89af3 Fix grammar in spec description 2014-12-23 17:05:21 -08:00
Kevin Sawicki bd92acba7e Simply deprecation output 2014-12-23 16:58:59 -08:00
Max Brunsfeld d90daf07f8 In PackageManager::activatePackage reject, don't throw 2014-12-23 16:47:43 -08:00
Max Brunsfeld 388428b074 Fix logic error when exception is thrown in config observer 2014-12-23 16:47:43 -08:00
Kevin Sawicki f439d0d996 Tweak log prefix text 2014-12-23 16:38:11 -08:00
Kevin Sawicki 4142845632 ⬆️ octicons@2.1.2 2014-12-23 11:43:37 -08:00
Max Brunsfeld 60c5293b5e Add Config::getSources
The settings-view needs this so that it can display snippets
associated with packages
2014-12-23 11:15:32 -08:00
Max Brunsfeld a1b4820c04 Revert "Revert "Merge pull request #4631""
This reverts commit dc2a453986.

Conflicts:
	spec/config-spec.coffee
	src/config.coffee
2014-12-23 09:26:40 -08:00
Kevin Sawicki 1cf8479831 Remove duplicate require 2014-12-23 09:24:56 -08:00
Kevin Sawicki a14d57ceac ⬆️ language-c@0.34 2014-12-23 09:13:51 -08:00
Kevin Sawicki c1d5d96aca ⬆️ language-shellscript@0.11 2014-12-23 09:10:25 -08:00
Kevin Sawicki b5632b6988 Verify TextEditor::onDidChangeGrammar in specs 2014-12-23 09:08:57 -08:00
Kevin Sawicki fe02442b23 Merge pull request #4743 from Kangaroopower/patch-1
Actually return the new grammar, as per the API
2014-12-23 09:05:22 -08:00
Kangaroopower 04ceaf36bf Actually return the new grammar, as per the API
Previously, the emitter didn't return the new type of grammar, just an undefined to signal when the grammar changed. This patch makes it so that the type of grammar is returned when the texteditor's grammar changes, as per what the API says it does
2014-12-22 21:46:16 -08:00
Max Brunsfeld 08d183dff1 Remove unused $ variable in Package 2014-12-22 17:33:30 -08:00
Kevin Sawicki 134daa1fe2 Merge pull request #4729 from alexandershov/master
Respect initialLine and initialColumn options when reopening a file
2014-12-22 16:07:11 -08:00
Kevin Sawicki 360fbe2a3f ⬆️ tree-view@0.140 2014-12-22 15:25:13 -08:00
aershov 8148446a86 Remove unused variable from text-editor-spec 2014-12-23 02:24:30 +03:00
Kevin Sawicki 16f56a068b ⬆️ grunt-atom-shell-installer@0.13.1 2014-12-22 13:50:46 -08:00
aershov 11112cb374 Call setCursorBufferPosition only if this method exists
@kevinsawicki:
That way in the case where a custom editor is opened that isn't a text editor,
it won't blow up if the custom editor doesn't implement setCursorBufferPosition.
2014-12-23 00:42:43 +03:00
aershov 5c7177746c Remove unused variable and extra newline from text-editor-spec 2014-12-23 00:26:38 +03:00
Kevin Sawicki ab947ba87a ⬆️ symbols-view@0.71 2014-12-22 13:22:23 -08:00
Kevin Sawicki 8a4db34cb8 ⬆️ solarized-light-syntax@0.15 2014-12-22 12:13:53 -08:00
Kevin Sawicki 669088612c ⬆️ solarized-dark-syntax@0.30 2014-12-22 12:13:41 -08:00
Max Brunsfeld 0a14d232d2 ⬆️ snippets@0.61.0
For removal of private method call on atom.config
2014-12-22 11:45:14 -08:00
Kevin Sawicki 651fe5d71c ⬆️ language-python@0.27 2014-12-22 10:51:52 -08:00
Kevin Sawicki 7d49d50b34 Add ⬇️ 2014-12-22 10:51:28 -08:00
Kevin Sawicki aab51d15ab Merge pull request #4734 from KINFOO/master
openSUSE build instructions.
2014-12-22 09:53:49 -08:00
Kevin Sawicki 1926156eee ⬆️ language-javascript@0.52 2014-12-22 09:53:19 -08:00
Kevin Sawicki b12a6abc90 ⬆️ language-less@0.22 2014-12-22 09:52:56 -08:00
Kevin Sawicki 46762c293f Merge pull request #4719 from coreylindsey/master
Updated Arch requirements
2014-12-22 09:38:48 -08:00
Kevin Sawicki 6b8ef25c8e ⬆️ language-sql@0.12 2014-12-22 09:38:20 -08:00
Kevin KIN-FOO 03a769b516 openSUSE build instructions.
Same as _Fedora / CentOS / RHEL_ section, only difference is `nodejs` package
being provided by openSUSE.
2014-12-22 11:33:59 +01:00
aershov 229e7e03b2 Respect initialLine and initialColumn options when reopening a file
Fix #1743
2014-12-21 21:08:18 +03:00
coreylindsey 45ee6df36e Updated Arch requirements
gconf was needed
2014-12-19 21:48:07 -06:00
Kevin Sawicki 9422a8047a Prepare 0.166 2014-12-19 19:13:39 -08:00
Kevin Sawicki 85456ad920 Add missing s in comspec 2014-12-19 18:59:46 -08:00
Kevin Sawicki 2f3d54db8a Prepare 0.165 2014-12-19 18:55:25 -08:00
Kevin Sawicki bae903a772 Update spec for changed config default 2014-12-19 18:44:21 -08:00
Kevin Sawicki aabf4dfbab Add missing path require
Closes atom/settings-view#288
2014-12-19 18:37:05 -08:00
Ben Ogle 44327724a8 Default followSymlinks to false 2014-12-19 17:25:53 -08:00
Ben Ogle 3c3e72e36d Update follow symlinks setting description 2014-12-19 17:14:30 -08:00
Ben Ogle e0741d2073 Merge pull request #4689 from ebayer/follow-symlinks
Create a global option to follow symlinks in project-wide search
2014-12-19 17:12:03 -08:00
Kevin Sawicki d973ce9832 ⬆️ language-ruby@0.45 2014-12-19 17:02:18 -08:00
Ben Ogle 25cb56a936 Upgrade notifications to fix issue button in windows 2014-12-19 16:52:28 -08:00
Max Brunsfeld 9640678c29 ⬆️ snippets@0.60.0 2014-12-19 14:19:16 -08:00
Kevin Sawicki 2ce1677aa5 Prepare 0.164 2014-12-19 13:46:19 -08:00
Kevin Sawicki d5c8956d38 ⬆️ release-notes@0.43 2014-12-19 13:27:45 -08:00
Kevin Sawicki d532f506fe ⬆️ package-generator@0.34 2014-12-19 11:53:55 -08:00
Kevin Sawicki 32b414328a ⬆️ release-notes@0.42 2014-12-19 11:49:18 -08:00
Ben Ogle b1697399dc Merge pull request #4698 from atom/bo-fix-load-settings
Pass safeMode and devMode load settings to new windows
2014-12-19 11:36:31 -08:00
Ben Ogle 27eccfaf81 Upgrade notification@0.20.0 2014-12-19 11:35:46 -08:00
Ben Ogle ebbd8101ba Upgrade notifications to provide more user info 2014-12-19 10:45:19 -08:00
Ben Ogle 20504fc7a8 Pull load settings out of the focused window 2014-12-19 10:38:03 -08:00
Ben Ogle 0db1971825 Default devMode and safeMode to false 2014-12-19 10:38:03 -08:00
Ben Ogle 80c828d001 Pass the load settings through so all windows share devMode and safeMode 2014-12-19 10:38:03 -08:00
Ben Ogle e688df57f2 Add atom.inSafeMode() 2014-12-19 10:38:03 -08:00
Max Brunsfeld 0790d33e9d ⬆️ language-html@0.27.0
For handlebars template scope fix
2014-12-19 10:34:14 -08:00
Kevin Sawicki 05820a3044 ⬆️ release-notes@0.41 2014-12-19 09:08:36 -08:00
Kevin Sawicki c4ac602644 ⬆️ language-sass@0.29 2014-12-18 18:23:37 -08:00
Kevin Sawicki 12d4fae91c Fall back to system root for cmd.exe path 2014-12-18 17:58:18 -08:00
Kevin Sawicki 2f334979d5 Add explorer check using SystemRoot path
Closes #4551
2014-12-18 17:20:40 -08:00
Max Brunsfeld d9e414af27 ⬆️ scoped-property-store@0.15.4
For performance improvements
2014-12-18 16:24:20 -08:00
Kevin Sawicki 335c1e215a Prepare 0.163 2014-12-18 11:46:03 -08:00
Max Brunsfeld b9b7646d4b ⬆️ tree-view@0.139.0
For bug fixes
2014-12-18 11:27:23 -08:00
Kevin Sawicki d885fb2d13 Merge pull request #4691 from atom/ks-improve-middle-mouse-paste
Improve middle mouse paste on Linux
2014-12-18 11:23:47 -08:00
Kevin Sawicki f5ae96820a Update spec for new middle mouse paste behavior 2014-12-18 11:04:52 -08:00
Kevin Sawicki 435fee1433 Use skinny arrow 2014-12-18 10:40:44 -08:00
Kevin Sawicki c96f976162 Write to selection clipboard from setTimeout
This is so that in progress transactions aren't written to the
selection clipboard.
2014-12-18 10:40:04 -08:00
Kevin Sawicki 5115540f8e Track middle button mouse down events on Linux 2014-12-18 09:51:32 -08:00
Kevin Sawicki d642553351 Paste selection clipboard after finalizing selections 2014-12-18 09:26:14 -08:00
Kevin Sawicki fa090345a8 ⬆️ release-notes@0.40 2014-12-18 08:58:19 -08:00
Max Brunsfeld 55d291ffde ⬆️ underscore-plus@1.6.6 2014-12-18 08:50:16 -08:00
Erdem Bayer a0038b6f56 Create a global option to follow symlinks in project-wide search
Fixes https://github.com/atom/find-and-replace/issues/271
2014-12-18 17:23:23 +02:00
Max Brunsfeld 48f63926ab ⬆️ underscore-plus@1.6.5 2014-12-17 18:13:48 -08:00
Max Brunsfeld b0501c9cb2 Merge pull request #4672 from atom/mb-optimize-config-events
Avoid firing repeated config events while packages are loaded
2014-12-17 18:11:33 -08:00
Max Brunsfeld 355ab1eb2f ⬆️ underscore-plus@1.6.4 2014-12-17 17:35:07 -08:00
Max Brunsfeld 28ac51d140 Add Config::transact
Use this method to avoid emitting unecessary config events
when activating or deactivating multiple packages
2014-12-17 16:54:47 -08:00
Kevin Sawicki d6210b24d9 ⬆️ status-bar@0.54 2014-12-17 13:01:54 -08:00
Max Brunsfeld b0731afd4c Don't pass keyPath to Config::onDidChange callback
The keyPath field was never used by core or any package, and
for scoped settings, its value was always equal to the keyPath
specified by the caller.
2014-12-17 12:03:46 -08:00
Kevin Sawicki 1c81aa90c0 Add initial SquirrelUpdate specs 2014-12-17 10:47:43 -08:00
Kevin Sawicki bbf6930061 💄 2014-12-17 10:02:34 -08:00
Kevin Sawicki 3d149eb9d1 Only update desktop shortcut if it already exists
Delete the created shortcut if it was previously deleted
after it was first installed.

Closes #4665
2014-12-17 09:55:46 -08:00
Kevin Sawicki 5a8b96b180 Add git as debian dependency
Used by npm to install module dependencies that use git URLs

Closes #4668
2014-12-17 09:11:25 -08:00
Kevin Sawicki 5add777291 Prepare 0.162 2014-12-16 18:35:01 -08:00
Max Brunsfeld f866e69704 ⬆️ scoped-property-store@0.15.3 2014-12-16 18:06:28 -08:00
Ben Ogle b27b4387fc Upgrade solarized-dark-syntax@0.29.0 2014-12-16 16:39:40 -08:00
Ben Ogle 1f850f0af1 Upgrade solarized dark to fix some ruby highlighting 2014-12-16 16:35:14 -08:00
Kevin Sawicki 9f1bbc54de Delete docker image after running 2014-12-16 16:20:46 -08:00
Ben Ogle e7d34d4b83 Upgrade wrap guide to use scoped config 2014-12-16 16:17:36 -08:00
simurai c5a15fb50e Add a note about font-family in syntax themes
#4646
2014-12-17 09:14:21 +09:00
Kevin Sawicki 7a251f5432 Prepare 0.161 2014-12-16 15:44:41 -08:00
Max Brunsfeld dc2a453986 Revert "Merge pull request #4631 from atom/mb-new-config-api"
This reverts commit 5147fb6a8b, reversing
changes made to 9bbbb58084.
2014-12-16 15:27:39 -08:00
Kevin Sawicki fdd55dfd27 Restart Atom with project path from focused window
Closes #4653
2014-12-16 15:26:42 -08:00
Max Brunsfeld 5147fb6a8b Merge pull request #4631 from atom/mb-new-config-api
New config API
2014-12-16 15:22:15 -08:00
Ben Ogle 9bbbb58084 Fix context menu when shadow DOM is enabled
Closes #4623
2014-12-16 15:16:12 -08:00
Kevin Sawicki 9ad080cd31 ⬆️ grammar-selector@0.40 2014-12-16 15:10:33 -08:00
Ben Ogle 509976fa18 Merge pull request #4655 from atom/bo-fix-dragging
Handle the case when the editor is destroyed while dragging
2014-12-16 15:05:58 -08:00
Ben Ogle aad5700418 Merge pull request #4652 from atom/bo-fix-unmount
Properly unmount the component when the shadow DOM is enabled
2014-12-16 14:52:37 -08:00
Ben Ogle 09a0773043 Handle editor destruction when dragging.
Closes #4622
2014-12-16 14:52:07 -08:00
Ben Ogle 0829da53b0 Properly unmount the component when the shadow DOM is enabled. 2014-12-16 14:36:51 -08:00
Kevin Sawicki 2ea92cf0e5 💄 2014-12-16 14:31:52 -08:00
Max Brunsfeld 9a2cc36c6b 💄 2014-12-16 14:27:57 -08:00
Max Brunsfeld 965a6243e1 Remove toBe parens 2014-12-16 14:27:57 -08:00
Max Brunsfeld 503fa30c28 Flesh out deprecation messages for Config::{is,set}Default
Also, simplify the shim in ::isDefault
2014-12-16 14:27:46 -08:00
Max Brunsfeld b8f239cd39 Deprecate Config::isDefault and ::getDefault 2014-12-16 14:00:57 -08:00
Max Brunsfeld 231da60e13 📝 new config APIs 2014-12-16 14:00:57 -08:00
Max Brunsfeld a47719eb53 Fix config priorities 2014-12-16 14:00:57 -08:00
Max Brunsfeld 9f851e55d1 Add Config::unset
Deprecate Config::restoreDefault
2014-12-16 14:00:57 -08:00
Max Brunsfeld ab89776f01 Throw when Config::set is called w/ source and no scope 2014-12-16 14:00:57 -08:00
Max Brunsfeld 2cea51b50e Take 'scope' option in Config::onDidChange
Deprecate passing the scope as an optional first argument
2014-12-16 14:00:57 -08:00
Max Brunsfeld 4e4794f3fd Take 'scope' option in Config::observe
Deprecate using the scope as an optional first argument
2014-12-16 14:00:57 -08:00
Max Brunsfeld ac6fbf100d Fix deprecation in package-manager-spec 2014-12-16 14:00:57 -08:00
Max Brunsfeld 8c8e866a97 Use a schema in all specs for Config::observeUserConfig
Before, values loaded from the config file were set in a
way that allowed any key to be set in the root object.
Now, these values are set in a way that's similar to how
::set works.
2014-12-16 14:00:56 -08:00
Max Brunsfeld f859ad5fc5 Allow null keyPath with options argument in ::get 2014-12-16 14:00:56 -08:00
Nathan Sobo d30cf35a16 Use ‘source’ option rather than internal state in Config spec 2014-12-16 14:00:56 -08:00
Nathan Sobo c35fb90653 Don’t return schema defaults when sources are specified in Config::get 2014-12-16 14:00:56 -08:00
Nathan Sobo 73df017d83 Add a ‘sources’ and ‘excludeSources’ options to Config::get
If the option is supplied, we will only retrieve values from the
specified sources.
2014-12-16 14:00:56 -08:00
Nathan Sobo 0e1ef201c1 Pass source to ::scopedSettingsStore on calls to ::set
Default it to the user’s config if no source is specified.
2014-12-16 14:00:56 -08:00
Nathan Sobo be4d23aa13 Use the user’s config.cson path as the default config source 2014-12-16 14:00:56 -08:00
Nathan Sobo c58606907a Make scope a trailing option to Config::get 2014-12-16 14:00:56 -08:00
Nathan Sobo c489a4662b Make scopeSelector a trailing option to Config::set 2014-12-16 14:00:56 -08:00
Kevin Sawicki 44fceaae20 Prepare 0.160 2014-12-16 13:15:19 -08:00
Kevin Sawicki 1b393e4f48 ⬆️ release-notes@0.39 2014-12-16 12:57:00 -08:00
Kevin Sawicki e84bd28c64 Add --rm flag 2014-12-16 12:38:34 -08:00
Kevin Sawicki bbf199fb60 ⬆️ release-notes@0.38 2014-12-16 11:38:28 -08:00
Ben Ogle 367a4c4bd3 Merge pull request #4630 from atom/bo-better-save-notification
Better save notifications
2014-12-16 11:07:34 -08:00
Kevin Sawicki 7d74f8179b ⬆️ apm@0.116 2014-12-16 10:56:05 -08:00
Kevin Sawicki bcafef385f Merge pull request #4632 from atom/ks-windows-atom-sh
Add atom.sh and apm.sh Windows scripts
2014-12-16 10:00:25 -08:00
Kevin Sawicki 83d5890962 Add missing .. segment 2014-12-16 09:40:16 -08:00
Kevin Sawicki 7ee3ccb43d Move up one more directory 2014-12-16 09:33:16 -08:00
Kevin Sawicki 9126f2e45c Include apm.sh 2014-12-16 09:19:40 -08:00
Kevin Sawicki 89ed95e2ae Add apm sh shim 2014-12-16 09:08:31 -08:00
Ben Ogle 27174b2880 Betta spec description 2014-12-16 09:07:44 -08:00
Kevin Sawicki ed1fbcc8e7 Use forward slashes in sh path 2014-12-16 09:02:09 -08:00
Kevin Sawicki 307ce4dc54 Write atom.sh to atom in bin folder 2014-12-15 17:52:56 -08:00
Kevin Sawicki 0833be4c27 Use correct variable name for sh text 2014-12-15 17:52:21 -08:00
Kevin Sawicki af116b2b8a Install atom.sh shim 2014-12-15 17:50:59 -08:00
Kevin Sawicki 59d582722b Add .sh extension 2014-12-15 17:48:04 -08:00
Kevin Sawicki 9239b95241 Use $0 instead of %~dp0 2014-12-15 17:47:01 -08:00
Kevin Sawicki ab8b5959d3 Add initial Windows atom wrapper script 2014-12-15 17:46:34 -08:00
Ben Ogle 5ff7a286fc 💄 2014-12-15 17:42:38 -08:00
Ben Ogle f199c71fa8 Specs for the eacces error 2014-12-15 17:42:27 -08:00
Ben Ogle 265601cbdb Nof 2014-12-15 17:20:13 -08:00
Ben Ogle 67b39845c8 Add a better error message when a directory cannot be written to.
Closes #4607
2014-12-15 17:19:54 -08:00
Ben Ogle a42505b6ae Handle is a directory error
Closes #4616
2014-12-15 17:08:46 -08:00
Nathan Sobo f026d30426 💄 Call deprecate on Grim local in Config 2014-12-15 17:06:02 -08:00
Max Brunsfeld b4db61a7e7 Fix Config::getSettings 2014-12-15 16:25:19 -08:00
Ben Ogle fad93b8d7e Remove fake catch of Q errors on open
Closes #4628
2014-12-15 15:47:10 -08:00
Max Brunsfeld feb72b38f8 ⬆️ snippets@0.59.0 2014-12-15 14:20:12 -08:00
Max Brunsfeld 23ce2cd1ac ⬆️ scoped-property-store and underscore-plus 2014-12-15 13:06:44 -08:00
Kevin Sawicki ee2509e90f ⬆️ notifications@0.18 2014-12-15 12:14:50 -08:00
Kevin Sawicki ca5e66bbd1 ⬆️ grammar-selector@0.38 2014-12-15 11:21:51 -08:00
Kevin Sawicki 3389555d71 ⬆️ encoding-selector@0.12 2014-12-15 11:19:09 -08:00
Kevin Sawicki 202426a85b Remove unneeded dotAtomPath assignment 2014-12-15 10:42:24 -08:00
Kevin Sawicki a6d68f8683 ⬆️ deprecation-cop@0.20 2014-12-15 10:18:33 -08:00
Kevin Sawicki 6674bfbf97 ⬆️ release-notes@0.37 2014-12-15 10:10:59 -08:00
Kevin Sawicki cd5309e494 ⬆️ incompatible-packages@0.16 2014-12-15 10:07:27 -08:00
Kevin Sawicki 11b2f4a18d ⬆️ image-view@0.44 2014-12-15 10:03:08 -08:00
Kevin Sawicki 88442ccb78 ⬆️ encoding-selector@0.11 2014-12-15 09:59:41 -08:00
Kevin Sawicki c4768cb266 ⬆️ spell-check@0.45 2014-12-15 09:41:17 -08:00
Kevin Sawicki cf772295fb ⬆️ autoflow@0.20 2014-12-15 09:39:36 -08:00
Kevin Sawicki dabedeb065 ⬆️ language-css@0.24 2014-12-15 09:35:35 -08:00
Kevin Sawicki 224e6cb5d4 ⬆️ styleguide@0.36 2014-12-15 09:31:01 -08:00
Kevin Sawicki 3f745e3d67 ⬆️ language-todo@0.15 2014-12-15 09:19:30 -08:00
Ben Ogle d9a5e3c7e1 Upgrade notifications to fix fatal notifications in windows 2014-12-12 16:33:04 -08:00
Ben Ogle d272606408 Upgrade tabs to fix exception 2014-12-12 16:32:37 -08:00
Kevin Sawicki 263567649d Only call log when deprecations exist 2014-12-12 15:37:49 -08:00
Kevin Sawicki c345532864 stdout -> stderr 2014-12-12 14:57:31 -08:00
Kevin Sawicki c0c4e65b5d Warnings to do stderr 2014-12-12 14:54:48 -08:00
Kevin Sawicki b441b3cd6f Remove prefix and suffix from deprecation lines 2014-12-12 14:01:33 -08:00
Kevin Sawicki 3a51228899 Label output 2014-12-12 13:53:52 -08:00
Kevin Sawicki 42d5d0ba87 Log deprecations from apm test output 2014-12-12 13:52:46 -08:00
Kevin Sawicki a1d0635d98 Start logging deprecations on CI 2014-12-12 13:24:10 -08:00
Kevin Sawicki b66e931a99 Only run package specs when project path exists
Closes #4579
2014-12-12 13:18:14 -08:00
Kevin Sawicki 0a7ea419a0 ⬆️ git-utils@2.2 2014-12-12 12:59:42 -08:00
Kevin Sawicki 91770f2885 Add buffer subscriptions to repo's subscriptions
Closes #4570
2014-12-12 12:26:09 -08:00
Kevin Sawicki d4c7fe4b47 ⬆️ keybinding-resolver@0.24 2014-12-12 12:22:29 -08:00
Kevin Sawicki 8b848c1853 Merge pull request #4560 from atom/ks-atom-windows-wrapper
Add better atom.cmd exe wrapper
2014-12-12 12:20:42 -08:00
Kevin Sawicki eef6532b8c atom.exe is now up one more directory 2014-12-12 12:11:38 -08:00
Kevin Sawicki 43de383b14 Use \r\n line endings for cmd shims 2014-12-12 12:11:38 -08:00
Kevin Sawicki 9d3aaad394 atom.exe is now up on more directory 2014-12-12 12:11:38 -08:00
Kevin Sawicki 3cf104444c Add missing resources segment 2014-12-12 12:11:38 -08:00
Kevin Sawicki f91741eec1 Install cli folder to resources directory 2014-12-12 12:11:37 -08:00
Kevin Sawicki 8f77d65aab Add --executed-from as first argument 2014-12-12 12:11:37 -08:00
Kevin Sawicki 3dced04aab Add -t and --test to expected output args 2014-12-12 12:11:37 -08:00
Kevin Sawicki bac9eac1fc Resolve atom path and executed-from in atom.js 2014-12-12 12:11:37 -08:00
Kevin Sawicki d3e53c5ada Use correct path variable 2014-12-12 12:11:37 -08:00
Kevin Sawicki cad8afe78b Use correct resources path 2014-12-12 12:11:37 -08:00
Kevin Sawicki a7f30c63cb Don't bundle atom.sh on Windows 2014-12-12 12:11:37 -08:00
Kevin Sawicki 1d0dd86041 Use new atom.cmd wrapper from installer 2014-12-12 12:11:37 -08:00
Kevin Sawicki 690ece3a9e Remove escaped slashes 2014-12-12 12:11:37 -08:00
Kevin Sawicki 100a1f5764 Parse output flags in atom.cmd 2014-12-12 12:11:37 -08:00
Kevin Sawicki 35f49be82a Pass through arguments 2014-12-12 12:11:36 -08:00
Kevin Sawicki 4225c25ad7 Add initial atom.cmd 2014-12-12 12:11:36 -08:00
Kevin Sawicki 330592e2bd Add atom.cmd 2014-12-12 12:11:36 -08:00
Kevin Sawicki d306876229 Remove disconnect call 2014-12-12 12:11:36 -08:00
Kevin Sawicki 47aa269de5 Exit main process 2014-12-12 12:11:36 -08:00
Kevin Sawicki 2a80762d5b Disconnect spawned process 2014-12-12 12:11:36 -08:00
Kevin Sawicki 42ab14c2cb Add initial atom.exe wrapper 2014-12-12 12:11:36 -08:00
Ben Ogle e83784e141 Merge pull request #4535 from mark-hahn/activateNowAPI
Fixed activateNow when no activation promise
2014-12-12 11:58:26 -08:00
Ben Ogle cedb41f4b0 Merge pull request #4581 from mnquintana/patch-2
Add OS default fonts for Ubuntu (Unity) and Fedora (GNOME 3)
2014-12-12 11:20:16 -08:00
Machiste N. Quintana d873f3d255 Add OS default fonts for Ubuntu (Unity) and Fedora (GNOME 3) 2014-12-12 14:01:57 -05:00
Ben Ogle 2781c24fce Upgrade solarized-dark-syntax to fix some punctuation 2014-12-12 10:52:38 -08:00
Ben Ogle 2a45bd7f69 Upgrade dev live reload to remove deprecations 2014-12-12 10:52:38 -08:00
Ben Ogle f4fab84869 Upgrade metrics to remove deprecations 2014-12-12 10:52:38 -08:00
Kevin Sawicki 204e5a6b46 Prepare 0.159 2014-12-12 09:40:23 -08:00
Kevin Sawicki 9459bd15a2 ⬆️ language-javascript@0.51 2014-12-12 09:23:43 -08:00
Ben Ogle 6cd96c8284 Upgrade deprecation-cop to remove deprecations 2014-12-11 17:27:06 -08:00
Ben Ogle 2ceced2b84 Upgrade notifications@0.16.0 2014-12-11 17:22:07 -08:00
Ben Ogle be78572d78 Upgrade notifications to fix errors with semicolons 2014-12-11 17:07:46 -08:00
Kevin Sawicki 61abda5166 ⬆️ tree-view@0.138 2014-12-11 16:54:24 -08:00
Kevin Sawicki 93f98ec14e ⬆️ styleguide@0.35 2014-12-11 16:39:34 -08:00
Kevin Sawicki d581c41c0e Update spec since { lines now outdent in JS 2014-12-11 16:35:21 -08:00
Nathan Sobo 252bef63bf Merge pull request #4566 from atom/mb-config-cleanup
Clean up config
2014-12-11 17:15:19 -07:00
Kevin Sawicki 9c63a4f517 ⬆️ language-javascript@0.50 2014-12-11 16:07:50 -08:00
Max Brunsfeld e7b0c3e519 Deprecate Config::getSettings
Also, remove support for getting all settings for a scope selector

Signed-off-by: Nathan Sobo <nathan@github.com>
2014-12-11 15:04:55 -08:00
Kevin Sawicki 697ccedbd3 Prepare 0.158 2014-12-11 14:18:09 -08:00
Nathan Sobo 87efc7e1df Only respond to stylesheet changes for mounted components
Refs #4493
2014-12-11 14:55:00 -07:00
Ben Ogle 6a0a694a7b Upgrade notifications to lessen noise 2014-12-11 13:53:05 -08:00
Kevin Sawicki be1f28b3d8 ⬆️ apm@0.114 2014-12-11 13:45:26 -08:00
Kevin Sawicki 32f7c72d28 ⬆️ language-javascript@0.49 2014-12-11 13:07:21 -08:00
Nathan Sobo d51a86e804 ⬆️ markdown-preview for deprecation fixes 2014-12-11 09:03:31 -07:00
Mark Hahn 93e3a5af2a Fixed activateNow when no activation promise 2014-12-10 23:00:14 -08:00
Ben Ogle 278a507653 Merge pull request #4531 from atom/bo-buffered-process-error
Better BufferedProcess error handling
2014-12-10 18:17:09 -08:00
Nathan Sobo 7422f4378e Add property filters to TextEditor::getDecorations methods
This makes it much easier to write tests that inspect the state of
decorations.
2014-12-10 19:11:50 -07:00
Ben Ogle f2ab14656b BufferedProcess::onDidThrowError -> ::onDidThrowError 2014-12-10 18:08:43 -08:00
Ben Ogle 453abf8b90 Update solarized-dark-syntax to fix ruby 2014-12-10 17:54:01 -08:00
Ben Ogle 7866f0819d Upgrade keybinding-resolver to fix the inability to unhide 2014-12-10 17:53:40 -08:00
Kevin Sawicki 921e3c581d ⬆️ keybinding-resolver@0.22 2014-12-10 17:29:17 -08:00
Max Brunsfeld 58aa87438d ⬆️ snippets@0.58.0
For deprecation fixes
2014-12-10 16:45:14 -08:00
Ben Ogle ad73902382 📝 Add docs 2014-12-10 16:27:05 -08:00
Ben Ogle bf63a9715c Add BufferedProcess::onDidThrowError() 2014-12-10 16:26:57 -08:00
Kevin Sawicki 06c52c6873 ⬆️ language-javascript@0.48 2014-12-10 16:21:33 -08:00
Kevin Sawicki 9ac27bc2f8 Grim.logDeprecationWarnings -> Grim.logDeprecations
Closes #4486
2014-12-10 16:05:36 -08:00
Ben Ogle 98caaf0d70 :up_arrow: fuzzy-finder@0.62.0 2014-12-10 15:30:29 -08:00
Ben Ogle a102d1e134 Upgrade styleguide to fix build 2014-12-10 15:14:36 -08:00
Ben Ogle 6caa86fb04 Upgrade styleguide to include colors 2014-12-10 14:54:12 -08:00
Max Brunsfeld b1e0c8132d ⬆️ tree-view@0.137.0 2014-12-10 14:39:05 -08:00
Kevin Sawicki f3947dd6e0 ⬆️ find-and-replace@0.152 2014-12-10 14:06:18 -08:00
Kevin Sawicki 27dbbabe09 Prepare 0.157 2014-12-10 13:34:06 -08:00
Max Brunsfeld 5950110860 ⬆️ status-bar@0.53.0
For new panel-like API
2014-12-10 12:31:46 -08:00
Kevin Sawicki ab5d71e6b5 ⬆️ encoding-selector@0.10 2014-12-10 12:25:43 -08:00
Kevin Sawicki 1ee2839245 📝 Mention config files 2014-12-10 09:22:51 -08:00
Max Brunsfeld a6f31ed791 Pass event to Cursor::onDidChangePosition callbacks 2014-12-09 17:21:03 -08:00
Max Brunsfeld e04b5a74d7 Fix position in Cursor::moveToBeginningOfPreviousParagraph
Also, remove unused parameters to private Cursor methods
2014-12-09 16:59:50 -08:00
Kevin Sawicki 4acf143f45 📝 Mention cuninst is not destructive 2014-12-09 16:50:28 -08:00
Kevin Sawicki 5ad5ce0841 📝 add or above 2014-12-09 16:40:53 -08:00
Kevin Sawicki 31d1ca12c1 📝 Add chocolatey uninstall doc 2014-12-09 16:37:54 -08:00
Kevin Sawicki ace3325db8 Remove chocolatey doc 2014-12-09 16:34:35 -08:00
Kevin Sawicki b718114fc4 📝 Tweak installer wording 2014-12-09 16:34:16 -08:00
Kevin Sawicki 1df8c77f41 Merge pull request #4322 from tsunamistate/upgrade-readme-windows
Upgrade Windows README
2014-12-09 16:31:56 -08:00
Kevin Sawicki 26e867d65e Remove squirrel logging 2014-12-09 16:02:36 -08:00
Nathan Sobo 2688761c29 ⬆️ keybinding-resolver for deprecation fixes 2014-12-09 16:38:51 -07:00
Nathan Sobo b64d9db198 ⬆️ image-view for deprecation fixes 2014-12-09 16:38:51 -07:00
Max Brunsfeld bc5b786bb2 ⬆️ styleguide@0.32.0
To fix build; avoid using devDependencies
2014-12-09 15:15:43 -08:00
Max Brunsfeld 13025c17f1 ⬆️ styleguide@0.31.0
For deprecation fixes
2014-12-09 14:59:40 -08:00
Max Brunsfeld 8b4b5230ab ⬆️ wrap-guide@0.26.0
For deprecation fixes
2014-12-09 14:57:15 -08:00
Kevin Sawicki 7d6d634ceb Prepare 0.156 2014-12-09 14:07:45 -08:00
Nathan Sobo b386b00bc0 Wait for next animation frame before measuring when stylesheets change
Fixes #4479
2014-12-09 14:56:33 -07:00
Kevin Sawicki 2028045254 ⬆️ incompatible-packages@0.15 2014-12-09 13:42:09 -08:00
Kevin Sawicki ca60dae630 ⬆️ incompatible-packages@0.14 2014-12-09 13:27:49 -08:00
Kevin Sawicki a5605bd408 ⬆️ incompatible-packages@0.13 2014-12-09 13:14:28 -08:00
Max Brunsfeld caf6fdd5ac Merge pull request #4478 from atom/mb-panel-markup
Allow PanelElements to be instantiated with markup
2014-12-09 13:05:35 -08:00
Kevin Sawicki 19872959bc ⬆️ incompatible-packages@0.12 2014-12-09 13:04:37 -08:00
Nathan Sobo 299ea18c58 Don’t try to upgrade CSS rules with no selector text
Fixes #4469
2014-12-09 13:41:33 -07:00
Nathan Sobo 966360e022 Set ::visible to false on panels when they are destroyed 2014-12-09 13:41:33 -07:00
Kevin Sawicki 70a2be849a ⬆️ symbols-view@0.70 2014-12-09 12:04:41 -08:00
Max Brunsfeld 1c7843d9b2 💄 2014-12-09 11:36:04 -08:00
Kevin Sawicki 5291f1c62c ⬆️ symbols-view@0.69 2014-12-09 11:32:47 -08:00
Max Brunsfeld c9e7cfc02c Allow PanelElements to be instantiated with markup 2014-12-09 11:24:59 -08:00
Ben Ogle e93ca3c901 Upgrade notifications to open issues on throwing repo 2014-12-09 11:19:34 -08:00
Kevin Sawicki 48bd330a5e ⬆️ encoding-selector@0.9 2014-12-09 11:17:57 -08:00
Nathan Sobo 6240bc1fc9 ⬆️ fuzzy-finder to fix deprecations 2014-12-09 11:24:35 -07:00
Nathan Sobo 6ccc60342f Remove deprecated Workspace::activePane references 2014-12-09 10:45:54 -07:00
Ben Ogle 03750d0b6c Upgrade notifications to fix activation time 2014-12-08 18:25:27 -08:00
Max Brunsfeld 03e31ad918 Merge pull request #4457 from atom/mb-text-editor-element-methods
Add `TextEditorElement` methods needed to replace deprecated APIs
2014-12-08 17:43:11 -08:00
Kevin Sawicki 610c07870a Prepare 0.155 2014-12-08 17:42:27 -08:00
Max Brunsfeld 5c37d208f5 Don't throw when ::getDefaultCharacterWidth is called while detached 2014-12-08 16:56:46 -08:00
Ben Ogle 88c119f4ad Upgrade find and replace for fixes 2014-12-08 16:54:30 -08:00
Max Brunsfeld d03cfda6c4 📝 new TextEditorElement methods 2014-12-08 16:38:57 -08:00
Max Brunsfeld 8f02b21d08 Add TextEditorElement::onDidAttach, ::onDidDetach 2014-12-08 16:21:59 -08:00
Max Brunsfeld 953f2c61f7 Add TextEditorElement::getDefaultCharacterWidth 2014-12-08 16:14:26 -08:00
Kevin Sawicki 15e95d0d21 ⬆️ apm@0.113 2014-12-08 16:10:50 -08:00
Ben Ogle 391a71fed0 Upgrade notifications to fix several things
* add stack trace toggle
* allow selection and copy / paste
* fix the escaping on the issue template
2014-12-08 15:08:51 -08:00
Kevin Sawicki 67ed490618 ⬆️ grunt-atom-shell-installer@0.13 2014-12-08 14:32:59 -08:00
Max Brunsfeld c812dfef9b Merge pull request #4455 from atom/mb-fix-redo
Don't use a transaction in cursor/selection movement commands
2014-12-08 13:23:19 -08:00
Max Brunsfeld 631bca6c89 Don't use a transaction in cursor/selection movement commands
Previously, a transaction was used to set an undo grouping interval
for every editor command except `undo` and `redo`. The problem is
that currently, moving a marker inside of a transaction causes the
buffer's redo stack to be cleared. For now, just don't use
transactions for commands that don't modify the buffer's contents."
2014-12-08 13:06:59 -08:00
Kevin Sawicki 095c1b74a7 ⬆️ status-bar@0.52 2014-12-08 12:50:15 -08:00
Kevin Sawicki 7e408ad268 ⬆️ status-bar@0.51 2014-12-08 12:45:09 -08:00
Kevin Sawicki 4945fd7aae Don't make atom.services public yet 2014-12-08 12:37:06 -08:00
Kevin Sawicki 0db5549b64 Merge pull request #4454 from andreicristianpetcu/master
use nodejs v0.10.33 and python 2.7.6
2014-12-08 12:17:06 -08:00
Andrei Cristian Petcu 96095f9c30 use nodejs v0.10.33 and python 2.7.6 2014-12-08 21:40:31 +02:00
Kevin Sawicki e2b4fcad65 ⬆️ markdown-preview@0.111 2014-12-08 11:23:38 -08:00
Nathan Sobo 3ea1c80fe7 :arrow-up: bracket-matcher to fix deprecations 2014-12-08 11:43:07 -07:00
Nathan Sobo 525b4ac3eb ⬆️ background-tips to fix deprecations 2014-12-08 11:37:19 -07:00
Nathan Sobo 6ffc750e18 :arrow-up: autocomplete for deprecation fixes 2014-12-08 11:34:35 -07:00
Nathan Sobo 66716db4d1 ⬆️ autosave for deprecation fixes 2014-12-08 11:30:52 -07:00
Nathan Sobo 95d03fc5fa ⬆️ autoflow for deprecation fixes 2014-12-08 11:30:52 -07:00
Kevin Sawicki b816fca75e ⬆️ language-c@0.33 2014-12-08 10:26:51 -08:00
Kevin Sawicki 6f148f681d ⬆️ language-yaml@0.21 2014-12-08 10:14:23 -08:00
Max Brunsfeld a489358f55 ⬆️ tree-view@0.136.0
For deprecation fixes
2014-12-08 10:06:11 -08:00
Kevin Sawicki 1cd0caeb2d ⬆️ language-less@0.21 2014-12-08 09:54:06 -08:00
Kevin Sawicki 310939338c ⬆️ language-sass@0.28 2014-12-08 09:52:49 -08:00
Kevin Sawicki e39d50972d ⬆️ language-python@0.26 2014-12-08 09:50:13 -08:00
Kevin Sawicki 9a5f3ab000 Merge pull request #4430 from steelbrain/patch-1
Updated README.md
2014-12-08 09:43:53 -08:00
Max Brunsfeld 9285f2605f ⬆️ update-package-dependencies@0.7.0
For deprecation fixes
2014-12-08 09:40:12 -08:00
Steel Brain b654209adb Updated README.md 2014-12-07 07:30:18 +05:00
Steel Brain 0c07166a8e Updated README.md
Fixes atom/atom#4427
2014-12-07 06:51:32 +05:00
Kevin Sawicki de36ceb00c Merge pull request #4337 from pwagland/master
Fix atom.sh when running from directory with space
2014-12-05 15:04:03 -08:00
Kevin Sawicki aa292874ec Add reload button to specs window 2014-12-05 15:03:16 -08:00
Ben Ogle 736b6f37e4 Upgrade notifications to make the max height larger 2014-12-05 15:01:19 -08:00
Ben Ogle 8d9098464c Merge pull request #4413 from atom/bo-notification-dismiss
Add dismissing to notifications
2014-12-05 15:00:00 -08:00
Paul Wagland eb6ce74a12 Use xargs -0 instead of sed, as this is easier to understand.
Fixed atom/atom#4337
Fixes atom/atom#4336
2014-12-05 23:53:07 +01:00
Ben Ogle 33ee1cb0de Upgrade notifications to use new APIs 2014-12-05 14:29:00 -08:00
Max Brunsfeld 11a07f41ac Merge pull request #4414 from atom/mb-convert-stack-trace
Fix line numbers in coffeescript stack traces for error hooks
2014-12-05 14:06:22 -08:00
Ben Ogle 5cf97db07c Add getNotifications() 2014-12-05 13:46:01 -08:00
Ben Ogle f095d38978 Add dismissing to notifications 2014-12-05 13:46:01 -08:00
Kevin Sawicki 218f6ab629 Guard against no stylesheet disposable 2014-12-05 13:32:37 -08:00
Ben Ogle 26edd40f14 Upgrade notifications to not show in dev mode 2014-12-05 13:15:53 -08:00
Max Brunsfeld 8241351143 Merge pull request #4407 from atom/ns-add-services-api
Add atom.services API
2014-12-05 13:13:50 -08:00
Max Brunsfeld 286361bf2b Fix line numbers in coffeescript stack traces for error hooks 2014-12-05 12:59:19 -08:00
Kevin Sawicki 3d5437c1e9 Merge pull request #4393 from envygeeks/patch-1
Move Debian alternatives entry up.
2014-12-05 10:47:11 -08:00
Ben Ogle 95b9140dcf Merge pull request #4405 from ryanpcmcquen/patch-1
🐧 add Slackware install method
2014-12-05 10:38:42 -08:00
Kevin Sawicki fc82e5ffd6 ⬆️ find-and-replace@0.150 2014-12-05 10:00:49 -08:00
Kevin Sawicki 20521ad487 ⬆️ git-diff@0.45 2014-12-05 09:48:49 -08:00
Nathan Sobo 99f91fac48 Add atom.services API 2014-12-05 09:46:52 -08:00
Nathan Sobo d4b0b33d86 📝 ability to pass DOM elements to atom.commands.add 2014-12-05 09:44:52 -08:00
Max Brunsfeld 790c125e0b Merge pull request #4406 from atom/mb-editor-text-content
Allow setting editor text content in HTML
2014-12-05 09:44:29 -08:00
Max Brunsfeld 4afe133f85 Allow setting editor text content in HTML 2014-12-05 09:30:33 -08:00
Kevin Sawicki 763e83584d ⬆️ language-python@0.25 2014-12-05 09:29:30 -08:00
Kevin Sawicki 62a671aae6 ⬆️ language-less@0.20 2014-12-05 09:28:29 -08:00
Kevin Sawicki c0eb5d0ebe Prepare 0.154 2014-12-05 09:02:44 -08:00
Ryan P.C. McQuen 396b53b8dc add Slackware install method 2014-12-05 06:34:57 -08:00
Jordon Bedwell 8ad8a61aab Move Debian alternatives entry up.
Move the Debian alternatives entry up so it's below and grouped with
"no such file or directory" since it's an alternate solution to symlinking.
2014-12-04 02:49:05 -06:00
Paul Wagland 5da4846fff Fix atom.sh when running from directory with space
Deal with ATOM_PATH having a space by proper quoting, and not passing
the directory name to dirname.

Fixes atom/atom#4336
2014-11-28 00:37:21 +01:00
Aleksandr Kalko 67f4d51774 Fixed link error 2014-11-26 09:44:50 +02:00
Aleksandr Kalko 1bf4db15b2 Updated README WIndows installing section, added Choclatey installation file 2014-11-26 09:42:32 +02:00
Daniel Hengeveld aff1aa5112 phrasing 2014-11-12 19:45:27 +01:00
Daniel Hengeveld 3b6d55dbbb document api search and sorting 2014-11-06 09:49:15 -08:00
152 arquivos alterados com 4555 adições e 2729 exclusões
+1 -1
Ver Arquivo
@@ -1 +1 @@
v0.10.21
v0.10.33
+1
Ver Arquivo
@@ -0,0 +1 @@
2.7.6
+5
Ver Arquivo
@@ -87,6 +87,7 @@ For more information on how to work with Atom's official packages, see
* :white_check_mark: `:white_check_mark:` when adding tests
* :lock: `:lock:` when dealing with security
* :arrow_up: `:arrow_up:` when upgrading dependencies
* :arrow_down: `:arrow_down:` when downgrading dependencies
## CoffeeScript Styleguide
@@ -98,6 +99,10 @@ For more information on how to work with Atom's official packages, see
* Avoid spaces inside the curly-braces of hash literals:
* `{a: 1, b: 2}` instead of `{ a: 1, b: 2 }`
* Include a single line of whitespace between methods.
* Capitalize initialisms and acronyms in names, except for the first word, which
should be lower-case:
* `getURI` instead of `getUri`
* `uriToOpen` instead of `URIToOpen`
## Documentation Styleguide
+18 -9
Ver Arquivo
@@ -2,7 +2,7 @@
Atom is a hackable text editor for the 21st century, built on [atom-shell](http://github.com/atom/atom-shell), and based on everything we love about our favorite editors. We designed it to be deeply customizable, but still approachable using the default configuration.
Visit [atom.io](https://atom.io) to learn more.
Visit [atom.io](https://atom.io) to learn more or visit the [Atom forum](https://discuss.atom.io).
Visit [issue #3684](https://github.com/atom/atom/issues/3684) to learn more
about the Atom 1.0 roadmap.
@@ -17,16 +17,25 @@ Atom will automatically update when a new release is available.
### Windows
Install the [Atom chocolatey package](https://chocolatey.org/packages/Atom).
Download the latest [AtomSetup.exe installer](https://github.com/atom/atom/releases/latest).
1. Install [chocolatey](https://chocolatey.org).
2. Close and reopen your command prompt or PowerShell window.
3. Run `cinst Atom`
4. In the future run `cup Atom` to upgrade to the latest release.
Atom will automatically update when a new release is available.
You can also download a `.zip` file from the [releases page](https://github.com/atom/atom/releases/latest).
The Windows version does not currently automatically update so you will need to
manually upgrade to future releases by re-downloading the `.zip` file.
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
### Debian Linux (Ubuntu)
+1 -1
Ver Arquivo
@@ -6,6 +6,6 @@
"url": "https://github.com/atom/atom.git"
},
"dependencies": {
"atom-package-manager": "0.111.1"
"atom-package-manager": "0.119.0"
}
}
+2 -2
Ver Arquivo
@@ -45,12 +45,12 @@ if [ $REDIRECT_STDERR ]; then
fi
if [ $OS == 'Mac' ]; then
ATOM_PATH=${ATOM_PATH:-/Applications} # Set ATOM_PATH unless it is already set
ATOM_PATH="${ATOM_PATH:-/Applications}" # Set ATOM_PATH unless it is already set
ATOM_APP_NAME=Atom.app
# If ATOM_PATH isn't a executable file, use spotlight to search for Atom
if [ ! -x "$ATOM_PATH/$ATOM_APP_NAME" ]; then
ATOM_PATH=$(mdfind "kMDItemCFBundleIdentifier == 'com.github.atom'" | grep -v ShipIt | head -1 | xargs dirname)
ATOM_PATH="$(mdfind "kMDItemCFBundleIdentifier == 'com.github.atom'" | grep -v ShipIt | head -1 | xargs -0 dirname)"
fi
# Exit if Atom can't be found
+4 -4
Ver Arquivo
@@ -12,19 +12,19 @@
"fs-plus": "2.x",
"github-releases": "~0.2.0",
"grunt": "~0.4.1",
"grunt-atom-shell-installer": "^0.12.0",
"grunt-atom-shell-installer": "^0.16.0",
"grunt-cli": "~0.1.9",
"grunt-coffeelint": "git+https://github.com/atom/grunt-coffeelint.git#cfb99aa99811d52687969532bd5a98011ed95bfe",
"grunt-contrib-coffee": "~0.9.0",
"grunt-contrib-coffee": "~0.12.0",
"grunt-contrib-csslint": "~0.1.2",
"grunt-contrib-less": "~0.8.0",
"grunt-cson": "0.10.0",
"grunt-cson": "0.11.0",
"grunt-download-atom-shell": "~0.10.0",
"grunt-lesslint": "0.13.0",
"grunt-peg": "~1.1.0",
"grunt-shell": "~0.3.1",
"harmony-collections": "~0.3.8",
"legal-eagle": "~0.6.0",
"legal-eagle": "~0.8.0",
"minidump": "~0.8",
"npm": "~1.4.5",
"rcedit": "~0.3.0",
+8 -5
Ver Arquivo
@@ -21,7 +21,9 @@ module.exports = (grunt) ->
mkdir appDir
cp 'atom.sh', path.join(appDir, 'atom.sh')
if process.platform isnt 'win32'
cp 'atom.sh', path.join(appDir, 'atom.sh')
cp 'package.json', path.join(appDir, 'package.json')
packageDirectories = []
@@ -69,6 +71,7 @@ module.exports = (grunt) ->
path.join('build', 'Release', 'obj')
path.join('build', 'Release', '.deps')
path.join('vendor', 'apm')
path.join('resources', 'linux')
path.join('resources', 'mac')
path.join('resources', 'win')
@@ -149,10 +152,10 @@ module.exports = (grunt) ->
grunt.file.copy(sourcePath, path.resolve(appDir, '..', subDirectory, filename))
if process.platform is 'win32'
# Set up chocolatey ignore and gui files
fs.writeFileSync path.join(appDir, 'apm', 'node_modules', 'atom-package-manager', 'bin', 'node.exe.ignore'), ''
fs.writeFileSync path.join(appDir, 'node_modules', 'symbols-view', 'vendor', 'ctags-win32.exe.ignore'), ''
fs.writeFileSync path.join(shellAppDir, 'atom.exe.gui'), ''
cp path.join('resources', 'win', 'atom.cmd'), path.join(shellAppDir, 'resources', 'cli', 'atom.cmd')
cp path.join('resources', 'win', 'atom.sh'), path.join(shellAppDir, 'resources', 'cli', 'atom.sh')
cp path.join('resources', 'win', 'atom.js'), path.join(shellAppDir, 'resources', 'cli', 'atom.js')
cp path.join('resources', 'win', 'apm.sh'), path.join(shellAppDir, 'resources', 'cli', 'apm.sh')
dependencies = ['compile', 'generate-license:save', 'generate-module-cache', 'compile-packages-slug']
dependencies.push('copy-info-plist') if process.platform is 'darwin'
-1
Ver Arquivo
@@ -1,4 +1,3 @@
fs = require 'fs'
path = require 'path'
_ = require 'underscore-plus'
fs = require 'fs-plus'
+25 -2
Ver Arquivo
@@ -101,7 +101,7 @@ getAssets = ->
logError = (message, error, details) ->
grunt.log.error(message)
grunt.log.error(error.message ? error) if error?
grunt.log.error(details) if details
grunt.log.error(require('util').inspect(details)) if details
zipAssets = (buildDir, assets, callback) ->
zip = (directory, sourcePath, assetName, callback) ->
@@ -142,7 +142,30 @@ getAtomDraftRelease = (callback) ->
firstDraft.assets = assets
callback(null, firstDraft)
else
callback(new Error('No draft release in atom/atom repo'))
createAtomDraftRelease(callback)
createAtomDraftRelease = (callback) ->
{version} = require('../../package.json')
options =
uri: 'https://api.github.com/repos/atom/atom/releases'
method: 'POST'
headers: defaultHeaders
json:
tag_name: "v#{version}"
name: version
draft: true
body: """
### Notable Changes
* Something new
"""
request options, (error, response, body='') ->
if error? or response.statusCode isnt 201
logError("Creating atom/atom draft release failed", error, body)
callback(error ? new Error(response.statusCode))
else
callback(null, body)
deleteRelease = (release) ->
options =
+16
Ver Arquivo
@@ -11,6 +11,20 @@ module.exports = (grunt) ->
packageSpecQueue = null
logDeprecations = (label, {stderr}={}) ->
return unless process.env.JANKY_SHA1
stderr ?= ''
deprecatedStart = stderr.indexOf('Calls to deprecated functions')
return if deprecatedStart is -1
grunt.log.error(label)
stderr = stderr.substring(deprecatedStart)
stderr = stderr.replace(/^\s*\[[^\]]+\]\s+/gm, '')
stderr = stderr.replace(/source: .*$/gm, '')
stderr = stderr.replace(/^"/gm, '')
stderr = stderr.replace(/",\s*$/gm, '')
grunt.log.error(stderr)
getAppPath = ->
contentsDir = grunt.config.get('atom.contentsDir')
switch process.platform
@@ -54,6 +68,7 @@ module.exports = (grunt) ->
fs.unlinkSync(path.join(packagePath, 'ci.log'))
failedPackages.push path.basename(packagePath) if error
logDeprecations("#{path.basename(packagePath)} Specs", results)
callback()
modulesDirectory = path.resolve('node_modules')
@@ -87,6 +102,7 @@ module.exports = (grunt) ->
else
# TODO: Restore concurrency on Windows
packageSpecQueue.concurrency = concurrency
logDeprecations('Core Specs', results)
callback(null, error)
-22
Ver Arquivo
@@ -1,22 +0,0 @@
path = require 'path'
module.exports = (grunt) ->
grunt.registerTask 'update-octicons', 'Update octicon font and LESS variables', ->
pathToOcticons = path.resolve('..', 'octicons')
if grunt.file.isDir(pathToOcticons)
# Copy font-file
fontSrc = path.join(pathToOcticons, 'octicons', 'octicons.woff')
fontDest = path.resolve('static', 'octicons.woff')
grunt.file.copy(fontSrc, fontDest)
# Update Octicon UTF codes
glyphsSrc = path.join(pathToOcticons, 'data', 'glyphs.yml')
output = []
for {css, code} in grunt.file.readYAML(glyphsSrc)
output.push "@#{css}: \"\\#{code}\";"
octiconUtfDest = path.resolve('static', 'variables', 'octicon-utf-codes.less')
grunt.file.write(octiconUtfDest, "#{output.join('\n')}\n")
else
grunt.log.error("octicons repo must be cloned to #{pathToOcticons}")
false
+1 -1
Ver Arquivo
@@ -3,7 +3,7 @@
## Structure of a Keymap File
Keymap files are encoded as JSON or CSON files containing nested hashes. They
work much like stylesheets, but instead of applying style properties to elements
work much like style sheets, but instead of applying style properties to elements
matching the selector, they specify the meaning of keystrokes on elements
matching the selector. Here is an example of some bindings that apply when
keystrokes pass through `atom-text-editor` elements:
+9 -8
Ver Arquivo
@@ -30,8 +30,8 @@ All requests that take parameters require `application/json`.
Parameters:
- **page** (optional)
- **sort** (optional, values: `created_at`, `updated_at`, `downloads`)
- **direction** (optional, values: `asc`, `desc`)
- **sort** (optional) - One of `downloads`, `created_at`, `updated_at`, `stars`. Defaults to `downloads`
- **direction** (optional) - `asc` or `desc`. Defaults to `desc`. `stars` can only be ordered `desc`
Returns a list of all packages in the following format:
```json
@@ -61,17 +61,18 @@ Link: <https://www.atom.io/api/packages?page=1>; rel="self",
By default, results are sorted by download count, descending.
### Searching packages
#### GET /api/packages/search
Parameters:
- **q** String query to search
- **sort** (optional, values: `created_at`, `updated_at`, `downloads`)
- **direction** (optional, values: `asc`, `desc`)
- **q** (required) - Search query
- **page** (optional)
- **sort** (optional) - One of `downloads`, `created_at`, `updated_at`, `stars`. Defaults to the relevance of the search query.
- **direction** (optional) - `asc` or `desc`. Defaults to `desc`.
Returns a list of all packages in the same format as `/api/packages`.
By default, results sorted by relevance to search query.
Returns results in the same format as [listing packages](#listing-packages).
### Showing package details
+18 -10
Ver Arquivo
@@ -26,9 +26,17 @@ Ubuntu LTS 12.04 64-bit is the recommended platform.
### Arch
* `sudo pacman -S base-devel git nodejs libgnome-keyring python2`
* `sudo pacman -S gconf base-devel git nodejs libgnome-keyring python2`
* `export PYTHON=/usr/bin/python2` before building Atom.
### Slackware
* `sbopkg -k -i node -i atom`
### openSUSE
* `sudo zypper install nodejs make gcc gcc-c++ glibc-devel git-core libgnome-keyring-devel rpmdevtools`
## Instructions
If you have problems with permissions don't forget to prefix with `sudo`
@@ -121,6 +129,15 @@ have Node.js installed, or node isn't identified as Node.js on your machine.
If it's the latter, entering `sudo ln -s /usr/bin/nodejs /usr/bin/node` into
your terminal may fix the issue.
#### You can also use Alternatives
On some variants (mostly Debian based distros) it's preferable for you to use
Alternatives so that changes to the binary paths can be fixed or altered easily:
```sh
sudo update-alternatives --install /usr/bin/node node /usr/bin/nodejs 1 --slave /usr/bin/js js /usr/bin/nodejs
```
### AttributeError: 'module' object has no attribute 'script_main'
If you get following error with a big traceback while building Atom:
@@ -137,15 +154,6 @@ On Fedora you would do the following:
sudo yum remove gyp
```
#### You can also use Alternatives
On some variants (mostly Debian based distros) it's preferable for you to use
Alternatives so that changes to the binary paths can be fixed or altered easily:
```sh
sudo update-alternatives --install /usr/bin/node node /usr/bin/nodejs 1 --slave /usr/bin/js js /usr/bin/nodejs
```
### Linux build error reports in atom/atom
* Use [this search](https://github.com/atom/atom/search?q=label%3Abuild-error+label%3Alinux&type=Issues)
to get a list of reports about build errors on Linux.
+10 -10
Ver Arquivo
@@ -15,7 +15,7 @@ my-package/
menus/
spec/
snippets/
stylesheets/
styles/
index.coffee
package.json
```
@@ -38,10 +38,10 @@ In addition to the regular [npm package.json keys][npm-keys] available, Atom
package.json files have their own additions.
- `main` (**Required**): the path to the CoffeeScript file that's the entry point
to your package
- `stylesheets` (**Optional**): an Array of Strings identifying the order of the
to your package.
- `styles` (**Optional**): an Array of Strings identifying the order of the
style sheets your package needs to load. If not specified, style sheets in the
_stylesheets_ directory are added alphabetically.
_styles_ directory are added alphabetically.
- `keymaps`(**Optional**): an Array of Strings identifying the order of the
key mappings your package needs to load. If not specified, mappings in the
_keymaps_ directory are added alphabetically.
@@ -121,10 +121,10 @@ like you.
## Style Sheets
Style sheets for your package should be placed in the _stylesheets_ directory.
Style sheets for your package should be placed in the _styles_ directory.
Any style sheets in this directory will be loaded and attached to the DOM when
your package is activated. Style sheets can be written as CSS or [LESS] (but
LESS is recommended).
your package is activated. Style sheets can be written as CSS or [LESS], but
LESS is recommended.
Ideally, you won't need much in the way of styling. We've provided a standard
set of components which define both the colors and UI elements for any package
@@ -138,7 +138,7 @@ taken from the active theme's [ui-variables.less][ui-variables]. For more
information, see the [theme variables docs][theme-variables]. If you follow this
guideline, your package will look good out of the box with any theme!
An optional `stylesheets` array in your _package.json_ can list the style sheets
An optional `styleSheets` array in your _package.json_ can list the style sheets
by name to specify a loading order; otherwise, style sheets are loaded
alphabetically.
@@ -418,8 +418,8 @@ all the other available commands.
[underscore]: http://underscorejs.org/
[jasmine]: http://jasmine.github.io
[cson]: https://github.com/atom/season
[less]: http://lesscss.org
[ui-variables]: https://github.com/atom/atom-dark-ui/blob/master/stylesheets/ui-variables.less
[LESS]: http://lesscss.org
[ui-variables]: https://github.com/atom/atom-dark-ui/blob/master/styles/ui-variables.less
[first-package]: your-first-package.html
[convert-bundle]: converting-a-text-mate-bundle.html
[convert-theme]: converting-a-text-mate-theme.html
+8 -6
Ver Arquivo
@@ -1,8 +1,8 @@
# Creating a Theme
Atom's interface is rendered using HTML, and it's styled via [LESS] (a superset
of CSS). Don't worry if you haven't heard of LESS before; it's just like CSS,
but with a few handy extensions.
Atom's interface is rendered using HTML, and it's styled via [LESS] which is a
superset of CSS. Don't worry if you haven't heard of LESS before; it's just like
CSS, but with a few handy extensions.
Atom supports two types of themes: _UI_ and _syntax_. UI themes style
elements such as the tree view, the tabs, drop-down lists, and the status bar.
@@ -42,10 +42,10 @@ _Motif_ theme listed in the _Syntax Theme_ drop-down. Select it from the menu to
activate it, now when you open an editor you should see that your new
_motif-syntax_ theme in action.
Open up _stylesheets/colors.less_ to change the various colors variables which
Open up _styles/colors.less_ to change the various colors variables which
have been already been defined. For example, turn `@red` into `#f4c2c1`.
Then open _stylesheets/base.less_ and modify the various selectors that have
Then open _styles/base.less_ and modify the various selectors that have
been already been defined. These selectors style different parts of code in the
editor such as comments, strings and the line numbers in the gutter.
@@ -59,6 +59,8 @@ window in dev mode. To open a Dev Mode Atom window run `atom --dev .` in the
terminal, use `cmd-shift-o` or use the _View > Developer > Open in Dev Mode_
menu. When you edit your theme, changes will instantly be reflected!
> Note: It's advised to _not_ specify a `font-family` in your syntax theme because it will override the Font Family field in Atom's settings. If you still like to recommend a font that goes well with your theme, we recommend you do so in your README.
## Creating an Interface Theme
Interface themes **must** provide a `ui-variables.less` file which contains all
@@ -129,7 +131,7 @@ _styleguide_, or use the shortcut `cmd-ctrl-shift-g`.
![styleguide-img]
[atomio]: http://atom.io/packages
[less]: http://lesscss.org/
[LESS]: http://lesscss.org/
[git]: http://git-scm.com/
[atom]: https://atom.io/
[package.json]: ./creating-a-package.html#package-json
+2 -1
Ver Arquivo
@@ -54,7 +54,7 @@ You can also use `apm` to find new packages to install:
## Customizing Key Bindings
Atom keymaps work similarly to stylesheets. Just as stylesheets use selectors
Atom keymaps work similarly to style sheets. Just as style sheets use selectors
to apply styles to elements, Atom keymaps use selectors to associate keystrokes
with events in specific contexts. Here's a small example, excerpted from Atom's
built-in keymaps:
@@ -105,6 +105,7 @@ You can open this file in an editor from the _Atom > Open Your Config_ menu.
- `core`
- `disabledPackages`: An array of package names to disable
- `excludeVcsIgnoredPaths`: Don't search within files specified by _.gitignore_
- `followSymlinks`: Follow symlinks when searching and scanning root directory
- `ignoredNames`: File names to ignore across all of Atom
- `projectHome`: The directory where projects are assumed to be located
- `themes`: An array of theme names to load, in cascading order
+12 -1
Ver Arquivo
@@ -3,7 +3,8 @@
Atom provides several tools to help you understand unexpected behavior and debug problems. This guide describes some of those tools and a few approaches to help you debug and provide more helpful information when [submitting issues]:
* [Update to the latest version](#update-to-the-latest-version)
* [Check Atom and package settings](#check-atom-and-package-settings)
* [Check for linked packages](#check-for-linked-packages)
* [Check Atom and package settings](#check-atom-and-package-settings)
* [Check the keybindings](#check-the-keybindings)
* [Check if the problem shows up in safe mode](#check-if-the-problem-shows-up-in-safe-mode)
* [Check your config files](#check-your-config-files)
@@ -24,6 +25,16 @@ $ atom --version
Head on over to the [list of releases][atom releases] and see if there's a more recent release. You can update to the most recent release by downloading Atom from the releases page, or with the in-app auto-updater. The in-app auto-updater checks for and downloads a new version after you restart Atom, or if you use the Atom > Check for Update menu option.
## Check for linked packages
If you develop or contribute to Atom packages, there may be left-over packages linked to your `~/.atom/packages` or `~/.atom/dev/packages` directories. You can use:
```shell
$ apm links
```
to list all linked development packages. You can remove the links using the `apm unlink` command. See `apm unlink --help` for details.
## Check Atom and package settings
In some cases, unexpected behavior might be caused by misconfigured or unconfigured settings in Atom or in one of the packages.
+4 -4
Ver Arquivo
@@ -1,6 +1,6 @@
# Upgrading Your UI Theme Or Package Selectors
In addition to changes in Atom's scripting API, we'll also be making some breaking changes to Atom's DOM structure, requiring stylesheets and keymaps in both packages and themes to be updated.
In addition to changes in Atom's scripting API, we'll also be making some breaking changes to Atom's DOM structure, requiring style sheets and keymaps in both packages and themes to be updated.
## Deprecation Cop
@@ -121,12 +121,12 @@ The selector features discussed above allow you to target shadow DOM content wit
```
my-ui-theme/
stylesheets/
styles/
index.less # loaded globally
index.atom-text-editor.less # loaded in the text editor shadow DOM
```
Check out this [style sheet](https://github.com/atom/decoration-example/blob/master/stylesheets/decoration-example.atom-text-editor.less) from the decoration-example package for an example of context-targeting.
Check out this [style sheet](https://github.com/atom/decoration-example/blob/master/styles/decoration-example.atom-text-editor.less) from the decoration-example package for an example of context-targeting.
Inside a context-targeted style sheet, there's no need to use the `::shadow` or `/deep/` expressions. If you want to refer to the element containing the shadow root, you can use the `::host` pseudo-element.
@@ -134,4 +134,4 @@ During the transition phase, style sheets targeting the `atom-text-editor` conte
[shadow-dom-101]: http://www.html5rocks.com/en/tutorials/webcomponents/shadowdom
[shadow-dom-201]: http://www.html5rocks.com/en/tutorials/webcomponents/shadowdom-201#toc-style-cat-hat
[find-and-replace]: https://github.com/atom/find-and-replace/blob/95351f261bc384960a69b66bf12eae8002da63f9/stylesheets/find-and-replace.less#L10
[find-and-replace]: https://github.com/atom/find-and-replace/blob/95351f261bc384960a69b66bf12eae8002da63f9/styles/find-and-replace.less#L10
+7
Ver Arquivo
@@ -127,3 +127,10 @@ describe "when a test is written", ->
expect("apples").toEqual("apples")
expect("oranges").not.toEqual("apples")
```
### Running on CI
It is now easy to run the specs in a CI environment like Travis and AppVeyor. See the
[Travis CI For Your Packages](http://blog.atom.io/2014/04/25/ci-for-your-packages.html)
and [AppVeyor CI For Your Packages](http://blog.atom.io/2014/07/28/windows-ci-for-your-packages.html)
posts for more details.
+2 -2
Ver Arquivo
@@ -1,7 +1,7 @@
# Your keymap
#
# Atom keymaps work similarly to stylesheets. Just as stylesheets use selectors
# to apply styles to elements, Atom keymaps use selectors to associate
# Atom keymaps work similarly to style sheets. Just as style sheets use
# selectors to apply styles to elements, Atom keymaps use selectors to associate
# keystrokes with events in specific contexts.
#
# You can create a new keybinding in this file by typing "key" and then hitting
+16 -16
Ver Arquivo
@@ -40,11 +40,11 @@ unless process.env.ATOM_SHELL_INTERNAL_RUN_AS_NODE
Object.defineProperty module.exports, '$', get: ->
deprecate """
Requiring `$` from `atom` is no longer supported.
If you are using `space-pen`, please require `$` from `space-pen`. Otherwise require `jquery` instead:
`{$} = require 'space-pen'`
If you are using `space-pen`, please require `$` from `atom-space-pen-views`. Otherwise require `jquery` instead:
`{$} = require 'atom-space-pen-views'`
or
`$ = require 'jquery'`
Add `"space-pen": "^4"` to your package dependencies.
Add `"atom-space-pen-views": "^2.0.3"` to your package dependencies.
Or add `"jquery": "^2"` to your package dependencies.
"""
$
@@ -52,27 +52,27 @@ unless process.env.ATOM_SHELL_INTERNAL_RUN_AS_NODE
Object.defineProperty module.exports, '$$', get: ->
deprecate """
Requiring `$$` from `atom` is no longer supported.
Please require `space-pen` instead:
`{$$} = require 'space-pen'`
Add `"space-pen": "^4"` to your package dependencies.
Please require `atom-space-pen-views` instead:
`{$$} = require 'atom-space-pen-views'`
Add `"atom-space-pen-views": "^2.0.3"` to your package dependencies.
"""
$$
Object.defineProperty module.exports, '$$$', get: ->
deprecate """
Requiring `$$$` from `atom` is no longer supported.
Please require `space-pen` instead:
`{$$$} = require 'space-pen'`
Add `"space-pen": "^4"` to your package dependencies.
Please require `atom-space-pen-views` instead:
`{$$$} = require 'atom-space-pen-views'`
Add `"atom-space-pen-views": "^2.0.3"` to your package dependencies.
"""
$$$
Object.defineProperty module.exports, 'View', get: ->
deprecate """
Requiring `View` from `atom` is no longer supported.
Please require `space-pen` instead:
`{View} = require 'space-pen'`
Add `"space-pen": "^4"` to your package dependencies.
Please require `atom-space-pen-views` instead:
`{View} = require 'atom-space-pen-views'`
Add `"atom-space-pen-views": "^2.0.3"` to your package dependencies.
"""
View
@@ -81,7 +81,7 @@ unless process.env.ATOM_SHELL_INTERNAL_RUN_AS_NODE
Requiring `EditorView` from `atom` is no longer supported.
Please require `TextEditorView` from `atom-space-pen-view` instead:
`{TextEditorView} = require 'atom-space-pen-views'`
Add `"atom-space-pen-views": "^0"` to your package dependencies.
Add `"atom-space-pen-views": "^2.0.3"` to your package dependencies.
"""
require '../src/text-editor-view'
@@ -90,7 +90,7 @@ unless process.env.ATOM_SHELL_INTERNAL_RUN_AS_NODE
Requiring `TextEditorView` from `atom` is no longer supported.
Please require `TextEditorView` from `atom-space-pen-view` instead:
`{TextEditorView} = require 'atom-space-pen-views'`
Add `"atom-space-pen-views": "^0"` to your package dependencies.
Add `"atom-space-pen-views": "^2.0.3"` to your package dependencies.
"""
require '../src/text-editor-view'
@@ -100,7 +100,7 @@ unless process.env.ATOM_SHELL_INTERNAL_RUN_AS_NODE
Please require `ScrollView` from `atom-space-pen-view` instead:
`{ScrollView} = require 'atom-space-pen-views'`
Note that the API has changed slightly! Please read the docs at https://github.com/atom/atom-space-pen-views
Add `"atom-space-pen-views": "^0"` to your package dependencies.
Add `"atom-space-pen-views": "^2.0.3"` to your package dependencies.
"""
require '../src/scroll-view'
@@ -110,7 +110,7 @@ unless process.env.ATOM_SHELL_INTERNAL_RUN_AS_NODE
Please require `SelectListView` from `atom-space-pen-view` instead:
`{SelectListView} = require 'atom-space-pen-views'`
Note that the API has changed slightly! Please read the docs at https://github.com/atom/atom-space-pen-views
Add `"atom-space-pen-views": "^0"` to your package dependencies.
Add `"atom-space-pen-views": "^2.0.3"` to your package dependencies.
"""
require '../src/select-list-view'
+1 -1
Ver Arquivo
@@ -202,7 +202,7 @@
]
'context-menu':
'.overlayer': [
'atom-text-editor, .overlayer': [
{label: 'Undo', command: 'core:undo'}
{label: 'Redo', command: 'core:redo'}
{type: 'separator'}
+1 -1
Ver Arquivo
@@ -160,7 +160,7 @@
]
'context-menu':
'.overlayer': [
'atom-text-editor, .overlayer': [
{label: 'Undo', command: 'core:undo'}
{label: 'Redo', command: 'core:redo'}
{type: 'separator'}
+1 -1
Ver Arquivo
@@ -181,7 +181,7 @@
]
'context-menu':
'.overlayer': [
'atom-text-editor, .overlayer': [
{label: 'Undo', command: 'core:undo'}
{label: 'Redo', command: 'core:redo'}
{type: 'separator'}
+88 -86
Ver Arquivo
@@ -1,7 +1,7 @@
{
"name": "atom",
"productName": "Atom",
"version": "0.153.0",
"version": "0.171.0",
"description": "A hackable text editor for the 21st Century.",
"main": "./src/browser/main.js",
"repository": {
@@ -17,23 +17,24 @@
"url": "http://github.com/atom/atom/raw/master/LICENSE.md"
}
],
"atomShellVersion": "0.19.4",
"atomShellVersion": "0.20.5",
"dependencies": {
"async": "0.2.6",
"atom-keymap": "^2.3.0",
"atom-keymap": "^2.5.1",
"bootstrap": "git+https://github.com/atom/bootstrap.git#6af81906189f1747fd6c93479e3d998ebe041372",
"clear-cut": "0.4.0",
"coffee-script": "1.7.0",
"coffeestack": "0.7.0",
"coffee-script": "1.8.0",
"coffeestack": "0.8.0",
"color": "^0.7.3",
"delegato": "^1",
"emissary": "^1.3.1",
"event-kit": "0.8.1",
"first-mate": "^2.2.0",
"event-kit": "^1.0.1",
"first-mate": "^2.2.4",
"fs-plus": "^2.3.2",
"fstream": "0.1.24",
"fuzzaldrin": "^2.1",
"git-utils": "^2.1.5",
"grim": "0.12.0",
"git-utils": "^2.2",
"grim": "1.1.0",
"guid": "0.0.10",
"jasmine-json": "~0.0",
"jasmine-tagged": "^1.1.2",
@@ -45,7 +46,7 @@
"nslog": "^1.0.1",
"oniguruma": "^3.0.4",
"optimist": "0.4.0",
"pathwatcher": "^2.3.5",
"pathwatcher": "^2.5.0",
"property-accessors": "^1",
"q": "^1.0.1",
"random-words": "0.0.1",
@@ -53,98 +54,99 @@
"reactionary-atom-fork": "^1.0.0",
"runas": "1.0.1",
"scandal": "1.0.3",
"scoped-property-store": "^0.15.0",
"scoped-property-store": "^0.16.2",
"scrollbar-style": "^1.0.2",
"season": "^1.0.2",
"season": "^5.0.2",
"semver": "2.2.1",
"serializable": "^1",
"service-hub": "^0.1.0",
"space-pen": "3.8.2",
"temp": "0.7.0",
"text-buffer": "^3.8.2",
"text-buffer": "^3.8.4",
"theorist": "^1.0.2",
"underscore-plus": "^1.6.1",
"underscore-plus": "^1.6.6",
"vm-compatibility-layer": "0.1.0"
},
"packageDependencies": {
"atom-dark-syntax": "0.23.0",
"atom-dark-ui": "0.42.0",
"atom-light-syntax": "0.22.0",
"atom-light-ui": "0.36.0",
"base16-tomorrow-dark-theme": "0.22.0",
"base16-tomorrow-light-theme": "0.5.0",
"solarized-dark-syntax": "0.25.0",
"solarized-light-syntax": "0.13.0",
"archive-view": "0.40.0",
"autocomplete": "0.33.1",
"autoflow": "0.18.0",
"autosave": "0.18.0",
"background-tips": "0.17.0",
"bookmarks": "0.31.0",
"bracket-matcher": "0.63.0",
"command-palette": "0.30.0",
"deprecation-cop": "0.18.0",
"dev-live-reload": "0.35.0",
"encoding-selector": "0.8.0",
"atom-dark-ui": "0.43.0",
"atom-light-syntax": "0.24.0",
"atom-light-ui": "0.37.0",
"base16-tomorrow-dark-theme": "0.23.0",
"base16-tomorrow-light-theme": "0.6.0",
"solarized-dark-syntax": "0.30.0",
"solarized-light-syntax": "0.17.0",
"archive-view": "0.43.0",
"autocomplete": "0.41.0",
"autoflow": "0.20.0",
"autosave": "0.19.0",
"background-tips": "0.20.0",
"bookmarks": "0.33.0",
"bracket-matcher": "0.67.0",
"command-palette": "0.32.0",
"deprecation-cop": "0.25.0",
"dev-live-reload": "0.36.0",
"encoding-selector": "0.14.0",
"exception-reporting": "0.21.0",
"find-and-replace": "0.149.0",
"fuzzy-finder": "0.60.0",
"git-diff": "0.44.0",
"go-to-line": "0.27.0",
"grammar-selector": "0.37.0",
"image-view": "0.42.0",
"incompatible-packages": "0.10.0",
"keybinding-resolver": "0.20.0",
"link": "0.28.0",
"markdown-preview": "0.110.0",
"metrics": "0.39.0",
"notifications": "0.6.0",
"open-on-github": "0.31.0",
"package-generator": "0.33.0",
"release-notes": "0.36.0",
"settings-view": "0.161.0",
"snippets": "0.57.0",
"spell-check": "0.44.0",
"status-bar": "0.50.0",
"styleguide": "0.30.0",
"symbols-view": "0.68.0",
"tabs": "0.57.0",
"timecop": "0.24.0",
"tree-view": "0.135.0",
"update-package-dependencies": "0.6.0",
"find-and-replace": "0.155.0",
"fuzzy-finder": "0.64.0",
"git-diff": "0.47.0",
"go-to-line": "0.30.0",
"grammar-selector": "0.42.0",
"image-view": "0.46.0",
"incompatible-packages": "0.19.0",
"keybinding-resolver": "0.25.0",
"link": "0.29.0",
"markdown-preview": "0.117.0",
"metrics": "0.40.0",
"notifications": "0.23.0",
"open-on-github": "0.32.0",
"package-generator": "0.36.0",
"release-notes": "0.45.0",
"settings-view": "0.169.0",
"snippets": "0.67.0",
"spell-check": "0.49.0",
"status-bar": "0.56.0",
"styleguide": "0.41.0",
"symbols-view": "0.77.0",
"tabs": "0.61.0",
"timecop": "0.26.0",
"tree-view": "0.147.0",
"update-package-dependencies": "0.7.0",
"welcome": "0.21.0",
"whitespace": "0.27.0",
"wrap-guide": "0.24.0",
"language-c": "0.32.0",
"language-clojure": "0.9.0",
"language-coffee-script": "0.38.1",
"language-css": "0.23.1",
"language-gfm": "0.55.0",
"language-git": "0.9.0",
"language-go": "0.19.1",
"language-html": "0.26.1",
"whitespace": "0.28.0",
"wrap-guide": "0.29.0",
"language-c": "0.37.0",
"language-clojure": "0.10.0",
"language-coffee-script": "0.39.0",
"language-css": "0.26.0",
"language-gfm": "0.62.0",
"language-git": "0.10.0",
"language-go": "0.20.0",
"language-html": "0.28.0",
"language-hyperlink": "0.12.2",
"language-java": "0.13.0",
"language-javascript": "0.47.0",
"language-json": "0.10.0",
"language-less": "0.19.0",
"language-make": "0.12.0",
"language-java": "0.14.0",
"language-javascript": "0.54.0",
"language-json": "0.11.0",
"language-less": "0.24.0",
"language-make": "0.13.0",
"language-mustache": "0.11.0",
"language-objective-c": "0.12.0",
"language-perl": "0.9.0",
"language-php": "0.18.0",
"language-property-list": "0.7.0",
"language-python": "0.24.1",
"language-ruby": "0.44.0",
"language-objective-c": "0.15.0",
"language-perl": "0.10.0",
"language-php": "0.20.0",
"language-property-list": "0.8.0",
"language-python": "0.30.0",
"language-ruby": "0.47.0",
"language-ruby-on-rails": "0.18.0",
"language-sass": "0.27.0",
"language-shellscript": "0.10.1",
"language-source": "0.8.0",
"language-sql": "0.11.0",
"language-sass": "0.31.0",
"language-shellscript": "0.12.0",
"language-source": "0.9.0",
"language-sql": "0.13.0",
"language-text": "0.6.0",
"language-todo": "0.14.0",
"language-toml": "0.14.1",
"language-xml": "0.25.0",
"language-yaml": "0.20.1"
"language-todo": "0.15.0",
"language-toml": "0.15.0",
"language-xml": "0.27.0",
"language-yaml": "0.22.0"
},
"private": true,
"scripts": {
Arquivo binário não exibido.

Antes

Largura:  |  Altura:  |  Tamanho: 284 KiB

Depois

Largura:  |  Altura:  |  Tamanho: 628 KiB

+1 -1
Ver Arquivo
@@ -1,6 +1,6 @@
Package: <%= name %>
Version: <%= version %>
Depends: gconf2, gconf-service, libgtk2.0-0, libudev0 | libudev1, libgcrypt11, libnotify4, libxtst6, libnss3, python, gvfs-bin, xdg-utils
Depends: git, gconf2, gconf-service, libgtk2.0-0, libudev0 | libudev1, libgcrypt11, libnotify4, libxtst6, libnss3, python, gvfs-bin, xdg-utils
Suggests: libgnome-keyring0, gir1.2-gnomekeyring-1.0
Section: <%= section %>
Priority: optional
Arquivo binário não exibido.
Arquivo binário não exibido.
+3
Ver Arquivo
@@ -0,0 +1,3 @@
#!/bin/sh
"$0/../../app/apm/node_modules/atom-package-manager/bin/node.exe" "$0/../../app/apm/node_modules/atom-package-manager/lib/cli.js" "$@"
+22
Ver Arquivo
@@ -0,0 +1,22 @@
@echo off
SET EXPECT_OUTPUT=
FOR %%a IN (%*) DO (
IF /I "%%a"=="-f" SET EXPECT_OUTPUT=YES
IF /I "%%a"=="--foreground" SET EXPECT_OUTPUT=YES
IF /I "%%a"=="-h" SET EXPECT_OUTPUT=YES
IF /I "%%a"=="--help" SET EXPECT_OUTPUT=YES
IF /I "%%a"=="-t" SET EXPECT_OUTPUT=YES
IF /I "%%a"=="--test" SET EXPECT_OUTPUT=YES
IF /I "%%a"=="-v" SET EXPECT_OUTPUT=YES
IF /I "%%a"=="--version" SET EXPECT_OUTPUT=YES
IF /I "%%a"=="-w" SET EXPECT_OUTPUT=YES
IF /I "%%a"=="--wait" SET EXPECT_OUTPUT=YES
)
IF "%EXPECT_OUTPUT%"=="YES" (
"%~dp0\..\..\atom.exe" %*
) ELSE (
"%~dp0\..\app\apm\node_modules\atom-package-manager\bin\node.exe" "%~dp0\atom.js" %*
)
Arquivo binário não exibido.

Antes

Largura:  |  Altura:  |  Tamanho: 141 KiB

Depois

Largura:  |  Altura:  |  Tamanho: 182 KiB

+9
Ver Arquivo
@@ -0,0 +1,9 @@
var path = require('path');
var spawn = require('child_process').spawn;
var atomCommandPath = path.resolve(__dirname, '..', '..', 'atom.exe');
var arguments = process.argv.slice(2);
arguments.unshift('--executed-from', process.cwd());
var options = {detached: true, stdio: 'ignore'};
spawn(atomCommandPath, arguments, options);
process.exit(0);
+22
Ver Arquivo
@@ -0,0 +1,22 @@
#!/bin/sh
while getopts ":fhtvw-:" opt; do
case "$opt" in
-)
case "${OPTARG}" in
foreground|help|test|version|wait)
EXPECT_OUTPUT=1
;;
esac
;;
f|h|t|v|w)
EXPECT_OUTPUT=1
;;
esac
done
if [ $EXPECT_OUTPUT ]; then
"$0/../../../atom.exe" "$@"
else
"$0/../../app/apm/node_modules/atom-package-manager/bin/node.exe" "$0/../atom.js" "$@"
fi
+2
Ver Arquivo
@@ -4,7 +4,9 @@ set -e
docker build -t atom-rpm .
docker run \
--rm \
--env JANKY_SHA1="$JANKY_SHA1" \
--env JANKY_BRANCH="$JANKY_BRANCH" \
--env ATOM_ACCESS_TOKEN="$BUILD_ATOM_RPM_ACCESS_TOKEN" \
atom-rpm /atom/script/rpmbuild
docker rmi atom-rpm
+5 -2
Ver Arquivo
@@ -38,7 +38,8 @@ module.exports =
class AtomReporter extends View
@content: ->
@div class: 'spec-reporter', =>
@div outlet: "suites"
@div class: 'padded pull-right', =>
@button outlet: 'reloadButton', class: 'btn btn-small reload-button', 'Reload Specs'
@div outlet: 'coreArea', class: 'symbol-area', =>
@div outlet: 'coreHeader', class: 'symbol-header'
@ul outlet: 'coreSummary', class: 'symbol-summary list-unstyled'
@@ -80,6 +81,8 @@ class AtomReporter extends View
@on 'click', '.stack-trace', ->
$(this).toggleClass('expanded')
@reloadButton.on 'click', -> require('ipc').send('call-window-method', 'restart')
reportRunnerResults: (runner) ->
@updateSpecCounts()
@status.addClass('alert-success').removeClass('alert-info') if @failedCount is 0
@@ -114,7 +117,7 @@ class AtomReporter extends View
@div class: 'result-message fail deprecation-message', =>
@raw marked(deprecation.message)
for stack in deprecation.stacks
for stack in deprecation.getStacks()
fullStack = stack.map ({functionName, location}) ->
if functionName is '<unknown>'
" at #{location}"
+1
Ver Arquivo
@@ -54,6 +54,7 @@ describe "the `atom` global", ->
describe "loading default config", ->
it 'loads the default core config', ->
expect(atom.config.get('core.excludeVcsIgnoredPaths')).toBe true
expect(atom.config.get('core.followSymlinks')).toBe false
expect(atom.config.get('editor.showInvisibles')).toBe false
describe "window onerror handler", ->
+75
Ver Arquivo
@@ -0,0 +1,75 @@
ChildProcess = require 'child_process'
path = require 'path'
BufferedProcess = require '../src/buffered-process'
describe "BufferedProcess", ->
describe "when a bad command is specified", ->
[oldOnError] = []
beforeEach ->
oldOnError = window.onerror
window.onerror = jasmine.createSpy()
afterEach ->
window.onerror = oldOnError
describe "when there is an error handler specified", ->
it "calls the error handler and does not throw an exception", ->
process = new BufferedProcess
command: 'bad-command-nope'
args: ['nothing']
options: {}
errorSpy = jasmine.createSpy().andCallFake (error) -> error.handle()
process.onWillThrowError(errorSpy)
waitsFor -> errorSpy.callCount > 0
runs ->
expect(window.onerror).not.toHaveBeenCalled()
expect(errorSpy).toHaveBeenCalled()
expect(errorSpy.mostRecentCall.args[0].error.message).toContain 'spawn bad-command-nope ENOENT'
describe "when there is not an error handler specified", ->
it "calls the error handler and does not throw an exception", ->
process = new BufferedProcess
command: 'bad-command-nope'
args: ['nothing']
options: {}
waitsFor -> window.onerror.callCount > 0
runs ->
expect(window.onerror).toHaveBeenCalled()
expect(window.onerror.mostRecentCall.args[0]).toContain 'Failed to spawn command `bad-command-nope`'
expect(window.onerror.mostRecentCall.args[4].name).toBe 'BufferedProcessError'
describe "on Windows", ->
originalPlatform = null
beforeEach ->
# Prevent any commands from actually running and affecting the host
originalSpawn = ChildProcess.spawn
spyOn(ChildProcess, 'spawn').andCallFake ->
# Just spawn something that won't actually modify the host
if originalPlatform is 'win32'
originalSpawn('dir')
else
originalSpawn('ls')
originalPlatform = process.platform
Object.defineProperty process, 'platform', value: 'win32'
afterEach ->
Object.defineProperty process, 'platform', value: originalPlatform
describe "when the explorer command is spawned on Windows", ->
it "doesn't quote arguments of the form /root,C...", ->
new BufferedProcess({command: 'explorer.exe', args: ['/root,C:\\foo']})
expect(ChildProcess.spawn.argsForCall[0][1][2]).toBe '"explorer.exe /root,C:\\foo"'
it "spawns the command using a cmd.exe wrapper", ->
new BufferedProcess({command: 'dir'})
expect(path.basename(ChildProcess.spawn.argsForCall[0][0])).toBe 'cmd.exe'
expect(ChildProcess.spawn.argsForCall[0][1][0]).toBe '/s'
expect(ChildProcess.spawn.argsForCall[0][1][1]).toBe '/c'
expect(ChildProcess.spawn.argsForCall[0][1][2]).toBe '"dir"'
+1164 -846
Ver Arquivo
Diferenças do arquivo suprimidas por serem muito extensas Carregar Diff
+6
Ver Arquivo
@@ -1085,6 +1085,12 @@ describe "DisplayBuffer", ->
expect(oldProperties).toEqual decorationProperties
expect(newProperties).toEqual type: 'gutter', class: 'two', id: decoration.id
describe "::getDecorations(properties)", ->
it "returns decorations matching the given optional properties", ->
expect(displayBuffer.getDecorations()).toEqual [decoration]
expect(displayBuffer.getDecorations(class: 'two').length).toEqual 0
expect(displayBuffer.getDecorations(class: 'one').length).toEqual 1
describe "::setScrollTop", ->
beforeEach ->
displayBuffer.manageScrollPosition = true
@@ -0,0 +1,4 @@
{
"name": "package-with-empty-keymap",
"version": "1.0.0"
}
@@ -0,0 +1,4 @@
{
"name": "package-with-empty-menu",
"version": "1.0.0"
}
@@ -0,0 +1 @@
styleSheets: ['2', '1']
@@ -1 +1 @@
stylesheets: ['2', '1']
styleSheets: ['2', '1']
+1 -1
Ver Arquivo
@@ -1,4 +1,4 @@
{
"theme": "ui",
"stylesheets": ["first.css", "second.less", "last.css"]
"styleSheets": ["first.css", "second.less", "last.css"]
}
+1
Ver Arquivo
@@ -1,2 +1,3 @@
module.exports = ->
emit("some-event", 1, 2, 3)
'hello'
+4
Ver Arquivo
@@ -259,6 +259,10 @@ describe "GitRepository", ->
editor.getBuffer().emitter.emit 'did-change-path'
expect(statusHandler.callCount).toBe 1
it "stops listening to the buffer when the repository is destroyed (regression)", ->
atom.project.getRepositories()[0].destroy()
expect(-> editor.save()).not.toThrow()
describe "when a project is deserialized", ->
[buffer, project2] = []
+3
Ver Arquivo
@@ -25,6 +25,9 @@ module.exports.runSpecSuite = (specSuite, logFile, logErrors=true) ->
log(str)
onComplete: (runner) ->
fs.closeSync(logStream) if logStream?
if process.env.JANKY_SHA1
grim = require 'grim'
grim.logDeprecations() if grim.getDeprecationsLength() > 0
atom.exit(runner.results().failedCount > 0 ? 1 : 0)
else
AtomReporter = require './atom-reporter'
+17
Ver Arquivo
@@ -381,6 +381,23 @@ describe "LanguageMode", ->
expect(languageMode.isFoldableAtBufferRow(3)).toBe false
expect(languageMode.isFoldableAtBufferRow(4)).toBe true
describe ".foldAllAtIndentLevel(indentLevel)", ->
it "folds blocks of text at the given indentation level", ->
languageMode.foldAllAtIndentLevel(0)
expect(editor.lineTextForScreenRow(0)).toBe "var quicksort = function () {"
expect(editor.getLastScreenRow()).toBe 0
languageMode.foldAllAtIndentLevel(1)
expect(editor.lineTextForScreenRow(0)).toBe "var quicksort = function () {"
expect(editor.lineTextForScreenRow(1)).toBe " var sort = function(items) {"
expect(editor.getLastScreenRow()).toBe 4
languageMode.foldAllAtIndentLevel(2)
expect(editor.lineTextForScreenRow(0)).toBe "var quicksort = function () {"
expect(editor.lineTextForScreenRow(1)).toBe " var sort = function(items) {"
expect(editor.lineTextForScreenRow(2)).toBe " if (items.length <= 1) return items;"
expect(editor.getLastScreenRow()).toBe 9
describe "folding with comments", ->
beforeEach ->
waitsForPromise ->
+29
Ver Arquivo
@@ -16,3 +16,32 @@ describe "Notification", ->
it "returns the icon specified", ->
notification = new Notification('error', 'message!', icon: 'my-icon')
expect(notification.getIcon()).toBe 'my-icon'
describe "dismissing notifications", ->
describe "when the notfication is dismissable", ->
it "calls a callback when the notification is dismissed", ->
dismissedSpy = jasmine.createSpy()
notification = new Notification('error', 'message', dismissable: true)
notification.onDidDismiss dismissedSpy
expect(notification.isDismissable()).toBe true
expect(notification.isDismissed()).toBe false
notification.dismiss()
expect(dismissedSpy).toHaveBeenCalled()
expect(notification.isDismissed()).toBe true
describe "when the notfication is not dismissable", ->
it "does nothing when ::dismiss() is called", ->
dismissedSpy = jasmine.createSpy()
notification = new Notification('error', 'message')
notification.onDidDismiss dismissedSpy
expect(notification.isDismissable()).toBe false
expect(notification.isDismissed()).toBe true
notification.dismiss()
expect(dismissedSpy).not.toHaveBeenCalled()
expect(notification.isDismissed()).toBe true
Diferenças do arquivo suprimidas por serem muito extensas Carregar Diff
+8 -8
Ver Arquivo
@@ -9,14 +9,14 @@ describe "Package", ->
spyOn(atom, 'inDevMode').andReturn(false)
it "does not activate it", ->
packagePath = atom.project.resolve('packages/package-with-incompatible-native-module')
packagePath = atom.project.getDirectories()[0]?.resolve('packages/package-with-incompatible-native-module')
pack = new Package(packagePath)
expect(pack.isCompatible()).toBe false
expect(pack.incompatibleModules[0].name).toBe 'native-module'
expect(pack.incompatibleModules[0].path).toBe path.join(packagePath, 'node_modules', 'native-module')
it "caches the incompatible native modules in local storage", ->
packagePath = atom.project.resolve('packages/package-with-incompatible-native-module')
packagePath = atom.project.getDirectories()[0]?.resolve('packages/package-with-incompatible-native-module')
cacheKey = null
cacheItem = null
@@ -46,14 +46,14 @@ describe "Package", ->
describe "when the theme contains a single style file", ->
it "loads and applies css", ->
expect($("atom-text-editor").css("padding-bottom")).not.toBe "1234px"
themePath = atom.project.resolve('packages/theme-with-index-css')
themePath = atom.project.getDirectories()[0]?.resolve('packages/theme-with-index-css')
theme = new ThemePackage(themePath)
theme.activate()
expect($("atom-text-editor").css("padding-top")).toBe "1234px"
it "parses, loads and applies less", ->
expect($("atom-text-editor").css("padding-bottom")).not.toBe "1234px"
themePath = atom.project.resolve('packages/theme-with-index-less')
themePath = atom.project.getDirectories()[0]?.resolve('packages/theme-with-index-less')
theme = new ThemePackage(themePath)
theme.activate()
expect($("atom-text-editor").css("padding-top")).toBe "4321px"
@@ -64,7 +64,7 @@ describe "Package", ->
expect($("atom-text-editor").css("padding-right")).not.toBe("102px")
expect($("atom-text-editor").css("padding-bottom")).not.toBe("103px")
themePath = atom.project.resolve('packages/theme-with-package-file')
themePath = atom.project.getDirectories()[0]?.resolve('packages/theme-with-package-file')
theme = new ThemePackage(themePath)
theme.activate()
expect($("atom-text-editor").css("padding-top")).toBe("101px")
@@ -77,7 +77,7 @@ describe "Package", ->
expect($("atom-text-editor").css("padding-right")).not.toBe "20px"
expect($("atom-text-editor").css("padding-bottom")).not.toBe "30px"
themePath = atom.project.resolve('packages/theme-without-package-file')
themePath = atom.project.getDirectories()[0]?.resolve('packages/theme-without-package-file')
theme = new ThemePackage(themePath)
theme.activate()
expect($("atom-text-editor").css("padding-top")).toBe "10px"
@@ -86,7 +86,7 @@ describe "Package", ->
describe "reloading a theme", ->
beforeEach ->
themePath = atom.project.resolve('packages/theme-with-package-file')
themePath = atom.project.getDirectories()[0]?.resolve('packages/theme-with-package-file')
theme = new ThemePackage(themePath)
theme.activate()
@@ -97,7 +97,7 @@ describe "Package", ->
describe "events", ->
beforeEach ->
themePath = atom.project.resolve('packages/theme-with-package-file')
themePath = atom.project.getDirectories()[0]?.resolve('packages/theme-with-package-file')
theme = new ThemePackage(themePath)
theme.activate()
+1 -1
Ver Arquivo
@@ -129,7 +129,7 @@ describe "PaneContainer", ->
beforeEach ->
class TestItem
shouldPromptToSave: -> true
getUri: -> 'test'
getURI: -> 'test'
container = new PaneContainer
container.getRoot().splitRight()
+1 -1
Ver Arquivo
@@ -16,7 +16,7 @@ describe "PaneContainerView", ->
@content: -> @div tabindex: -1
initialize: (@name) -> @text(@name)
serialize: -> { deserializer: 'TestView', @name }
getUri: -> path.join(temp.dir, @name)
getURI: -> path.join(temp.dir, @name)
save: -> @saved = true
isEqual: (other) -> @name is other?.name
onDidChangeTitle: -> new Disposable(->)
+12 -12
Ver Arquivo
@@ -9,7 +9,7 @@ describe "Pane", ->
class Item extends Model
@deserialize: ({name, uri}) -> new this(name, uri)
constructor: (@name, @uri) ->
getUri: -> @uri
getURI: -> @uri
getPath: -> @path
serialize: -> {deserializer: 'Item', @name, @uri}
isEqual: (other) -> @name is other?.name
@@ -231,18 +231,18 @@ describe "Pane", ->
expect(pane.getActiveItem()).toBe item1
describe "if the item is modified", ->
itemUri = null
itemURI = null
beforeEach ->
item1.shouldPromptToSave = -> true
item1.save = jasmine.createSpy("save")
item1.saveAs = jasmine.createSpy("saveAs")
item1.getUri = -> itemUri
item1.getURI = -> itemURI
describe "if the [Save] option is selected", ->
describe "when the item has a uri", ->
it "saves the item before destroying it", ->
itemUri = "test"
itemURI = "test"
spyOn(atom, 'confirm').andReturn(0)
pane.destroyItem(item1)
@@ -252,7 +252,7 @@ describe "Pane", ->
describe "when the item has no uri", ->
it "presents a save-as dialog, then saves the item with the given uri before removing and destroying it", ->
itemUri = null
itemURI = null
spyOn(atom, 'showSaveDialogSync').andReturn("/selected/path")
spyOn(atom, 'confirm').andReturn(0)
@@ -404,15 +404,15 @@ describe "Pane", ->
pane.saveActiveItemAs()
expect(atom.showSaveDialogSync).not.toHaveBeenCalled()
describe "::itemForUri(uri)", ->
it "returns the item for which a call to .getUri() returns the given uri", ->
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")])
[item1, item2, item3] = pane.getItems()
item1.uri = "a"
item2.uri = "b"
expect(pane.itemForUri("a")).toBe item1
expect(pane.itemForUri("b")).toBe item2
expect(pane.itemForUri("bogus")).toBeUndefined()
expect(pane.itemForURI("a")).toBe item1
expect(pane.itemForURI("b")).toBe item2
expect(pane.itemForURI("bogus")).toBeUndefined()
describe "::moveItem(item, index)", ->
[pane, item1, item2, item3, item4] = []
@@ -589,7 +589,7 @@ describe "Pane", ->
[item1, item2] = pane.getItems()
item1.shouldPromptToSave = -> true
item1.getUri = -> "/test/path"
item1.getURI = -> "/test/path"
item1.save = jasmine.createSpy("save")
spyOn(atom, 'confirm').andReturn(0)
@@ -604,7 +604,7 @@ describe "Pane", ->
[item1, item2] = pane.getItems()
item1.shouldPromptToSave = -> true
item1.getUri = -> "/test/path"
item1.getURI = -> "/test/path"
item1.save = jasmine.createSpy("save")
spyOn(atom, 'confirm').andReturn(1)
+1 -1
Ver Arquivo
@@ -15,7 +15,7 @@ describe "PaneView", ->
initialize: ({@id, @text}) ->
@emitter = new Emitter
serialize: -> { deserializer: 'TestView', @id, @text }
getUri: -> @id
getURI: -> @id
isEqual: (other) -> other? and @id == other.id and @text == other.text
changeTitle: ->
@emitter.emit 'did-change-title', 'title'
+4
Ver Arquivo
@@ -21,3 +21,7 @@ describe "Panel", ->
panel.show()
expect(panel.isVisible()).toBe true
expect(spy).toHaveBeenCalledWith(true)
panel.destroy()
expect(panel.isVisible()).toBe false
expect(spy).toHaveBeenCalledWith(false)
+2 -308
Ver Arquivo
@@ -4,12 +4,11 @@ Project = require '../src/project'
_ = require 'underscore-plus'
fs = require 'fs-plus'
path = require 'path'
platform = require './spec-helper-platform'
BufferedProcess = require '../src/buffered-process'
describe "Project", ->
beforeEach ->
atom.project.setPaths([atom.project.resolve('dir')])
atom.project.setPaths([atom.project.getDirectories()[0]?.resolve('dir')])
describe "serialization", ->
deserializedProject = null
@@ -110,7 +109,7 @@ describe "Project", ->
expect(newBufferHandler).toHaveBeenCalledWith(editor.buffer)
it "returns number of read bytes as progress indicator", ->
filePath = atom.project.resolve 'a'
filePath = atom.project.getDirectories()[0]?.resolve 'a'
totalBytes = 0
promise = atom.project.open(filePath)
promise.progress (bytesRead) -> totalBytes = bytesRead
@@ -149,27 +148,6 @@ describe "Project", ->
atom.project.bufferForPath("b").then (anotherBuffer) ->
expect(anotherBuffer).not.toBe buffer
describe ".resolve(uri)", ->
describe "when passed an absolute or relative path", ->
it "returns an absolute path based on the atom.project's root", ->
absolutePath = require.resolve('./fixtures/dir/a')
expect(atom.project.resolve('a')).toBe absolutePath
expect(atom.project.resolve(absolutePath + '/../a')).toBe absolutePath
expect(atom.project.resolve('a/../a')).toBe absolutePath
expect(atom.project.resolve()).toBeUndefined()
describe "when passed a uri with a scheme", ->
it "does not modify uris that begin with a scheme", ->
expect(atom.project.resolve('http://zombo.com')).toBe 'http://zombo.com'
describe "when the project has no path", ->
it "returns undefined for relative URIs", ->
atom.project.setPaths([])
expect(atom.project.resolve('test.txt')).toBeUndefined()
expect(atom.project.resolve('http://github.com')).toBe 'http://github.com'
absolutePath = fs.absolute(__dirname)
expect(atom.project.resolve(absolutePath)).toBe absolutePath
describe ".setPaths(path)", ->
describe "when path is a file", ->
it "sets its path to the files parent directory and updates the root directory", ->
@@ -195,290 +173,6 @@ describe "Project", ->
expect(atom.project.getPaths()[0]).toEqual path.dirname(require.resolve('./fixtures/dir/a'))
expect(atom.project.getDirectories()[0].path).toEqual path.dirname(require.resolve('./fixtures/dir/a'))
describe ".replace()", ->
[filePath, commentFilePath, sampleContent, sampleCommentContent] = []
beforeEach ->
atom.project.setPaths([atom.project.resolve('../')])
filePath = atom.project.resolve('sample.js')
commentFilePath = atom.project.resolve('sample-with-comments.js')
sampleContent = fs.readFileSync(filePath).toString()
sampleCommentContent = fs.readFileSync(commentFilePath).toString()
afterEach ->
fs.writeFileSync(filePath, sampleContent)
fs.writeFileSync(commentFilePath, sampleCommentContent)
describe "when a file doesn't exist", ->
it "calls back with an error", ->
errors = []
missingPath = path.resolve('/not-a-file.js')
expect(fs.existsSync(missingPath)).toBeFalsy()
waitsForPromise ->
atom.project.replace /items/gi, 'items', [missingPath], (result, error) ->
errors.push(error)
runs ->
expect(errors).toHaveLength 1
expect(errors[0].path).toBe missingPath
describe "when called with unopened files", ->
it "replaces properly", ->
results = []
waitsForPromise ->
atom.project.replace /items/gi, 'items', [filePath], (result) ->
results.push(result)
runs ->
expect(results).toHaveLength 1
expect(results[0].filePath).toBe filePath
expect(results[0].replacements).toBe 6
describe "when a buffer is already open", ->
it "replaces properly and saves when not modified", ->
editor = null
results = []
waitsForPromise ->
atom.project.open('sample.js').then (o) -> editor = o
runs ->
expect(editor.isModified()).toBeFalsy()
waitsForPromise ->
atom.project.replace /items/gi, 'items', [filePath], (result) ->
results.push(result)
runs ->
expect(results).toHaveLength 1
expect(results[0].filePath).toBe filePath
expect(results[0].replacements).toBe 6
expect(editor.isModified()).toBeFalsy()
it "does not replace when the path is not specified", ->
editor = null
results = []
waitsForPromise ->
atom.project.open('sample-with-comments.js').then (o) -> editor = o
waitsForPromise ->
atom.project.replace /items/gi, 'items', [commentFilePath], (result) ->
results.push(result)
runs ->
expect(results).toHaveLength 1
expect(results[0].filePath).toBe commentFilePath
it "does NOT save when modified", ->
editor = null
results = []
waitsForPromise ->
atom.project.open('sample.js').then (o) -> editor = o
runs ->
editor.buffer.setTextInRange([[0,0],[0,0]], 'omg')
expect(editor.isModified()).toBeTruthy()
waitsForPromise ->
atom.project.replace /items/gi, 'okthen', [filePath], (result) ->
results.push(result)
runs ->
expect(results).toHaveLength 1
expect(results[0].filePath).toBe filePath
expect(results[0].replacements).toBe 6
expect(editor.isModified()).toBeTruthy()
describe ".scan(options, callback)", ->
describe "when called with a regex", ->
it "calls the callback with all regex results in all files in the project", ->
results = []
waitsForPromise ->
atom.project.scan /(a)+/, (result) ->
results.push(result)
runs ->
expect(results).toHaveLength(3)
expect(results[0].filePath).toBe atom.project.resolve('a')
expect(results[0].matches).toHaveLength(3)
expect(results[0].matches[0]).toEqual
matchText: 'aaa'
lineText: 'aaa bbb'
lineTextOffset: 0
range: [[0, 0], [0, 3]]
it "works with with escaped literals (like $ and ^)", ->
results = []
waitsForPromise ->
atom.project.scan /\$\w+/, (result) -> results.push(result)
runs ->
expect(results.length).toBe 1
{filePath, matches} = results[0]
expect(filePath).toBe atom.project.resolve('a')
expect(matches).toHaveLength 1
expect(matches[0]).toEqual
matchText: '$bill'
lineText: 'dollar$bill'
lineTextOffset: 0
range: [[2, 6], [2, 11]]
it "works on evil filenames", ->
platform.generateEvilFiles()
atom.project.setPaths([path.join(__dirname, 'fixtures', 'evil-files')])
paths = []
matches = []
waitsForPromise ->
atom.project.scan /evil/, (result) ->
paths.push(result.filePath)
matches = matches.concat(result.matches)
runs ->
_.each(matches, (m) -> expect(m.matchText).toEqual 'evil')
if platform.isWindows()
expect(paths.length).toBe 3
expect(paths[0]).toMatch /a_file_with_utf8.txt$/
expect(paths[1]).toMatch /file with spaces.txt$/
expect(path.basename(paths[2])).toBe "utfa\u0306.md"
else
expect(paths.length).toBe 5
expect(paths[0]).toMatch /a_file_with_utf8.txt$/
expect(paths[1]).toMatch /file with spaces.txt$/
expect(paths[2]).toMatch /goddam\nnewlines$/m
expect(paths[3]).toMatch /quote".txt$/m
expect(path.basename(paths[4])).toBe "utfa\u0306.md"
it "ignores case if the regex includes the `i` flag", ->
results = []
waitsForPromise ->
atom.project.scan /DOLLAR/i, (result) -> results.push(result)
runs ->
expect(results).toHaveLength 1
describe "when the core.excludeVcsIgnoredPaths config is truthy", ->
[projectPath, ignoredPath] = []
beforeEach ->
sourceProjectPath = path.join(__dirname, 'fixtures', 'git', 'working-dir')
projectPath = path.join(temp.mkdirSync("atom"))
writerStream = fstream.Writer(projectPath)
fstream.Reader(sourceProjectPath).pipe(writerStream)
waitsFor (done) ->
writerStream.on 'close', done
writerStream.on 'error', done
runs ->
fs.rename(path.join(projectPath, 'git.git'), path.join(projectPath, '.git'))
ignoredPath = path.join(projectPath, 'ignored.txt')
fs.writeFileSync(ignoredPath, 'this match should not be included')
afterEach ->
fs.removeSync(projectPath) if fs.existsSync(projectPath)
it "excludes ignored files", ->
atom.project.setPaths([projectPath])
atom.config.set('core.excludeVcsIgnoredPaths', true)
resultHandler = jasmine.createSpy("result found")
waitsForPromise ->
atom.project.scan /match/, (results) ->
resultHandler()
runs ->
expect(resultHandler).not.toHaveBeenCalled()
it "includes only files when a directory filter is specified", ->
projectPath = path.join(path.join(__dirname, 'fixtures', 'dir'))
atom.project.setPaths([projectPath])
filePath = path.join(projectPath, 'a-dir', 'oh-git')
paths = []
matches = []
waitsForPromise ->
atom.project.scan /aaa/, paths: ["a-dir#{path.sep}"], (result) ->
paths.push(result.filePath)
matches = matches.concat(result.matches)
runs ->
expect(paths.length).toBe 1
expect(paths[0]).toBe filePath
expect(matches.length).toBe 1
it "includes files and folders that begin with a '.'", ->
projectPath = temp.mkdirSync()
filePath = path.join(projectPath, '.text')
fs.writeFileSync(filePath, 'match this')
atom.project.setPaths([projectPath])
paths = []
matches = []
waitsForPromise ->
atom.project.scan /match this/, (result) ->
paths.push(result.filePath)
matches = matches.concat(result.matches)
runs ->
expect(paths.length).toBe 1
expect(paths[0]).toBe filePath
expect(matches.length).toBe 1
it "excludes values in core.ignoredNames", ->
projectPath = path.join(__dirname, 'fixtures', 'git', 'working-dir')
ignoredNames = atom.config.get("core.ignoredNames")
ignoredNames.push("a")
atom.config.set("core.ignoredNames", ignoredNames)
resultHandler = jasmine.createSpy("result found")
waitsForPromise ->
atom.project.scan /dollar/, (results) ->
resultHandler()
runs ->
expect(resultHandler).not.toHaveBeenCalled()
it "scans buffer contents if the buffer is modified", ->
editor = null
results = []
waitsForPromise ->
atom.project.open('a').then (o) ->
editor = o
editor.setText("Elephant")
waitsForPromise ->
atom.project.scan /a|Elephant/, (result) -> results.push result
runs ->
expect(results).toHaveLength 3
resultForA = _.find results, ({filePath}) -> path.basename(filePath) == 'a'
expect(resultForA.matches).toHaveLength 1
expect(resultForA.matches[0].matchText).toBe 'Elephant'
it "ignores buffers outside the project", ->
editor = null
results = []
waitsForPromise ->
atom.project.open(temp.openSync().path).then (o) ->
editor = o
editor.setText("Elephant")
waitsForPromise ->
atom.project.scan /Elephant/, (result) -> results.push result
runs ->
expect(results).toHaveLength 0
describe ".eachBuffer(callback)", ->
beforeEach ->
atom.project.bufferForPathSync('a')
+9 -6
Ver Arquivo
@@ -84,6 +84,10 @@ beforeEach ->
atom.workspaceViewParentSelector = '#jasmine-content'
window.resetTimeouts()
spyOn(_._, "now").andCallFake -> window.now
spyOn(window, "setTimeout").andCallFake window.fakeSetTimeout
spyOn(window, "clearTimeout").andCallFake window.fakeClearTimeout
atom.packages.packageStates = {}
serializedWindowState = null
@@ -102,9 +106,9 @@ beforeEach ->
spyOn(atom.menu, 'sendToBrowserProcess')
# reset config before each spec; don't load or save from/to `config.json`
spyOn(Config::, 'load')
spyOn(Config::, 'save')
config = new Config({resourcePath, configDirPath: atom.getConfigDirPath()})
spyOn(config, 'load')
spyOn(config, 'save')
atom.config = config
atom.loadConfig()
config.set "core.destroyEmptyPanes", false
@@ -114,6 +118,7 @@ beforeEach ->
config.set "core.disabledPackages", ["package-that-throws-an-exception",
"package-with-broken-package-json", "package-with-broken-keymap"]
config.set "editor.useShadowDOM", true
advanceClock(1000)
config.load.reset()
config.save.reset()
@@ -121,8 +126,6 @@ beforeEach ->
TextEditorElement::setUpdatedSynchronously(true)
spyOn(atom, "setRepresentedFilename")
spyOn(window, "setTimeout").andCallFake window.fakeSetTimeout
spyOn(window, "clearTimeout").andCallFake window.fakeClearTimeout
spyOn(pathwatcher.File.prototype, "detectResurrectionAfterDelay").andCallFake -> @detectResurrection()
spyOn(TextEditor.prototype, "shouldPromptToSave").andReturn false
@@ -204,10 +207,10 @@ jasmine.attachToDOM = (element) ->
deprecationsSnapshot = null
jasmine.snapshotDeprecations = ->
deprecationsSnapshot = Grim.getDeprecations() # suppress deprecations!!
deprecationsSnapshot = _.clone(Grim.deprecations)
jasmine.restoreDeprecationsSnapshot = ->
Grim.grimDeprecations = deprecationsSnapshot
Grim.deprecations = deprecationsSnapshot
addCustomMatchers = (spec) ->
spec.addMatchers
+104
Ver Arquivo
@@ -0,0 +1,104 @@
ChildProcess = require 'child_process'
{EventEmitter} = require 'events'
fs = require 'fs-plus'
path = require 'path'
temp = require 'temp'
SquirrelUpdate = require '../src/browser/squirrel-update'
describe "Windows squirrel updates", ->
tempHomeDirectory = null
beforeEach ->
# Prevent the actually home directory from being manipulated
tempHomeDirectory = temp.mkdirSync('atom-temp-home-')
spyOn(fs, 'getHomeDirectory').andReturn(tempHomeDirectory)
# Prevent any commands from actually running and affecting the host
originalSpawn = ChildProcess.spawn
spyOn(ChildProcess, 'spawn').andCallFake (command, args) ->
if path.basename(command) is 'Update.exe' and args?[0] is '--createShortcut'
fs.writeFileSync(path.join(tempHomeDirectory, 'Desktop', 'Atom.lnk'), '')
# Just spawn something that won't actually modify the host
if process.platform is 'win32'
originalSpawn('dir')
else
originalSpawn('ls')
it "ignores errors spawning Squirrel", ->
jasmine.unspy(ChildProcess, 'spawn')
spyOn(ChildProcess, 'spawn').andCallFake -> throw new Error("EBUSY")
app = quit: jasmine.createSpy('quit')
expect(SquirrelUpdate.handleStartupEvent(app, '--squirrel-install')).toBe true
waitsFor ->
app.quit.callCount is 1
it "quits the app on all squirrel events", ->
app = quit: jasmine.createSpy('quit')
expect(SquirrelUpdate.handleStartupEvent(app, '--squirrel-install')).toBe true
waitsFor ->
app.quit.callCount is 1
runs ->
app.quit.reset()
expect(SquirrelUpdate.handleStartupEvent(app, '--squirrel-updated')).toBe true
waitsFor ->
app.quit.callCount is 1
runs ->
app.quit.reset()
expect(SquirrelUpdate.handleStartupEvent(app, '--squirrel-uninstall')).toBe true
waitsFor ->
app.quit.callCount is 1
runs ->
app.quit.reset()
expect(SquirrelUpdate.handleStartupEvent(app, '--squirrel-obsolete')).toBe true
waitsFor ->
app.quit.callCount is 1
runs ->
expect(SquirrelUpdate.handleStartupEvent(app, '--not-squirrel')).toBe false
it "keeps the desktop shortcut deleted on updates if it was previously deleted after install", ->
desktopShortcutPath = path.join(tempHomeDirectory, 'Desktop', 'Atom.lnk')
expect(fs.existsSync(desktopShortcutPath)).toBe false
app = quit: jasmine.createSpy('quit')
expect(SquirrelUpdate.handleStartupEvent(app, '--squirrel-install')).toBe true
waitsFor ->
app.quit.callCount is 1
runs ->
app.quit.reset()
expect(fs.existsSync(desktopShortcutPath)).toBe true
fs.removeSync(desktopShortcutPath)
expect(fs.existsSync(desktopShortcutPath)).toBe false
expect(SquirrelUpdate.handleStartupEvent(app, '--squirrel-updated')).toBe true
waitsFor ->
app.quit.callCount is 1
runs ->
expect(fs.existsSync(desktopShortcutPath)).toBe false
describe ".restartAtom", ->
it "quits the app and spawns a new one", ->
app = new EventEmitter()
app.quit = jasmine.createSpy('quit')
SquirrelUpdate.restartAtom(app)
expect(app.quit.callCount).toBe 1
expect(ChildProcess.spawn.callCount).toBe 0
app.emit('will-quit')
expect(ChildProcess.spawn.callCount).toBe 1
expect(path.basename(ChildProcess.spawn.argsForCall[0][0])).toBe 'atom.cmd'
+9 -7
Ver Arquivo
@@ -53,14 +53,16 @@ describe "StyleManager", ->
expect(addEvents[0].getAttribute('source-path')).toBe '/foo/bar'
expect(addEvents[0].textContent).toBe "a {color: yellow;}"
describe "when a group parameter is specified", ->
it "inserts the stylesheet at the end of any existing stylesheets for the same group", ->
manager.addStyleSheet("a {color: red}", group: 'a')
manager.addStyleSheet("a {color: blue}", group: 'b')
manager.addStyleSheet("a {color: green}", group: 'a')
describe "when a priority parameter is specified", ->
it "inserts the style sheet based on the priority", ->
manager.addStyleSheet("a {color: red}", priority: 1)
manager.addStyleSheet("a {color: blue}", priority: 0)
manager.addStyleSheet("a {color: green}", priority: 2)
manager.addStyleSheet("a {color: yellow}", priority: 1)
expect(manager.getStyleElements().map (elt) -> elt.textContent).toEqual [
"a {color: red}"
"a {color: green}"
"a {color: blue}"
"a {color: red}"
"a {color: yellow}"
"a {color: green}"
]
+14 -7
Ver Arquivo
@@ -32,16 +32,18 @@ describe "StylesElement", ->
expect(element.children[initialChildCount].textContent).toBe "a {color: blue;}"
expect(removedStyleElements).toEqual [addedStyleElements[0]]
it "orders style elements by group", ->
it "orders style elements by priority", ->
initialChildCount = element.children.length
atom.styles.addStyleSheet("a {color: red}", group: 'a')
atom.styles.addStyleSheet("a {color: blue}", group: 'b')
atom.styles.addStyleSheet("a {color: green}", group: 'a')
atom.styles.addStyleSheet("a {color: red}", priority: 1)
atom.styles.addStyleSheet("a {color: blue}", priority: 0)
atom.styles.addStyleSheet("a {color: green}", priority: 2)
atom.styles.addStyleSheet("a {color: yellow}", priority: 1)
expect(element.children[initialChildCount].textContent).toBe "a {color: red}"
expect(element.children[initialChildCount + 1].textContent).toBe "a {color: green}"
expect(element.children[initialChildCount + 2].textContent).toBe "a {color: blue}"
expect(element.children[initialChildCount].textContent).toBe "a {color: blue}"
expect(element.children[initialChildCount + 1].textContent).toBe "a {color: red}"
expect(element.children[initialChildCount + 2].textContent).toBe "a {color: yellow}"
expect(element.children[initialChildCount + 3].textContent).toBe "a {color: green}"
it "updates existing style nodes when style elements are updated", ->
initialChildCount = element.children.length
@@ -105,3 +107,8 @@ describe "StylesElement", ->
document.querySelector('#jasmine-content').appendChild(element)
expect(element.firstChild.sheet.cssRules[0].selectorText).toBe ':host'
it "does not throw exceptions on rules with no selectors", ->
atom.styles.addStyleSheet """
@media screen {font-size: 10px;}
""", context: 'atom-text-editor'
+23
Ver Arquivo
@@ -20,3 +20,26 @@ describe "Task", ->
expect(handlerResult).toBe 'hello'
expect(childProcess.kill).toHaveBeenCalled()
expect(processErrored).toBe false
it "calls listeners registered with ::on when events are emitted in the task", ->
task = new Task(require.resolve('./fixtures/task-spec-handler'))
eventSpy = jasmine.createSpy('eventSpy')
task.on("some-event", eventSpy)
waitsFor (done) -> task.start(done)
runs ->
expect(eventSpy).toHaveBeenCalledWith(1, 2, 3)
it "unregisters listeners when the Disposable returned by ::on is disposed", ->
task = new Task(require.resolve('./fixtures/task-spec-handler'))
eventSpy = jasmine.createSpy('eventSpy')
disposable = task.on("some-event", eventSpy)
disposable.dispose()
waitsFor (done) -> task.start(done)
runs ->
expect(eventSpy).not.toHaveBeenCalled()
+103 -64
Ver Arquivo
@@ -429,7 +429,7 @@ describe "TextEditorComponent", ->
it "excludes the null byte from character measurement", ->
editor.setText("a\0b")
nextAnimationFrame()
expect(editor.pixelPositionForScreenPosition([0, Infinity]).left).toEqual 2 * charWidth
expect(wrapperNode.pixelPositionForScreenPosition([0, Infinity]).left).toEqual 2 * charWidth
describe "when there is a fold", ->
it "renders a fold marker on the folded line", ->
@@ -552,14 +552,29 @@ describe "TextEditorComponent", ->
nextAnimationFrame()
expect(lineNumbersNode.style.backgroundColor).toBe 'rgb(255, 0, 0)'
describe "when the editor.showLineNumbers config is false", ->
it "doesn't render any line numbers", ->
expect(component.refs.gutter).toBeDefined()
atom.config.set("editor.showLineNumbers", false)
expect(component.refs.gutter).not.toBeDefined()
atom.config.set("editor.showLineNumbers", true)
expect(component.refs.gutter).toBeDefined()
expect(component.lineNumberNodeForScreenRow(3)).toBeDefined()
it "hides or shows the gutter based on the '::isGutterVisible' property on the model and the global 'editor.showLineNumbers' config setting", ->
expect(component.refs.gutter?).toBe true
editor.setGutterVisible(false)
nextAnimationFrame()
expect(component.refs.gutter?).toBe false
atom.config.set("editor.showLineNumbers", false)
expect(nextAnimationFrame).toBe noAnimationFrame
expect(component.refs.gutter?).toBe false
editor.setGutterVisible(true)
expect(nextAnimationFrame).toBe noAnimationFrame
expect(component.refs.gutter?).toBe false
atom.config.set("editor.showLineNumbers", true)
nextAnimationFrame()
expect(component.refs.gutter?).toBe true
expect(component.lineNumberNodeForScreenRow(3)?).toBe true
describe "fold decorations", ->
describe "rendering fold decorations", ->
@@ -755,7 +770,6 @@ describe "TextEditorComponent", ->
expect(cursorNode.offsetWidth).toBe charWidth
it "blinks cursors when they aren't moving", ->
spyOn(_._, 'now').andCallFake -> window.now # Ensure _.debounce is based on our fake spec timeline
cursorsNode = componentNode.querySelector('.cursors')
expect(cursorsNode.classList.contains('blink-off')).toBe false
@@ -802,7 +816,7 @@ describe "TextEditorComponent", ->
nextAnimationFrame()
cursorNode = componentNode.querySelector('.cursor')
{left} = editor.pixelPositionForScreenPosition([1, 10])
{left} = wrapperNode.pixelPositionForScreenPosition([1, 10])
expect(cursorNode.style['-webkit-transform']).toBe "translate(#{left}px, #{editor.getLineHeightInPixels()}px)"
describe "selection rendering", ->
@@ -896,7 +910,7 @@ describe "TextEditorComponent", ->
nextAnimationFrame()
selectionNode = componentNode.querySelector('.region')
expect(selectionNode.offsetTop).toBe editor.getLineHeightInPixels()
expect(selectionNode.offsetLeft).toBe editor.pixelPositionForScreenPosition([1, 6]).left
expect(selectionNode.offsetLeft).toBe wrapperNode.pixelPositionForScreenPosition([1, 6]).left
it "will flash the selection when flash:true is passed to editor::setSelectedBufferRange", ->
editor.setSelectedBufferRange([[1, 6], [1, 10]], flash: true)
@@ -1231,7 +1245,7 @@ describe "TextEditorComponent", ->
decoration = editor.decorateMarker(marker, {type: 'overlay', item})
nextAnimationFrame()
position = editor.pixelPositionForBufferPosition([2, 5])
position = wrapperNode.pixelPositionForBufferPosition([2, 5])
overlay = component.getTopmostDOMNode().querySelector('atom-overlay')
expect(overlay.style.left).toBe position.left + 'px'
@@ -1241,7 +1255,7 @@ describe "TextEditorComponent", ->
editor.moveRight()
nextAnimationFrame()
position = editor.pixelPositionForBufferPosition([2, 7])
position = wrapperNode.pixelPositionForBufferPosition([2, 7])
expect(overlay.style.left).toBe position.left + 'px'
expect(overlay.style.top).toBe position.top + editor.getLineHeightInPixels() + 'px'
@@ -1252,7 +1266,7 @@ describe "TextEditorComponent", ->
decoration = editor.decorateMarker(marker, {type: 'overlay', item})
nextAnimationFrame()
position = editor.pixelPositionForBufferPosition([2, 10])
position = wrapperNode.pixelPositionForBufferPosition([2, 10])
overlay = component.getTopmostDOMNode().querySelector('atom-overlay')
expect(overlay.style.left).toBe position.left + 'px'
@@ -1263,7 +1277,7 @@ describe "TextEditorComponent", ->
decoration = editor.decorateMarker(marker, {type: 'overlay', item})
nextAnimationFrame()
position = editor.pixelPositionForBufferPosition([2, 5])
position = wrapperNode.pixelPositionForBufferPosition([2, 5])
overlay = component.getTopmostDOMNode().querySelector('atom-overlay')
expect(overlay.style.left).toBe position.left + 'px'
@@ -1274,7 +1288,7 @@ describe "TextEditorComponent", ->
decoration = editor.decorateMarker(marker, {type: 'overlay', position: 'tail', item})
nextAnimationFrame()
position = editor.pixelPositionForBufferPosition([2, 5])
position = wrapperNode.pixelPositionForBufferPosition([2, 5])
overlay = component.getTopmostDOMNode().querySelector('atom-overlay')
expect(overlay.style.left).toBe position.left + 'px'
@@ -1304,7 +1318,7 @@ describe "TextEditorComponent", ->
decoration = editor.decorateMarker(marker, {type: 'overlay', item})
nextAnimationFrame()
position = editor.pixelPositionForBufferPosition([0, 26])
position = wrapperNode.pixelPositionForBufferPosition([0, 26])
overlay = component.getTopmostDOMNode().querySelector('atom-overlay')
expect(overlay.style.left).toBe position.left + 'px'
@@ -1313,7 +1327,7 @@ describe "TextEditorComponent", ->
editor.insertText('a')
nextAnimationFrame()
position = editor.pixelPositionForBufferPosition([0, 27])
position = wrapperNode.pixelPositionForBufferPosition([0, 27])
expect(overlay.style.left).toBe position.left - itemWidth + 'px'
expect(overlay.style.top).toBe position.top + editor.getLineHeightInPixels() + 'px'
@@ -1323,7 +1337,7 @@ describe "TextEditorComponent", ->
decoration = editor.decorateMarker(marker, {type: 'overlay', item})
nextAnimationFrame()
position = editor.pixelPositionForBufferPosition([4, 0])
position = wrapperNode.pixelPositionForBufferPosition([4, 0])
overlay = component.getTopmostDOMNode().querySelector('atom-overlay')
expect(overlay.style.left).toBe position.left + 'px'
@@ -1332,7 +1346,7 @@ describe "TextEditorComponent", ->
editor.insertNewline()
nextAnimationFrame()
position = editor.pixelPositionForBufferPosition([5, 0])
position = wrapperNode.pixelPositionForBufferPosition([5, 0])
expect(overlay.style.left).toBe position.left + 'px'
expect(overlay.style.top).toBe position.top - itemHeight + 'px'
@@ -1354,7 +1368,7 @@ describe "TextEditorComponent", ->
decoration = editor.decorateMarker(marker, {type: 'overlay', item})
nextAnimationFrame()
position = editor.pixelPositionForBufferPosition([0, 2])
position = wrapperNode.pixelPositionForBufferPosition([0, 2])
overlay = component.getTopmostDOMNode().querySelector('atom-overlay')
expect(overlay.style.left).toBe position.left + 'px'
@@ -1363,7 +1377,7 @@ describe "TextEditorComponent", ->
editor.insertText('a')
nextAnimationFrame()
position = editor.pixelPositionForBufferPosition([0, 3])
position = wrapperNode.pixelPositionForBufferPosition([0, 3])
expect(overlay.style.left).toBe position.left + 'px'
expect(overlay.style.top).toBe position.top + editor.getLineHeightInPixels() + 'px'
@@ -1373,7 +1387,7 @@ describe "TextEditorComponent", ->
decoration = editor.decorateMarker(marker, {type: 'overlay', item})
nextAnimationFrame()
position = editor.pixelPositionForBufferPosition([1, 0])
position = wrapperNode.pixelPositionForBufferPosition([1, 0])
overlay = component.getTopmostDOMNode().querySelector('atom-overlay')
expect(overlay.style.left).toBe position.left + 'px'
@@ -1382,7 +1396,7 @@ describe "TextEditorComponent", ->
editor.insertNewline()
nextAnimationFrame()
position = editor.pixelPositionForBufferPosition([2, 0])
position = wrapperNode.pixelPositionForBufferPosition([2, 0])
expect(overlay.style.left).toBe position.left + 'px'
expect(overlay.style.top).toBe position.top + editor.getLineHeightInPixels() + 'px'
@@ -1395,7 +1409,7 @@ describe "TextEditorComponent", ->
decoration = editor.decorateMarker(marker, {type: 'overlay', item})
nextAnimationFrame()
position = editor.pixelPositionForBufferPosition([0, 28])
position = wrapperNode.pixelPositionForBufferPosition([0, 28])
overlay = component.getTopmostDOMNode().querySelector('atom-overlay')
expect(overlay.style.left).toBe position.left + 'px'
@@ -1404,7 +1418,7 @@ describe "TextEditorComponent", ->
editor.insertText('a')
nextAnimationFrame()
position = editor.pixelPositionForBufferPosition([0, 29])
position = wrapperNode.pixelPositionForBufferPosition([0, 29])
expect(overlay.style.left).toBe position.left - itemWidth + 'px'
expect(overlay.style.top).toBe position.top + editor.getLineHeightInPixels() + 'px'
@@ -1415,7 +1429,7 @@ describe "TextEditorComponent", ->
decoration = editor.decorateMarker(marker, {type: 'overlay', item})
nextAnimationFrame()
position = editor.pixelPositionForBufferPosition([6, 0])
position = wrapperNode.pixelPositionForBufferPosition([6, 0])
overlay = component.getTopmostDOMNode().querySelector('atom-overlay')
expect(overlay.style.left).toBe position.left + 'px'
@@ -1424,7 +1438,7 @@ describe "TextEditorComponent", ->
editor.insertNewline()
nextAnimationFrame()
position = editor.pixelPositionForBufferPosition([7, 0])
position = wrapperNode.pixelPositionForBufferPosition([7, 0])
expect(overlay.style.left).toBe position.left + 'px'
expect(overlay.style.top).toBe position.top - itemHeight + 'px'
@@ -1612,6 +1626,22 @@ describe "TextEditorComponent", ->
expect(nextAnimationFrame).toBe noAnimationFrame
expect(editor.getSelectedScreenRange()).toEqual [[2, 4], [6, 8]]
describe "when the editor is destroyed while dragging", ->
it "cleans up the handlers for window.mouseup and window.mousemove", ->
linesNode.dispatchEvent(buildMouseEvent('mousedown', clientCoordinatesForScreenPosition([2, 4]), which: 1))
linesNode.dispatchEvent(buildMouseEvent('mousemove', clientCoordinatesForScreenPosition([6, 8]), which: 1))
nextAnimationFrame()
spyOn(window, 'removeEventListener').andCallThrough()
linesNode.dispatchEvent(buildMouseEvent('mousemove', clientCoordinatesForScreenPosition([6, 10]), which: 1))
editor.destroy()
nextAnimationFrame()
call.args.pop() for call in window.removeEventListener.calls
expect(window.removeEventListener).toHaveBeenCalledWith('mouseup')
expect(window.removeEventListener).toHaveBeenCalledWith('mousemove')
describe "when a line is folded", ->
beforeEach ->
editor.foldBufferRow 4
@@ -1908,7 +1938,8 @@ describe "TextEditorComponent", ->
}
""", context: 'atom-text-editor'
nextAnimationFrame()
nextAnimationFrame() # handle stylesheet change event
nextAnimationFrame() # perform requested update
scrollbarCornerNode = componentNode.querySelector('.scrollbar-corner')
expect(verticalScrollbarNode.offsetWidth).toBe 8
@@ -2031,8 +2062,6 @@ describe "TextEditorComponent", ->
expect(component.mouseWheelScreenRow).toBe null
it "clears the mouseWheelScreenRow after a delay even if the event does not cause scrolling", ->
spyOn(_._, 'now').andCallFake -> window.now # Ensure _.debounce is based on our fake spec timeline
expect(editor.getScrollTop()).toBe 0
lineNode = componentNode.querySelector('.line')
@@ -2488,7 +2517,8 @@ describe "TextEditorComponent", ->
describe "when the 'mini' property is true", ->
beforeEach ->
component.setProps(mini: true)
editor.setMini(true)
nextAnimationFrame()
it "does not render the gutter", ->
expect(componentNode.querySelector('.gutter')).toBeNull()
@@ -2576,9 +2606,9 @@ describe "TextEditorComponent", ->
describe 'soft wrap settings', ->
beforeEach ->
atom.config.set '.source.coffee', 'editor.softWrap', true
atom.config.set '.source.coffee', 'editor.preferredLineLength', 17
atom.config.set '.source.coffee', 'editor.softWrapAtPreferredLineLength', true
atom.config.set 'editor.softWrap', true, scopeSelector: '.source.coffee'
atom.config.set 'editor.preferredLineLength', 17, scopeSelector: '.source.coffee'
atom.config.set 'editor.softWrapAtPreferredLineLength', true, scopeSelector: '.source.coffee'
editor.setEditorWidthInChars(20)
coffeeEditor.setEditorWidthInChars(20)
@@ -2588,18 +2618,18 @@ describe "TextEditorComponent", ->
expect(coffeeEditor.lineTextForScreenRow(3)).toEqual ' return items '
it 'updates the wrapped lines when editor.preferredLineLength changes', ->
atom.config.set '.source.coffee', 'editor.preferredLineLength', 20
atom.config.set 'editor.preferredLineLength', 20, scopeSelector: '.source.coffee'
expect(coffeeEditor.lineTextForScreenRow(2)).toEqual ' return items if '
it 'updates the wrapped lines when editor.softWrapAtPreferredLineLength changes', ->
atom.config.set '.source.coffee', 'editor.softWrapAtPreferredLineLength', false
atom.config.set 'editor.softWrapAtPreferredLineLength', false, scopeSelector: '.source.coffee'
expect(coffeeEditor.lineTextForScreenRow(2)).toEqual ' return items if '
it 'updates the wrapped lines when editor.softWrap changes', ->
atom.config.set '.source.coffee', 'editor.softWrap', false
atom.config.set 'editor.softWrap', false, scopeSelector: '.source.coffee'
expect(coffeeEditor.lineTextForScreenRow(2)).toEqual ' return items if items.length <= 1'
atom.config.set '.source.coffee', 'editor.softWrap', true
atom.config.set 'editor.softWrap', true, scopeSelector: '.source.coffee'
expect(coffeeEditor.lineTextForScreenRow(3)).toEqual ' return items '
it 'updates the wrapped lines when the grammar changes', ->
@@ -2627,11 +2657,11 @@ describe "TextEditorComponent", ->
tab: 'F'
cr: 'E'
atom.config.set '.source.js', 'editor.showInvisibles', true
atom.config.set '.source.js', 'editor.invisibles', jsInvisibles
atom.config.set 'editor.showInvisibles', true, scopeSelector: '.source.js'
atom.config.set 'editor.invisibles', jsInvisibles, scopeSelector: '.source.js'
atom.config.set '.source.coffee', 'editor.showInvisibles', false
atom.config.set '.source.coffee', 'editor.invisibles', coffeeInvisibles
atom.config.set 'editor.showInvisibles', false, scopeSelector: '.source.coffee'
atom.config.set 'editor.invisibles', coffeeInvisibles, scopeSelector: '.source.coffee'
editor.setText " a line with tabs\tand spaces \n"
nextAnimationFrame()
@@ -2647,7 +2677,7 @@ describe "TextEditorComponent", ->
it "re-renders the invisibles when the invisible settings change", ->
jsGrammar = editor.getGrammar()
editor.setGrammar(coffeeEditor.getGrammar())
atom.config.set '.source.coffee', 'editor.showInvisibles', true
atom.config.set 'editor.showInvisibles', true, scopeSelector: '.source.coffee'
nextAnimationFrame()
expect(component.lineNodeForScreenRow(0).textContent).toBe "#{coffeeInvisibles.space}a line with tabs#{coffeeInvisibles.tab}and spaces#{coffeeInvisibles.space}#{coffeeInvisibles.eol}"
@@ -2656,7 +2686,7 @@ describe "TextEditorComponent", ->
space: 'E'
tab: 'W'
cr: 'I'
atom.config.set '.source.coffee', 'editor.invisibles', newInvisibles
atom.config.set 'editor.invisibles', newInvisibles, scopeSelector: '.source.coffee'
nextAnimationFrame()
expect(component.lineNodeForScreenRow(0).textContent).toBe "#{newInvisibles.space}a line with tabs#{newInvisibles.tab}and spaces#{newInvisibles.space}#{newInvisibles.eol}"
@@ -2666,8 +2696,8 @@ describe "TextEditorComponent", ->
describe 'editor.showIndentGuide', ->
beforeEach ->
atom.config.set '.source.js', 'editor.showIndentGuide', true
atom.config.set '.source.coffee', 'editor.showIndentGuide', false
atom.config.set 'editor.showIndentGuide', true, scopeSelector: '.source.js'
atom.config.set 'editor.showIndentGuide', false, scopeSelector: '.source.coffee'
it "has an 'indent-guide' class when scoped editor.showIndentGuide is true, but not when scoped editor.showIndentGuide is false", ->
line1LeafNodes = getLeafNodes(component.lineNodeForScreenRow(1))
@@ -2688,7 +2718,7 @@ describe "TextEditorComponent", ->
expect(line1LeafNodes[0].classList.contains('indent-guide')).toBe true
expect(line1LeafNodes[1].classList.contains('indent-guide')).toBe false
atom.config.set '.source.js', 'editor.showIndentGuide', false
atom.config.set 'editor.showIndentGuide', false, scopeSelector: '.source.js'
line1LeafNodes = getLeafNodes(component.lineNodeForScreenRow(1))
expect(line1LeafNodes[0].textContent).toBe ' '
@@ -2696,26 +2726,35 @@ describe "TextEditorComponent", ->
expect(line1LeafNodes[1].classList.contains('indent-guide')).toBe false
describe "middle mouse paste on Linux", ->
it "pastes the previously selected text", ->
originalPlatform = null
beforeEach ->
originalPlatform = process.platform
Object.defineProperty process, 'platform', value: 'linux'
afterEach ->
Object.defineProperty process, 'platform', value: originalPlatform
it "pastes the previously selected text at the clicked location", ->
jasmine.unspy(window, 'setTimeout')
clipboardWrittenTo = false
spyOn(require('ipc'), 'send').andCallFake (eventName, selectedText) ->
if eventName is 'write-text-to-selection-clipboard'
require('clipboard').writeText(selectedText, 'selection')
clipboardWrittenTo = true
atom.clipboard.write('')
component.listenForMiddleMousePaste()
editor.setCursorBufferPosition([10, 0])
componentNode.querySelector('.scroll-view').dispatchEvent(buildMouseEvent('mouseup', which: 2))
expect(atom.clipboard.read()).toBe ''
expect(editor.lineTextForBufferRow(10)).toBe ''
component.trackSelectionClipboard()
editor.setSelectedBufferRange([[1, 6], [1, 10]])
editor.setCursorBufferPosition([10, 0])
componentNode.querySelector('.scroll-view').dispatchEvent(buildMouseEvent('mouseup', which: 2))
expect(atom.clipboard.read()).toBe 'sort'
expect(editor.lineTextForBufferRow(10)).toBe 'sort'
waitsFor ->
clipboardWrittenTo
runs ->
componentNode.querySelector('.scroll-view').dispatchEvent(buildMouseEvent('mousedown', clientCoordinatesForScreenPosition([10, 0]), button: 1))
componentNode.querySelector('.scroll-view').dispatchEvent(buildMouseEvent('mouseup', clientCoordinatesForScreenPosition([10, 0]), which: 2))
expect(atom.clipboard.read()).toBe 'sort'
expect(editor.lineTextForBufferRow(10)).toBe 'sort'
buildMouseEvent = (type, properties...) ->
properties = extend({bubbles: true, cancelable: true}, properties...)
@@ -2728,14 +2767,14 @@ describe "TextEditorComponent", ->
event
clientCoordinatesForScreenPosition = (screenPosition) ->
positionOffset = editor.pixelPositionForScreenPosition(screenPosition)
positionOffset = wrapperNode.pixelPositionForScreenPosition(screenPosition)
scrollViewClientRect = componentNode.querySelector('.scroll-view').getBoundingClientRect()
clientX = scrollViewClientRect.left + positionOffset.left - editor.getScrollLeft()
clientY = scrollViewClientRect.top + positionOffset.top - editor.getScrollTop()
{clientX, clientY}
clientCoordinatesForScreenRowInGutter = (screenRow) ->
positionOffset = editor.pixelPositionForScreenPosition([screenRow, 1])
positionOffset = wrapperNode.pixelPositionForScreenPosition([screenRow, 1])
gutterClientRect = componentNode.querySelector('.gutter').getBoundingClientRect()
clientX = gutterClientRect.left + positionOffset.left - editor.getScrollLeft()
clientY = gutterClientRect.top + positionOffset.top - editor.getScrollTop()
+88 -3
Ver Arquivo
@@ -10,16 +10,26 @@ describe "TextEditorElement", ->
jasmineContent = document.body.querySelector('#jasmine-content')
describe "instantiation", ->
it "honors the mini attribute", ->
it "honors the 'mini' attribute", ->
jasmineContent.innerHTML = "<atom-text-editor mini>"
element = jasmineContent.firstChild
expect(element.getModel().isMini()).toBe true
it "honors the placeholder-text attribute", ->
it "honors the 'placeholder-text' attribute", ->
jasmineContent.innerHTML = "<atom-text-editor placeholder-text='testing'>"
element = jasmineContent.firstChild
expect(element.getModel().getPlaceholderText()).toBe 'testing'
it "honors the 'gutter-hidden' attribute", ->
jasmineContent.innerHTML = "<atom-text-editor gutter-hidden>"
element = jasmineContent.firstChild
expect(element.getModel().isGutterVisible()).toBe false
it "honors the text content", ->
jasmineContent.innerHTML = "<atom-text-editor>testing</atom-text-editor>"
element = jasmineContent.firstChild
expect(element.getModel().getText()).toBe 'testing'
describe "when the model is assigned", ->
it "adds the 'mini' attribute if .isMini() returns true on the model", ->
element = new TextEditorElement
@@ -27,6 +37,34 @@ describe "TextEditorElement", ->
element.setModel(model)
expect(element.hasAttribute('mini')).toBe true
describe "when the editor is attached to the DOM", ->
describe "when the editor.useShadowDOM config option is true", ->
it "mounts the react component and unmounts when removed from the dom", ->
atom.config.set('editor.useShadowDOM', true)
element = new TextEditorElement
jasmine.attachToDOM(element)
component = element.component
expect(component.isMounted()).toBe true
element.remove()
expect(component.isMounted()).toBe false
jasmine.attachToDOM(element)
expect(element.component.isMounted()).toBe true
describe "when the editor.useShadowDOM config option is false", ->
it "mounts the react component and unmounts when removed from the dom", ->
atom.config.set('editor.useShadowDOM', false)
element = new TextEditorElement
jasmine.attachToDOM(element)
component = element.component
expect(component.isMounted()).toBe true
element.getModel().destroy()
expect(component.isMounted()).toBe false
describe "focus and blur handling", ->
describe "when the editor.useShadowDOM config option is true", ->
it "proxies focus/blur events to/from the hidden input inside the shadow root", ->
@@ -65,6 +103,22 @@ describe "TextEditorElement", ->
document.body.focus()
expect(blurCalled).toBe true
describe "when focused while a parent node is being attached to the DOM", ->
class ElementThatFocusesChild extends HTMLDivElement
attachedCallback: ->
@firstChild.focus()
document.registerElement("element-that-focuses-child",
prototype: ElementThatFocusesChild.prototype
)
it "proxies the focus event to the hidden input", ->
element = new TextEditorElement
parentElement = document.createElement("element-that-focuses-child")
parentElement.appendChild(element)
jasmineContent.appendChild(parentElement)
expect(element.shadowRoot.activeElement).toBe element.shadowRoot.querySelector('input')
describe "when the themes finish loading", ->
[themeReloadCallback, initialThemeLoadComplete, element] = []
@@ -74,7 +128,7 @@ describe "TextEditorElement", ->
spyOn(atom.themes, 'isInitialLoadComplete').andCallFake ->
initialThemeLoadComplete
spyOn(atom.themes, 'onDidReloadAll').andCallFake (fn) ->
spyOn(atom.themes, 'onDidChangeActiveThemes').andCallFake (fn) ->
themeReloadCallback = fn
atom.config.set("editor.useShadowDOM", false)
@@ -99,6 +153,27 @@ describe "TextEditorElement", ->
scrollbarWidth = verticalScrollbarNode.offsetWidth - verticalScrollbarNode.clientWidth
expect(scrollbarWidth).toEqual(8)
describe "::onDidAttach and ::onDidDetach", ->
it "invokes callbacks when the element is attached and detached", ->
element = new TextEditorElement
attachedCallback = jasmine.createSpy("attachedCallback")
detachedCallback = jasmine.createSpy("detachedCallback")
element.onDidAttach(attachedCallback)
element.onDidDetach(detachedCallback)
jasmine.attachToDOM(element)
expect(attachedCallback).toHaveBeenCalled()
expect(detachedCallback).not.toHaveBeenCalled()
attachedCallback.reset()
element.remove()
expect(attachedCallback).not.toHaveBeenCalled()
expect(detachedCallback).toHaveBeenCalled()
describe "::setUpdatedSynchronously", ->
it "controls whether the text editor is updated synchronously", ->
spyOn(window, 'requestAnimationFrame').andCallFake (fn) -> fn()
@@ -119,3 +194,13 @@ describe "TextEditorElement", ->
element.getModel().setText("goodbye")
expect(window.requestAnimationFrame).not.toHaveBeenCalled()
expect(element.shadowRoot.textContent).toContain "goodbye"
describe "::getDefaultCharacterWidth", ->
it "returns null before the element is attached", ->
element = new TextEditorElement
expect(element.getDefaultCharacterWidth()).toBeNull()
it "returns the width of a character in the root scope", ->
element = new TextEditorElement
jasmine.attachToDOM(element)
expect(element.getDefaultCharacterWidth()).toBeGreaterThan(0)
+59 -14
Ver Arquivo
@@ -62,7 +62,6 @@ describe "TextEditor", ->
atom.workspace.open('sample.less', initialLine: 5).then (o) -> editor = o
runs ->
buffer = editor.buffer
expect(editor.getLastCursor().getBufferPosition().row).toEqual 5
expect(editor.getLastCursor().getBufferPosition().column).toEqual 0
@@ -74,10 +73,37 @@ describe "TextEditor", ->
atom.workspace.open('sample.less', initialColumn: 8).then (o) -> editor = o
runs ->
buffer = editor.buffer
expect(editor.getLastCursor().getBufferPosition().row).toEqual 0
expect(editor.getLastCursor().getBufferPosition().column).toEqual 8
describe "when the editor is reopened with an initialLine option", ->
it "positions the cursor on the specified line", ->
editor = null
waitsForPromise ->
atom.workspace.open('sample.less', initialLine: 5).then (o) -> editor = o
waitsForPromise ->
atom.workspace.open('sample.less', initialLine: 4).then (o) -> editor = o
runs ->
expect(editor.getLastCursor().getBufferPosition().row).toEqual 4
expect(editor.getLastCursor().getBufferPosition().column).toEqual 0
describe "when the editor is reopened with an initialColumn option", ->
it "positions the cursor on the specified column", ->
editor = null
waitsForPromise ->
atom.workspace.open('sample.less', initialColumn: 8).then (o) -> editor = o
waitsForPromise ->
atom.workspace.open('sample.less', initialColumn: 7).then (o) -> editor = o
runs ->
expect(editor.getLastCursor().getBufferPosition().row).toEqual 0
expect(editor.getLastCursor().getBufferPosition().column).toEqual 7
describe ".copy()", ->
it "returns a different edit session with the same initial state", ->
editor.setSelectedBufferRange([[1, 2], [3, 4]])
@@ -192,12 +218,18 @@ describe "TextEditor", ->
expect(editor.getCursorBufferPosition()).toEqual [1, 1]
it "emits an event with the old position, new position, and the cursor that moved", ->
editor.onDidChangeCursorPosition positionChangedHandler = jasmine.createSpy()
cursorCallback = jasmine.createSpy('cursor-changed-position')
editorCallback = jasmine.createSpy('editor-changed-cursor-position')
editor.getLastCursor().onDidChangePosition(cursorCallback)
editor.onDidChangeCursorPosition(editorCallback)
editor.setCursorBufferPosition([2, 4])
expect(positionChangedHandler).toHaveBeenCalled()
eventObject = positionChangedHandler.mostRecentCall.args[0]
expect(editorCallback).toHaveBeenCalled()
expect(cursorCallback).toHaveBeenCalled()
eventObject = editorCallback.mostRecentCall.args[0]
expect(cursorCallback.mostRecentCall.args[0]).toEqual(eventObject)
expect(eventObject.oldBufferPosition).toEqual [0, 0]
expect(eventObject.oldScreenPosition).toEqual [0, 0]
@@ -912,6 +944,15 @@ describe "TextEditor", ->
editor.undo()
expect(editor.getScrollTop()).toBe 0
describe '.logCursorScope()', ->
beforeEach ->
spyOn(atom.notifications, 'addInfo')
it 'opens a notification', ->
editor.logCursorScope()
expect(atom.notifications.addInfo).toHaveBeenCalled()
describe "selection", ->
selection = null
@@ -1321,7 +1362,7 @@ describe "TextEditor", ->
coffeeEditor.selectWordsContainingCursors()
expect(coffeeEditor.getSelectedBufferRange()).toEqual [[0, 6], [0, 15]]
atom.config.set '.source.coffee', 'editor.nonWordCharacters', 'qusort'
atom.config.set 'editor.nonWordCharacters', 'qusort', scopeSelector: '.source.coffee'
coffeeEditor.setCursorBufferPosition [0, 9]
coffeeEditor.selectWordsContainingCursors()
@@ -3270,7 +3311,7 @@ describe "TextEditor", ->
atom.packages.unloadPackages()
it 'returns correct values based on the scope of the set grammars', ->
atom.config.set '.source.coffee', 'editor.tabLength', 6
atom.config.set 'editor.tabLength', 6, scopeSelector: '.source.coffee'
expect(editor.getTabLength()).toBe 2
expect(coffeeEditor.getTabLength()).toBe 6
@@ -3292,12 +3333,12 @@ describe "TextEditor", ->
expect(editor.getTabLength()).toBe 2
expect(editor.tokenizedLineForScreenRow(5).tokens[0].firstNonWhitespaceIndex).toBe 2
atom.config.set '.source.js', 'editor.tabLength', 6
atom.config.set 'editor.tabLength', 6, scopeSelector: '.source.js'
expect(editor.getTabLength()).toBe 6
expect(editor.tokenizedLineForScreenRow(5).tokens[0].firstNonWhitespaceIndex).toBe 6
it 'updates the tab length when the grammar changes', ->
atom.config.set '.source.coffee', 'editor.tabLength', 6
atom.config.set 'editor.tabLength', 6, scopeSelector: '.source.coffee'
expect(editor.getTabLength()).toBe 2
expect(editor.tokenizedLineForScreenRow(5).tokens[0].firstNonWhitespaceIndex).toBe 2
@@ -3414,11 +3455,11 @@ describe "TextEditor", ->
describe "when the cursor is before whitespace", ->
it "retains the whitespace following the cursor on the new line", ->
editor.setText(" var sort = function() {}")
editor.setCursorScreenPosition([0, 23])
editor.setCursorScreenPosition([0, 12])
editor.insertNewline()
expect(buffer.lineForRow(0)).toBe ' var sort = function()'
expect(buffer.lineForRow(1)).toBe ' {}'
expect(buffer.lineForRow(0)).toBe ' var sort ='
expect(buffer.lineForRow(1)).toBe ' function() {}'
expect(editor.getCursorScreenPosition()).toEqual [1, 2]
describe "when inserted text matches a decrease indent pattern", ->
@@ -3467,8 +3508,8 @@ describe "TextEditor", ->
atom.project.open('coffee.coffee', autoIndent: false).then (o) -> coffeeEditor = o
runs ->
atom.config.set('.source.js', 'editor.autoIndent', true)
atom.config.set('.source.coffee', 'editor.autoIndent', false)
atom.config.set('editor.autoIndent', true, scopeSelector: '.source.js')
atom.config.set('editor.autoIndent', false, scopeSelector: '.source.coffee')
afterEach: ->
atom.packages.deactivatePackages()
@@ -3760,8 +3801,12 @@ describe "TextEditor", ->
it "updates the grammar based on grammar overrides", ->
expect(editor.getGrammar().name).toBe 'JavaScript'
atom.grammars.setGrammarOverrideForPath(editor.getPath(), 'source.coffee')
callback = jasmine.createSpy('callback')
editor.onDidChangeGrammar(callback)
editor.reloadGrammar()
expect(editor.getGrammar().name).toBe 'CoffeeScript'
expect(callback.callCount).toBe 1
expect(callback.argsForCall[0][0]).toBe atom.grammars.grammarForScopeName('source.coffee')
describe "when the editor's grammar has an injection selector", ->
beforeEach ->
+58 -54
Ver Arquivo
@@ -73,65 +73,90 @@ describe "ThemeManager", ->
describe "when the core.themes config value changes", ->
it "add/removes stylesheets to reflect the new config value", ->
themeManager.onDidReloadAll reloadHandler = jasmine.createSpy()
themeManager.onDidChangeActiveThemes didChangeActiveThemesHandler = jasmine.createSpy()
spyOn(atom.styles, 'getUserStyleSheetPath').andCallFake -> null
waitsForPromise ->
themeManager.activateThemes()
runs ->
reloadHandler.reset()
didChangeActiveThemesHandler.reset()
atom.config.set('core.themes', [])
waitsFor ->
reloadHandler.callCount == 1
didChangeActiveThemesHandler.callCount == 1
runs ->
reloadHandler.reset()
didChangeActiveThemesHandler.reset()
expect($('style.theme')).toHaveLength 0
atom.config.set('core.themes', ['atom-dark-ui'])
waitsFor ->
reloadHandler.callCount == 1
didChangeActiveThemesHandler.callCount == 1
runs ->
reloadHandler.reset()
expect($('style[group=theme]')).toHaveLength 2
expect($('style[group=theme]:eq(0)').attr('source-path')).toMatch /atom-dark-ui/
didChangeActiveThemesHandler.reset()
expect($('style[priority=1]')).toHaveLength 2
expect($('style[priority=1]:eq(0)').attr('source-path')).toMatch /atom-dark-ui/
atom.config.set('core.themes', ['atom-light-ui', 'atom-dark-ui'])
waitsFor ->
reloadHandler.callCount == 1
didChangeActiveThemesHandler.callCount == 1
runs ->
reloadHandler.reset()
expect($('style[group=theme]')).toHaveLength 2
expect($('style[group=theme]:eq(0)').attr('source-path')).toMatch /atom-dark-ui/
expect($('style[group=theme]:eq(1)').attr('source-path')).toMatch /atom-light-ui/
didChangeActiveThemesHandler.reset()
expect($('style[priority=1]')).toHaveLength 2
expect($('style[priority=1]:eq(0)').attr('source-path')).toMatch /atom-dark-ui/
expect($('style[priority=1]:eq(1)').attr('source-path')).toMatch /atom-light-ui/
atom.config.set('core.themes', [])
waitsFor ->
reloadHandler.callCount == 1
didChangeActiveThemesHandler.callCount == 1
runs ->
reloadHandler.reset()
expect($('style[group=theme]')).toHaveLength 2
didChangeActiveThemesHandler.reset()
expect($('style[priority=1]')).toHaveLength 2
# atom-dark-ui has an directory path, the syntax one doesn't
atom.config.set('core.themes', ['theme-with-index-less', 'atom-dark-ui'])
waitsFor ->
reloadHandler.callCount == 1
didChangeActiveThemesHandler.callCount == 1
runs ->
expect($('style[group=theme]')).toHaveLength 2
expect($('style[priority=1]')).toHaveLength 2
importPaths = themeManager.getImportPaths()
expect(importPaths.length).toBe 1
expect(importPaths[0]).toContain 'atom-dark-ui'
it 'adds theme-* classes to the workspace for each active theme', ->
workspaceElement = atom.views.getView(atom.workspace)
themeManager.onDidChangeActiveThemes didChangeActiveThemesHandler = jasmine.createSpy()
waitsForPromise ->
themeManager.activateThemes()
runs ->
expect(workspaceElement).toHaveClass 'theme-atom-dark-ui'
themeManager.onDidChangeActiveThemes didChangeActiveThemesHandler = jasmine.createSpy()
atom.config.set('core.themes', ['theme-with-ui-variables', 'theme-with-syntax-variables'])
waitsFor ->
didChangeActiveThemesHandler.callCount > 0
runs ->
# `theme-` twice as it prefixes the name with `theme-`
expect(workspaceElement).toHaveClass 'theme-theme-with-ui-variables'
expect(workspaceElement).toHaveClass 'theme-theme-with-syntax-variables'
expect(workspaceElement).not.toHaveClass 'theme-atom-dark-ui'
expect(workspaceElement).not.toHaveClass 'theme-atom-dark-syntax'
describe "when a theme fails to load", ->
it "logs a warning", ->
spyOn(console, 'warn')
expect(-> atom.packages.activatePackage('a-theme-that-will-not-be-found')).toThrow()
atom.packages.activatePackage('a-theme-that-will-not-be-found')
expect(console.warn.callCount).toBe 1
expect(console.warn.argsForCall[0][0]).toContain "Could not resolve 'a-theme-that-will-not-be-found'"
describe "::requireStylesheet(path)", ->
beforeEach ->
@@ -145,7 +170,7 @@ describe "ThemeManager", ->
themeManager.onDidChangeStylesheets stylesheetsChangedHandler = jasmine.createSpy("stylesheetsChangedHandler")
themeManager.onDidAddStylesheet stylesheetAddedHandler = jasmine.createSpy("stylesheetAddedHandler")
cssPath = atom.project.resolve('css.css')
cssPath = atom.project.getDirectories()[0]?.resolve('css.css')
lengthBefore = $('head style').length
themeManager.requireStylesheet(cssPath)
@@ -169,7 +194,7 @@ describe "ThemeManager", ->
$('head style[id*="css.css"]').remove()
it "synchronously loads and parses less files at the given path and installs a style tag for it in the head", ->
lessPath = atom.project.resolve('sample.less')
lessPath = atom.project.getDirectories()[0]?.resolve('sample.less')
lengthBefore = $('head style').length
themeManager.requireStylesheet(lessPath)
expect($('head style').length).toBe lengthBefore + 1
@@ -193,9 +218,9 @@ describe "ThemeManager", ->
it "supports requiring css and less stylesheets without an explicit extension", ->
themeManager.requireStylesheet path.join(__dirname, 'fixtures', 'css')
expect($('head style[source-path*="css.css"]').attr('source-path')).toBe themeManager.stringToId(atom.project.resolve('css.css'))
expect($('head style[source-path*="css.css"]').attr('source-path')).toBe themeManager.stringToId(atom.project.getDirectories()[0]?.resolve('css.css'))
themeManager.requireStylesheet path.join(__dirname, 'fixtures', 'sample')
expect($('head style[source-path*="sample.less"]').attr('source-path')).toBe themeManager.stringToId(atom.project.resolve('sample.less'))
expect($('head style[source-path*="sample.less"]').attr('source-path')).toBe themeManager.stringToId(atom.project.getDirectories()[0]?.resolve('sample.less'))
$('head style[id*="css.css"]').remove()
$('head style[id*="sample.less"]').remove()
@@ -223,11 +248,9 @@ describe "ThemeManager", ->
expect(stylesheetsChangedHandler).toHaveBeenCalled()
describe "base stylesheet loading", ->
describe "base style sheet loading", ->
workspaceElement = null
beforeEach ->
jasmine.snapshotDeprecations()
workspaceElement = atom.views.getView(atom.workspace)
jasmine.attachToDOM(workspaceElement)
workspaceElement.appendChild document.createElement('atom-text-editor')
@@ -235,15 +258,12 @@ describe "ThemeManager", ->
waitsForPromise ->
themeManager.activateThemes()
beforeEach ->
jasmine.restoreDeprecationsSnapshot()
it "loads the correct values from the theme's ui-variables file", ->
themeManager.onDidReloadAll reloadHandler = jasmine.createSpy()
themeManager.onDidChangeActiveThemes didChangeActiveThemesHandler = jasmine.createSpy()
atom.config.set('core.themes', ['theme-with-ui-variables', 'theme-with-syntax-variables'])
waitsFor ->
reloadHandler.callCount > 0
didChangeActiveThemesHandler.callCount > 0
runs ->
# an override loaded in the base css
@@ -256,11 +276,11 @@ describe "ThemeManager", ->
describe "when there is a theme with incomplete variables", ->
it "loads the correct values from the fallback ui-variables", ->
themeManager.onDidReloadAll reloadHandler = jasmine.createSpy()
themeManager.onDidChangeActiveThemes didChangeActiveThemesHandler = jasmine.createSpy()
atom.config.set('core.themes', ['theme-with-incomplete-ui-variables', 'theme-with-syntax-variables'])
waitsFor ->
reloadHandler.callCount > 0
didChangeActiveThemesHandler.callCount > 0
runs ->
# an override loaded in the base css
@@ -269,22 +289,6 @@ describe "ThemeManager", ->
# from within the theme itself
expect($("atom-text-editor").css("background-color")).toBe "rgb(0, 152, 255)"
describe "theme classes on the workspace", ->
it 'adds theme-* classes to the workspace for each active theme', ->
expect(workspaceElement).toHaveClass 'theme-atom-dark-ui'
themeManager.onDidReloadAll reloadHandler = jasmine.createSpy()
atom.config.set('core.themes', ['theme-with-ui-variables', 'theme-with-syntax-variables'])
waitsFor ->
reloadHandler.callCount > 0
runs ->
# `theme-` twice as it prefixes the name with `theme-`
expect(workspaceElement).toHaveClass 'theme-theme-with-ui-variables'
expect(workspaceElement).toHaveClass 'theme-theme-with-syntax-variables'
expect(workspaceElement).not.toHaveClass 'theme-atom-dark-ui'
expect(workspaceElement).not.toHaveClass 'theme-atom-dark-syntax'
describe "when the user stylesheet changes", ->
beforeEach ->
@@ -358,7 +362,7 @@ describe "ThemeManager", ->
themeManager.activateThemes()
it 'uses the default dark UI and syntax themes and logs a warning', ->
activeThemeNames = themeManager.getActiveNames()
activeThemeNames = themeManager.getActiveThemeNames()
expect(console.warn.callCount).toBe 2
expect(activeThemeNames.length).toBe(2)
expect(activeThemeNames).toContain('atom-dark-ui')
@@ -376,7 +380,7 @@ describe "ThemeManager", ->
themeManager.activateThemes()
it 'uses the enabled themes', ->
activeThemeNames = themeManager.getActiveNames()
activeThemeNames = themeManager.getActiveThemeNames()
expect(activeThemeNames.length).toBe(2)
expect(activeThemeNames).toContain('atom-light-ui')
expect(activeThemeNames).toContain('atom-dark-syntax')
@@ -389,7 +393,7 @@ describe "ThemeManager", ->
themeManager.activateThemes()
it 'uses the default dark UI and syntax themes', ->
activeThemeNames = themeManager.getActiveNames()
activeThemeNames = themeManager.getActiveThemeNames()
expect(activeThemeNames.length).toBe(2)
expect(activeThemeNames).toContain('atom-dark-ui')
expect(activeThemeNames).toContain('atom-dark-syntax')
@@ -402,7 +406,7 @@ describe "ThemeManager", ->
themeManager.activateThemes()
it 'uses the default dark UI theme', ->
activeThemeNames = themeManager.getActiveNames()
activeThemeNames = themeManager.getActiveThemeNames()
expect(activeThemeNames.length).toBe(2)
expect(activeThemeNames).toContain('atom-dark-ui')
expect(activeThemeNames).toContain('atom-light-syntax')
@@ -415,7 +419,7 @@ describe "ThemeManager", ->
themeManager.activateThemes()
it 'uses the default dark syntax theme', ->
activeThemeNames = themeManager.getActiveNames()
activeThemeNames = themeManager.getActiveThemeNames()
expect(activeThemeNames.length).toBe(2)
expect(activeThemeNames).toContain('atom-light-ui')
expect(activeThemeNames).toContain('atom-dark-syntax')
+3 -3
Ver Arquivo
@@ -14,14 +14,14 @@ describe "ViewRegistry", ->
expect(registry.getView(node)).toBe node
describe "when passed a SpacePen view", ->
it "returns the root node of the view with a __spacePenView property pointing at the SpacePen view", ->
it "returns the root node of the view with a .spacePenView property pointing at the SpacePen view", ->
class TestView extends View
@content: -> @div "Hello"
view = new TestView
node = registry.getView(view)
expect(node.textContent).toBe "Hello"
expect(node.__spacePenView).toBe view
expect(node.spacePenView).toBe view
describe "when passed a model object", ->
describe "when a view provider is registered matching the object's constructor", ->
@@ -62,7 +62,7 @@ describe "ViewRegistry", ->
node = registry.getView(model)
expect(node.textContent).toBe "hello"
view = node.__spacePenView
view = node.spacePenView
expect(view instanceof TestView).toBe true
expect(view.model).toBe model
+302 -14
Ver Arquivo
@@ -2,12 +2,16 @@ path = require 'path'
temp = require 'temp'
Workspace = require '../src/workspace'
{View} = require '../src/space-pen-extensions'
platform = require './spec-helper-platform'
_ = require 'underscore-plus'
fstream = require 'fstream'
fs = require 'fs-plus'
describe "Workspace", ->
workspace = null
beforeEach ->
atom.project.setPaths([atom.project.resolve('dir')])
atom.project.setPaths([atom.project.getDirectories()[0]?.resolve('dir')])
atom.workspace = workspace = new Workspace
describe "::open(uri, options)", ->
@@ -66,19 +70,19 @@ describe "Workspace", ->
expect(openEvents).toEqual [
{
uri: atom.project.resolve('a')
uri: atom.project.getDirectories()[0]?.resolve('a')
item: editor1
pane: atom.workspace.getActivePane()
index: 0
}
{
uri: atom.project.resolve('b')
uri: atom.project.getDirectories()[0]?.resolve('b')
item: editor2
pane: atom.workspace.getActivePane()
index: 1
}
{
uri: atom.project.resolve('a')
uri: atom.project.getDirectories()[0]?.resolve('a')
item: editor1
pane: atom.workspace.getActivePane()
index: 0
@@ -92,7 +96,7 @@ describe "Workspace", ->
workspace.open('a').then (o) -> editor = o
runs ->
expect(editor.getUri()).toBe atom.project.resolve('a')
expect(editor.getURI()).toBe atom.project.getDirectories()[0]?.resolve('a')
expect(workspace.getActivePaneItem()).toBe editor
expect(workspace.getActivePane().items).toEqual [editor]
expect(workspace.getActivePane().activate).toHaveBeenCalled()
@@ -226,7 +230,7 @@ describe "Workspace", ->
workspace.addOpener(barOpener)
waitsForPromise ->
pathToOpen = atom.project.resolve('a.foo')
pathToOpen = atom.project.getDirectories()[0]?.resolve('a.foo')
workspace.open(pathToOpen, hey: "there").then (item) ->
expect(item).toEqual { foo: pathToOpen, options: {hey: "there"} }
@@ -257,21 +261,21 @@ describe "Workspace", ->
runs ->
# does not reopen items with no uri
expect(workspace.getActivePaneItem().getUri()).toBeUndefined()
expect(workspace.getActivePaneItem().getURI()).toBeUndefined()
pane.destroyActiveItem()
waitsForPromise ->
workspace.reopenItem()
runs ->
expect(workspace.getActivePaneItem().getUri()).not.toBeUndefined()
expect(workspace.getActivePaneItem().getURI()).not.toBeUndefined()
# destroy all items
expect(workspace.getActivePaneItem().getUri()).toBe atom.project.resolve('file1')
expect(workspace.getActivePaneItem().getURI()).toBe atom.project.getDirectories()[0]?.resolve('file1')
pane.destroyActiveItem()
expect(workspace.getActivePaneItem().getUri()).toBe atom.project.resolve('b')
expect(workspace.getActivePaneItem().getURI()).toBe atom.project.getDirectories()[0]?.resolve('b')
pane.destroyActiveItem()
expect(workspace.getActivePaneItem().getUri()).toBe atom.project.resolve('a')
expect(workspace.getActivePaneItem().getURI()).toBe atom.project.getDirectories()[0]?.resolve('a')
pane.destroyActiveItem()
# reopens items with uris
@@ -281,20 +285,20 @@ describe "Workspace", ->
workspace.reopenItem()
runs ->
expect(workspace.getActivePaneItem().getUri()).toBe atom.project.resolve('a')
expect(workspace.getActivePaneItem().getURI()).toBe atom.project.getDirectories()[0]?.resolve('a')
# does not reopen items that are already open
waitsForPromise ->
workspace.open('b')
runs ->
expect(workspace.getActivePaneItem().getUri()).toBe atom.project.resolve('b')
expect(workspace.getActivePaneItem().getURI()).toBe atom.project.getDirectories()[0]?.resolve('b')
waitsForPromise ->
workspace.reopenItem()
runs ->
expect(workspace.getActivePaneItem().getUri()).toBe atom.project.resolve('file1')
expect(workspace.getActivePaneItem().getURI()).toBe atom.project.getDirectories()[0]?.resolve('file1')
describe "::increase/decreaseFontSize()", ->
it "increases/decreases the font size without going below 1", ->
@@ -553,3 +557,287 @@ describe "Workspace", ->
expect(atom.workspace.panelForItem(item)).toBe panel
expect(atom.workspace.panelForItem(itemWithNoPanel)).toBe null
describe "::scan(regex, options, callback)", ->
describe "when called with a regex", ->
it "calls the callback with all regex results in all files in the project", ->
results = []
waitsForPromise ->
atom.workspace.scan /(a)+/, (result) ->
results.push(result)
runs ->
expect(results).toHaveLength(3)
expect(results[0].filePath).toBe atom.project.getDirectories()[0]?.resolve('a')
expect(results[0].matches).toHaveLength(3)
expect(results[0].matches[0]).toEqual
matchText: 'aaa'
lineText: 'aaa bbb'
lineTextOffset: 0
range: [[0, 0], [0, 3]]
it "works with with escaped literals (like $ and ^)", ->
results = []
waitsForPromise ->
atom.workspace.scan /\$\w+/, (result) -> results.push(result)
runs ->
expect(results.length).toBe 1
{filePath, matches} = results[0]
expect(filePath).toBe atom.project.getDirectories()[0]?.resolve('a')
expect(matches).toHaveLength 1
expect(matches[0]).toEqual
matchText: '$bill'
lineText: 'dollar$bill'
lineTextOffset: 0
range: [[2, 6], [2, 11]]
it "works on evil filenames", ->
platform.generateEvilFiles()
atom.project.setPaths([path.join(__dirname, 'fixtures', 'evil-files')])
paths = []
matches = []
waitsForPromise ->
atom.workspace.scan /evil/, (result) ->
paths.push(result.filePath)
matches = matches.concat(result.matches)
runs ->
_.each(matches, (m) -> expect(m.matchText).toEqual 'evil')
if platform.isWindows()
expect(paths.length).toBe 3
expect(paths[0]).toMatch /a_file_with_utf8.txt$/
expect(paths[1]).toMatch /file with spaces.txt$/
expect(path.basename(paths[2])).toBe "utfa\u0306.md"
else
expect(paths.length).toBe 5
expect(paths[0]).toMatch /a_file_with_utf8.txt$/
expect(paths[1]).toMatch /file with spaces.txt$/
expect(paths[2]).toMatch /goddam\nnewlines$/m
expect(paths[3]).toMatch /quote".txt$/m
expect(path.basename(paths[4])).toBe "utfa\u0306.md"
it "ignores case if the regex includes the `i` flag", ->
results = []
waitsForPromise ->
atom.workspace.scan /DOLLAR/i, (result) -> results.push(result)
runs ->
expect(results).toHaveLength 1
describe "when the core.excludeVcsIgnoredPaths config is truthy", ->
[projectPath, ignoredPath] = []
beforeEach ->
sourceProjectPath = path.join(__dirname, 'fixtures', 'git', 'working-dir')
projectPath = path.join(temp.mkdirSync("atom"))
writerStream = fstream.Writer(projectPath)
fstream.Reader(sourceProjectPath).pipe(writerStream)
waitsFor (done) ->
writerStream.on 'close', done
writerStream.on 'error', done
runs ->
fs.rename(path.join(projectPath, 'git.git'), path.join(projectPath, '.git'))
ignoredPath = path.join(projectPath, 'ignored.txt')
fs.writeFileSync(ignoredPath, 'this match should not be included')
afterEach ->
fs.removeSync(projectPath) if fs.existsSync(projectPath)
it "excludes ignored files", ->
atom.project.setPaths([projectPath])
atom.config.set('core.excludeVcsIgnoredPaths', true)
resultHandler = jasmine.createSpy("result found")
waitsForPromise ->
atom.workspace.scan /match/, (results) ->
resultHandler()
runs ->
expect(resultHandler).not.toHaveBeenCalled()
it "includes only files when a directory filter is specified", ->
projectPath = path.join(path.join(__dirname, 'fixtures', 'dir'))
atom.project.setPaths([projectPath])
filePath = path.join(projectPath, 'a-dir', 'oh-git')
paths = []
matches = []
waitsForPromise ->
atom.workspace.scan /aaa/, paths: ["a-dir#{path.sep}"], (result) ->
paths.push(result.filePath)
matches = matches.concat(result.matches)
runs ->
expect(paths.length).toBe 1
expect(paths[0]).toBe filePath
expect(matches.length).toBe 1
it "includes files and folders that begin with a '.'", ->
projectPath = temp.mkdirSync()
filePath = path.join(projectPath, '.text')
fs.writeFileSync(filePath, 'match this')
atom.project.setPaths([projectPath])
paths = []
matches = []
waitsForPromise ->
atom.workspace.scan /match this/, (result) ->
paths.push(result.filePath)
matches = matches.concat(result.matches)
runs ->
expect(paths.length).toBe 1
expect(paths[0]).toBe filePath
expect(matches.length).toBe 1
it "excludes values in core.ignoredNames", ->
projectPath = path.join(__dirname, 'fixtures', 'git', 'working-dir')
ignoredNames = atom.config.get("core.ignoredNames")
ignoredNames.push("a")
atom.config.set("core.ignoredNames", ignoredNames)
resultHandler = jasmine.createSpy("result found")
waitsForPromise ->
atom.workspace.scan /dollar/, (results) ->
resultHandler()
runs ->
expect(resultHandler).not.toHaveBeenCalled()
it "scans buffer contents if the buffer is modified", ->
editor = null
results = []
waitsForPromise ->
atom.project.open('a').then (o) ->
editor = o
editor.setText("Elephant")
waitsForPromise ->
atom.workspace.scan /a|Elephant/, (result) -> results.push result
runs ->
expect(results).toHaveLength 3
resultForA = _.find results, ({filePath}) -> path.basename(filePath) == 'a'
expect(resultForA.matches).toHaveLength 1
expect(resultForA.matches[0].matchText).toBe 'Elephant'
it "ignores buffers outside the project", ->
editor = null
results = []
waitsForPromise ->
atom.project.open(temp.openSync().path).then (o) ->
editor = o
editor.setText("Elephant")
waitsForPromise ->
atom.workspace.scan /Elephant/, (result) -> results.push result
runs ->
expect(results).toHaveLength 0
describe "::replace(regex, replacementText, paths, iterator)", ->
[filePath, commentFilePath, sampleContent, sampleCommentContent] = []
beforeEach ->
atom.project.setPaths([atom.project.getDirectories()[0]?.resolve('../')])
filePath = atom.project.getDirectories()[0]?.resolve('sample.js')
commentFilePath = atom.project.getDirectories()[0]?.resolve('sample-with-comments.js')
sampleContent = fs.readFileSync(filePath).toString()
sampleCommentContent = fs.readFileSync(commentFilePath).toString()
afterEach ->
fs.writeFileSync(filePath, sampleContent)
fs.writeFileSync(commentFilePath, sampleCommentContent)
describe "when a file doesn't exist", ->
it "calls back with an error", ->
errors = []
missingPath = path.resolve('/not-a-file.js')
expect(fs.existsSync(missingPath)).toBeFalsy()
waitsForPromise ->
atom.workspace.replace /items/gi, 'items', [missingPath], (result, error) ->
errors.push(error)
runs ->
expect(errors).toHaveLength 1
expect(errors[0].path).toBe missingPath
describe "when called with unopened files", ->
it "replaces properly", ->
results = []
waitsForPromise ->
atom.workspace.replace /items/gi, 'items', [filePath], (result) ->
results.push(result)
runs ->
expect(results).toHaveLength 1
expect(results[0].filePath).toBe filePath
expect(results[0].replacements).toBe 6
describe "when a buffer is already open", ->
it "replaces properly and saves when not modified", ->
editor = null
results = []
waitsForPromise ->
atom.project.open('sample.js').then (o) -> editor = o
runs ->
expect(editor.isModified()).toBeFalsy()
waitsForPromise ->
atom.workspace.replace /items/gi, 'items', [filePath], (result) ->
results.push(result)
runs ->
expect(results).toHaveLength 1
expect(results[0].filePath).toBe filePath
expect(results[0].replacements).toBe 6
expect(editor.isModified()).toBeFalsy()
it "does not replace when the path is not specified", ->
editor = null
results = []
waitsForPromise ->
atom.project.open('sample-with-comments.js').then (o) -> editor = o
waitsForPromise ->
atom.workspace.replace /items/gi, 'items', [commentFilePath], (result) ->
results.push(result)
runs ->
expect(results).toHaveLength 1
expect(results[0].filePath).toBe commentFilePath
it "does NOT save when modified", ->
editor = null
results = []
waitsForPromise ->
atom.project.open('sample.js').then (o) -> editor = o
runs ->
editor.buffer.setTextInRange([[0,0],[0,0]], 'omg')
expect(editor.isModified()).toBeTruthy()
waitsForPromise ->
atom.workspace.replace /items/gi, 'okthen', [filePath], (result) ->
results.push(result)
runs ->
expect(results).toHaveLength 1
expect(results[0].filePath).toBe filePath
expect(results[0].replacements).toBe 6
expect(editor.isModified()).toBeTruthy()
+43 -6
Ver Arquivo
@@ -3,6 +3,7 @@ Q = require 'q'
path = require 'path'
temp = require 'temp'
TextEditorView = require '../src/text-editor-view'
Pane = require '../src/pane'
PaneView = require '../src/pane-view'
Workspace = require '../src/workspace'
@@ -12,8 +13,8 @@ describe "WorkspaceView", ->
beforeEach ->
jasmine.snapshotDeprecations()
atom.project.setPaths([atom.project.resolve('dir')])
pathToOpen = atom.project.resolve('a')
atom.project.setPaths([atom.project.getDirectories()[0]?.resolve('dir')])
pathToOpen = atom.project.getDirectories()[0]?.resolve('a')
atom.workspace = new Workspace
atom.workspaceView = atom.views.getView(atom.workspace).__spacePenView
atom.workspaceView.enableKeymap()
@@ -92,11 +93,11 @@ describe "WorkspaceView", ->
editorView2 = atom.workspaceView.panes.find('atom-pane-axis.horizontal > atom-pane-axis.vertical > atom-pane atom-text-editor:eq(0)').view()
editorView4 = atom.workspaceView.panes.find('atom-pane-axis.horizontal > atom-pane-axis.vertical > atom-pane atom-text-editor:eq(1)').view()
expect(editorView1.getEditor().getPath()).toBe atom.project.resolve('a')
expect(editorView2.getEditor().getPath()).toBe atom.project.resolve('b')
expect(editorView3.getEditor().getPath()).toBe atom.project.resolve('../sample.js')
expect(editorView1.getEditor().getPath()).toBe atom.project.getDirectories()[0]?.resolve('a')
expect(editorView2.getEditor().getPath()).toBe atom.project.getDirectories()[0]?.resolve('b')
expect(editorView3.getEditor().getPath()).toBe atom.project.getDirectories()[0]?.resolve('../sample.js')
expect(editorView3.getEditor().getCursorScreenPosition()).toEqual [2, 4]
expect(editorView4.getEditor().getPath()).toBe atom.project.resolve('../sample.txt')
expect(editorView4.getEditor().getPath()).toBe atom.project.getDirectories()[0]?.resolve('../sample.txt')
expect(editorView4.getEditor().getCursorScreenPosition()).toEqual [0, 2]
# ensure adjust pane dimensions is called
@@ -294,3 +295,39 @@ describe "WorkspaceView", ->
modalContainer = workspaceElement.querySelector('atom-panel-container.modal')
expect(modalContainer.parentNode).toBe workspaceElement
describe "::saveActivePaneItem()", ->
describe "when there is an error", ->
it "emits a warning notification when the file cannot be saved", ->
spyOn(Pane::, 'saveActiveItem').andCallFake ->
throw new Error("'/some/file' is a directory")
atom.notifications.onDidAddNotification addedSpy = jasmine.createSpy()
atom.workspace.saveActivePaneItem()
expect(addedSpy).toHaveBeenCalled()
expect(addedSpy.mostRecentCall.args[0].getType()).toBe 'warning'
it "emits a warning notification when the directory cannot be written to", ->
spyOn(Pane::, 'saveActiveItem').andCallFake ->
throw new Error("ENOTDIR, not a directory '/Some/dir/and-a-file.js'")
atom.notifications.onDidAddNotification addedSpy = jasmine.createSpy()
atom.workspace.saveActivePaneItem()
expect(addedSpy).toHaveBeenCalled()
expect(addedSpy.mostRecentCall.args[0].getType()).toBe 'warning'
it "emits a warning notification when the user does not have permission", ->
spyOn(Pane::, 'saveActiveItem').andCallFake ->
throw new Error("EACCES, permission denied '/Some/dir/and-a-file.js'")
atom.notifications.onDidAddNotification addedSpy = jasmine.createSpy()
atom.workspace.saveActivePaneItem()
expect(addedSpy).toHaveBeenCalled()
expect(addedSpy.mostRecentCall.args[0].getType()).toBe 'warning'
it "emits a warning notification when the file cannot be saved", ->
spyOn(Pane::, 'saveActiveItem').andCallFake ->
throw new Error("no one knows")
save = -> atom.workspace.saveActivePaneItem()
expect(save).toThrow()
+19 -2
Ver Arquivo
@@ -11,6 +11,7 @@ _ = require 'underscore-plus'
{Emitter} = require 'event-kit'
{Model} = require 'theorist'
fs = require 'fs-plus'
{convertStackTrace, convertLine} = require 'coffeestack'
{$} = require './space-pen-extensions'
WindowEventHandler = require './window-event-handler'
@@ -133,6 +134,9 @@ class Atom extends Model
# Public: A {Clipboard} instance
clipboard: null
# A {ServiceHub} instance
services: null
# Public: A {ContextMenuManager} instance
contextMenu: null
@@ -195,9 +199,16 @@ class Atom extends Model
unless @inDevMode() or @inSpecMode()
require('grim').deprecate = ->
sourceMapCache = {}
window.onerror = =>
@lastUncaughtError = Array::slice.call(arguments)
[message, url, line, column, originalError] = @lastUncaughtError
convertedLine = convertLine(url, line, column, sourceMapCache)
{line, column} = convertedLine if convertedLine?
originalError.stack = convertStackTrace(originalError.stack, sourceMapCache) if originalError
eventObject = {message, url, line, column, originalError}
openDevTools = true
@@ -225,6 +236,7 @@ class Atom extends Model
NotificationManager = require './notification-manager'
PackageManager = require './package-manager'
Clipboard = require './clipboard'
ServiceHub = require './service-hub'
GrammarRegistry = require './grammar-registry'
ThemeManager = require './theme-manager'
StyleManager = require './style-manager'
@@ -260,6 +272,7 @@ class Atom extends Model
@contextMenu = new ContextMenuManager({resourcePath, devMode})
@menu = new MenuManager({resourcePath})
@clipboard = new Clipboard()
@services = new ServiceHub
@grammars = @deserializers.deserialize(@state.grammars ? @state.syntax) ? new GrammarRegistry()
@@ -267,7 +280,7 @@ class Atom extends Model
deprecate "The atom.syntax global is deprecated. Use atom.grammars instead."
@grammars
@subscribe @packages.onDidActivateAll => @watchThemes()
@subscribe @packages.onDidActivateInitialPackages => @watchThemes()
Project = require './project'
TextBuffer = require 'text-buffer'
@@ -328,6 +341,10 @@ class Atom extends Model
inDevMode: ->
@getLoadSettings().devMode
# Public: Is the current window in safe mode?
inSafeMode: ->
@getLoadSettings().safeMode
# Public: Is the current window running specs?
inSpecMode: ->
@getLoadSettings().isSpec
@@ -704,7 +721,7 @@ class Atom extends Model
@themes.load()
watchThemes: ->
@themes.onDidReloadAll =>
@themes.onDidChangeActiveThemes =>
# Only reload stylesheets from non-theme packages
for pack in @packages.getActivePackages() when pack.getType() isnt 'theme'
pack.reloadStylesheets?()
+9 -5
Ver Arquivo
@@ -140,14 +140,18 @@ class AtomApplication
# Registers basic application commands, non-idempotent.
handleEvents: ->
getLoadSettings = =>
devMode: @focusedWindow()?.devMode
safeMode: @focusedWindow()?.safeMode
@on 'application:run-all-specs', -> @runSpecs(exitWhenDone: false, resourcePath: global.devResourcePath, safeMode: @focusedWindow()?.safeMode)
@on 'application:run-benchmarks', -> @runBenchmarks()
@on 'application:quit', -> app.quit()
@on 'application:new-window', -> @openPath(windowDimensions: @focusedWindow()?.getDimensions())
@on 'application:new-window', -> @openPath(_.extend(windowDimensions: @focusedWindow()?.getDimensions(), getLoadSettings()))
@on 'application:new-file', -> (@focusedWindow() ? this).openPath()
@on 'application:open', -> @promptForPath(type: 'all')
@on 'application:open-file', -> @promptForPath(type: 'file')
@on 'application:open-folder', -> @promptForPath(type: 'folder')
@on 'application:open', -> @promptForPath(_.extend(type: 'all', getLoadSettings()))
@on 'application:open-file', -> @promptForPath(_.extend(type: 'file', getLoadSettings()))
@on 'application:open-folder', -> @promptForPath(_.extend(type: 'folder', getLoadSettings()))
@on 'application:open-dev', -> @promptForPath(devMode: true)
@on 'application:open-safe', -> @promptForPath(safeMode: true)
@on 'application:inspect', ({x,y, atomWindow}) ->
@@ -355,7 +359,7 @@ class AtomApplication
if existingWindow?
openedWindow = existingWindow
openedWindow.openPath(pathToOpen, initialLine)
openedWindow.openPath(pathToOpen, initialLine, initialColumn)
if openedWindow.isMinimized()
openedWindow.restore()
else
+3 -1
Ver Arquivo
@@ -18,7 +18,7 @@ class AtomWindow
isSpec: null
constructor: (settings={}) ->
{@resourcePath, pathToOpen, initialLine, initialColumn, @isSpec, @exitWhenDone, @safeMode} = settings
{@resourcePath, pathToOpen, initialLine, initialColumn, @isSpec, @exitWhenDone, @safeMode, @devMode} = settings
# Normalize to make sure drive letter case is consistent on Windows
@resourcePath = path.normalize(@resourcePath) if @resourcePath
@@ -38,6 +38,8 @@ class AtomWindow
loadSettings.windowState ?= '{}'
loadSettings.appVersion = app.getVersion()
loadSettings.resourcePath = @resourcePath
loadSettings.devMode ?= false
loadSettings.safeMode ?= false
# Only send to the first non-spec window created
if @constructor.includeShellLoadTime and not @isSpec
+16 -4
Ver Arquivo
@@ -1,6 +1,7 @@
autoUpdater = null
_ = require 'underscore-plus'
{EventEmitter} = require 'events'
path = require 'path'
IdleState = 'idle'
CheckingState = 'checking'
@@ -51,8 +52,7 @@ class AutoUpdateManager
@emitUpdateAvailableEvent(@getWindows()...)
# Only released versions should check for updates.
unless /\w{7}/.test(@version)
@check(hidePopups: true)
@check(hidePopups: true) unless /\w{7}/.test(@version)
switch process.platform
when 'win32'
@@ -86,12 +86,24 @@ class AutoUpdateManager
onUpdateNotAvailable: =>
autoUpdater.removeListener 'error', @onUpdateError
dialog = require 'dialog'
dialog.showMessageBox type: 'info', buttons: ['OK'], message: 'No update available.', detail: "Version #{@version} is the latest version."
dialog.showMessageBox
type: 'info'
buttons: ['OK']
icon: path.resolve(__dirname, '..', '..', 'resources', 'atom.png')
message: 'No update available.'
title: 'No Update Available'
detail: "Version #{@version} is the latest version."
onUpdateError: (event, message) =>
autoUpdater.removeListener 'update-not-available', @onUpdateNotAvailable
dialog = require 'dialog'
dialog.showMessageBox type: 'warning', buttons: ['OK'], message: 'There was an error checking for updates.', detail: message
dialog.showMessageBox
type: 'warning'
buttons: ['OK']
icon: path.resolve(__dirname, '..', '..', 'resources', 'atom.png')
message: 'There was an error checking for updates.'
title: 'Update Error'
detail: message
getWindows: ->
global.atomApplication.windows
+1 -7
Ver Arquivo
@@ -8,10 +8,8 @@ class AutoUpdater
setFeedUrl: (@updateUrl) ->
quitAndInstall: ->
console.log 'restarting new atom.exe'
if SquirrelUpdate.existsSync()
SquirrelUpdate.restartAtom()
SquirrelUpdate.restartAtom(require('app'))
else
require('auto-updater').quitAndInstall()
@@ -46,7 +44,6 @@ class AutoUpdater
@downloadUpdate (error, update) =>
if error?
console.log "Failed to download: #{error.message} - #{error.code} - #{error.stdout}"
@emit 'update-not-available'
return
@@ -56,12 +53,9 @@ class AutoUpdater
@installUpdate (error) =>
if error?
console.log "Failed to update: #{error.message} - #{error.code} - #{error.stdout}"
@emit 'update-not-available'
return
console.log "Updated to #{update.version}"
@emit 'update-available'
@emit 'update-downloaded', {}, update.releaseNotes, update.version, new Date(), 'https://atom.io', => @quitAndInstall()
+2 -1
Ver Arquivo
@@ -26,7 +26,8 @@ fs.lstatSyncNoException = (pathToStat) ->
start = ->
if process.platform is 'win32'
SquirrelUpdate = require './squirrel-update'
return if SquirrelUpdate.handleStartupEvent()
squirrelCommand = process.argv[1]
return if SquirrelUpdate.handleStartupEvent(app, squirrelCommand)
args = parseCommandLine()

Alguns arquivos não foram exibidos porque demasiados arquivos foram alterados neste diff Mostrar Mais