Comparar commits

...

1629 Commits

Autor SHA1 Mensagem Data
Kevin Sawicki 88df4d2f3e Merge pull request #2692 from atom/ks-select-page-up-down
Select page up/down
2014-06-20 13:22:04 -07:00
Kevin Sawicki 4136ff566b 📝 Correct spec description 2014-06-20 13:09:51 -07:00
Kevin Sawicki 2fe523a664 Add spec for Editor::selectPageUp/Down 2014-06-20 13:09:51 -07:00
Kevin Sawicki 148180adda Implement select page up/down in Editor 2014-06-20 13:09:27 -07:00
Justin Bradford 01a4032895 Add text selection using page up/down keys to the React-based editor 2014-06-20 13:09:16 -07:00
Justin Bradford 2b2b65ec82 Add command to select text using page up/down keys 2014-06-20 13:08:48 -07:00
Ben Ogle 5ffc063f0c Merge pull request #2693 from atom/bo-fix-gutter-prev-decorations
Fix caching of gutter's previous decorations
2014-06-20 12:52:22 -07:00
Ben Ogle dee0771dd7 Use ? in the conditional. 2014-06-20 12:50:42 -07:00
Ben Ogle aef6991ca8 Set the decorations and previousDecorations vars before loops
Both loops use both vars, so both need to be available before the 
diffing!
2014-06-20 11:29:18 -07:00
Ben Ogle e8db3e97ce Remove cached decorations for removed lines 2014-06-20 11:28:01 -07:00
Ben Ogle b1dd4f2e8e Index the previous decoration cache by lineNumberId rather than screenRow
Why? Screen rows change. If some operation (folding?) changes the 
screen rows and the decorations at the same time, the previous 
decorations will no longer be valid and can no longer be diffed against 
the decorations to-be-rendered.
2014-06-20 11:27:39 -07:00
Ben Ogle 633b08b9de Merge pull request #2682 from atom/bo-line-decorations
Render line decorations
2014-06-20 11:02:35 -07:00
Ben Ogle 1228435f9b 💄 2014-06-20 11:00:40 -07:00
Kevin Sawicki 02b5280587 Upgrade to language-ruby@0.30 2014-06-20 10:59:15 -07:00
Ben Ogle 2e47207701 Upgrade to git-diff 0.34.0 to fix spec 2014-06-20 10:54:10 -07:00
Ben Ogle 593b5b4e36 Use _.deepContains 2014-06-20 10:50:12 -07:00
Kevin Sawicki 1896c94775 Upgrade to language-c@0.21 2014-06-20 10:46:50 -07:00
Kevin Sawicki 4dc20e2027 Upgrade to tree-view@0.104 2014-06-20 09:18:53 -07:00
Kevin Sawicki 238e291888 Upgrade to language-javascript@0.28 2014-06-20 09:06:39 -07:00
Kevin Sawicki 5ccac143aa Upgrade to language-c@0.20 2014-06-20 08:38:10 -07:00
Kevin Sawicki ae97244664 📝 Tweak python install location note 2014-06-20 08:06:22 -07:00
Kevin Sawicki 859e3cd038 Merge pull request #2687 from grenade/patch-1
Added a hint about the required Python path.
2014-06-20 08:04:05 -07:00
Rob Thijssen 07577ff944 Added a hint about the required Python path.
In order to alert users that the Atom build scripts expect to find Python in the default installation folder.
2014-06-20 15:19:55 +01:00
Ben Ogle 72b1821828 Render line decorations. 2014-06-19 17:20:05 -07:00
Kevin Sawicki 781a51ac53 Merge pull request #2675 from atom/ks-bundle-dlls
Bundle DLLs
2014-06-19 16:27:38 -07:00
Kevin Sawicki 9055e650c6 Specify full destination path 2014-06-19 16:16:16 -07:00
Kevin Sawicki 5195a4aaa7 Copy dlls during build task 2014-06-19 16:16:16 -07:00
Kevin Sawicki 5e4f34f92c Update dlls 2014-06-19 16:16:16 -07:00
Kevin Sawicki dc7b549017 Add msvcr100.dll to win resources 2014-06-19 16:16:16 -07:00
Kevin Sawicki 29d5f63cd9 Update msvcp100.dll 2014-06-19 16:16:15 -07:00
Kevin Sawicki 33b4ec8e25 Add msvcp100.dll to win resources 2014-06-19 16:16:15 -07:00
Ben Ogle 85abed2406 Merge pull request #2676 from atom/bo-cursor-gutter
Don’t render decorations on the last empty line when selection not empty
2014-06-19 15:10:18 -07:00
Ben Ogle 520ece4b13 💄 Wording 2014-06-19 15:09:49 -07:00
Ben Ogle 184068dc55 Add handlers for IME composition 2014-06-19 15:03:34 -07:00
Ben Ogle f27b897e91 Change message in scroll canary 2014-06-19 14:27:20 -07:00
Ben Ogle 6e201104bc Only fix the scroll position when the editor is mounted
fixes #2664
2014-06-19 14:24:47 -07:00
Ben Ogle 908a2978ae Don’t render decorations on the last empty line when selection not empty 2014-06-19 14:20:32 -07:00
Ben Ogle 2eb5ef0816 Merge pull request #2665 from atom/bo-gutter-selection
Implement gutter clicking and dragging to change selection on react editor
2014-06-19 13:48:40 -07:00
probablycorey 0c5f2cd067 Upgrade to language-gfm@0.40.0 2014-06-19 13:38:25 -07:00
Kevin Sawicki d1e60fb2a5 Upgrade to language-c@0.19 2014-06-19 13:22:16 -07:00
Nathan Sobo bee7be1d1a Fix errors refreshing directly after adding selection below/above 2014-06-19 13:43:10 -06:00
Ben Ogle bee4c9df8a Revert "Select to the end of the last row rather than beginning of row + 1"
This reverts commit c5815d2af9.
2014-06-19 12:06:09 -07:00
Ben Ogle c5815d2af9 Select to the end of the last row rather than beginning of row + 1 2014-06-19 12:05:17 -07:00
Ben Ogle 77717d3eff Fix spec 2014-06-19 12:05:17 -07:00
Ben Ogle & Nathan Sobo d3e0005b33 💄 Break out separate methods for gutter click and shift-click 2014-06-19 12:05:17 -07:00
Ben Ogle & Nathan Sobo 8295019891 Throw error when no animation frame was requested 2014-06-19 12:05:17 -07:00
Ben Ogle & Nathan Sobo 2edcc517b1 Handle dragging in the gutter
Including shift-click dragging better than the old editor!!!!!!
2014-06-19 12:05:17 -07:00
Ben Ogle & Nathan Sobo 9083103bb3 Add click and shift-click in gutter 2014-06-19 12:04:36 -07:00
Ben Ogle & Nathan Sobo bc391094df 💄 Move helper 2014-06-19 12:03:18 -07:00
Kevin Sawicki ffba81a962 Prepare 0.106 2014-06-19 10:03:26 -07:00
Kevin Sawicki 1e1f4cf173 Merge pull request #2662 from atom/ks-align-hard-tabs
Align hard tabs
2014-06-19 09:41:15 -07:00
Ivan Žužak 7f04149f8d Upgrade to find-and-replace@0.120.0 2014-06-19 18:03:00 +02:00
Nathan Sobo cd1fb99142 Merge pull request #2667 from atom/ns-react-dont-measure-when-hidden
Don't measure character widths when editor is hidden
2014-06-19 06:34:07 -06:00
Nathan Sobo 388763e7cd Wait to measure characters if editor is hidden
Also, when characters *are* measured, request a display update
2014-06-19 04:19:51 -06:00
Nathan Sobo f22e4225c3 Break into separate specs for lineHeight, fontSize, and fontFamily 2014-06-19 03:35:35 -06:00
Cheng Zhao db4b99d27b Merge branch 'atom-shell-v0.13.2' 2014-06-19 15:16:06 +08:00
Nathan Sobo 17f9cc49f2 Honor the center: true option in scrollTo* methods
Fixes #2648
2014-06-18 21:48:14 -06:00
Nathan Sobo 609855af3c Decide to measure gutter's width in gutter
The gutter is in a better position to determine if the max line number
length has changed because it's a property that gets passed in so we
can compare current with previous.

Fixes #2659
2014-06-18 21:07:13 -06:00
Cheng Zhao 8410d8587b Upgrade to atom-shell@0.13.2 2014-06-19 09:38:27 +08:00
Kevin Sawicki 33c9d5ae24 Upgrade to find-and-replace@0.119 2014-06-18 18:17:01 -07:00
Kevin Sawicki 0c48821465 Upgrade to command-palette@0.23 2014-06-18 17:50:46 -07:00
Kevin Sawicki 43259f5c51 Upgrade to link@0.24 2014-06-18 17:47:42 -07:00
Kevin Sawicki fe2cb046c3 Verify token screen and buffer delta 2014-06-18 17:26:38 -07:00
Kevin Sawicki de132d79a4 Add parens for clarity 2014-06-18 17:16:50 -07:00
Kevin Sawicki 5af181ffb5 Default column to 0 2014-06-18 17:11:34 -07:00
Kevin Sawicki 355f54ba00 Test odd-numbered tab length alignment 2014-06-18 17:10:10 -07:00
Kevin Sawicki b56d4c6181 Update more expected tab lengths 2014-06-18 16:54:56 -07:00
Kevin Sawicki ad9e2ab869 Update specs where tab is now only 1 space 2014-06-18 16:48:00 -07:00
Kevin Sawicki a497b0f90f 💄 Use trailing for loop 2014-06-18 16:42:36 -07:00
Kevin Sawicki e4fd80399d Add token value directly to column 2014-06-18 16:41:10 -07:00
Kevin Sawicki c4c5d72bf1 Test multiple tab stops per line 2014-06-18 16:37:23 -07:00
Kevin Sawicki 0504244066 Test multiple tab lengths 2014-06-18 16:25:31 -07:00
Kevin Sawicki 8560526158 Add initial spec of hard tabs aligning 2014-06-18 16:24:35 -07:00
Kevin Sawicki ec8805e99e Merge branch 'master' of https://github.com/a-m-s/atom into ks-align-hard-tabs
Conflicts:
	src/tokenized-line.coffee
2014-06-18 16:09:07 -07:00
Kevin Sawicki f8ec2e6da4 Upgrade to settings-view@0.128 2014-06-18 15:23:46 -07:00
Ben Ogle 2a28eafd04 Merge pull request #2661 from atom/bo-fold-markers
Add fold markers to folded lines
2014-06-18 14:58:32 -07:00
Kevin Sawicki a6bf1af2d5 Upgrade to go-to-line@0.23 2014-06-18 14:26:40 -07:00
Kevin Sawicki 8eae66fc49 Upgrade to git-diff@0.33 2014-06-18 14:23:57 -07:00
Ben Ogle 02757fc2de 💄 2014-06-18 14:22:05 -07:00
Kevin Sawicki fc37ac37bd Upgrade to archive-view@0.33 2014-06-18 14:21:33 -07:00
Ben Ogle 63587abe97 Give fold markers a pointer on hover 2014-06-18 14:21:03 -07:00
Ben Ogle d5ea766541 Make click of fold marker unfold the row 2014-06-18 14:07:55 -07:00
Kevin Sawicki bd0643eda4 Upgrade to apm 0.69 2014-06-18 13:56:18 -07:00
Ben Ogle 7a9710b8c3 Add fold markers to folded lines
Fixes #2634
2014-06-18 13:47:38 -07:00
probablycorey 468c6598db Make sure the overlayer class is only used once.
Using it twice causes context menus with the .overlay selector to
appear twice.
Closes #2601
2014-06-18 13:24:15 -07:00
Ben Ogle ddb3cdc76f Merge pull request #2656 from atom/bo-upgrade-fnr
Upgrade find and replace to use decorations for marker views
2014-06-18 13:11:11 -07:00
Ben Ogle 1c8e716cfd Upgrade find-and-replace to use decorations for marker views 2014-06-18 12:56:05 -07:00
Nathan Sobo f1f83a7d36 Add a comment explaining the .editor-colors class on .lines 2014-06-18 12:36:40 -06:00
Nathan Sobo 8d87eb2ed6 Style the .line-numbers div to be compatible w/ both themes and the GPU
The .line-numbers div has to have an opaque background because it's
sent as a texture to the GPU, and otherwise it will have isuses with
subpixel antialiasing.

However, themes style the background of the .gutter div, which was
getting obscured by the opaque background of the line numbers. This
commit adds the .gutter class to the .line-numbers div as well and
ensures it always fills the entire height of the editor.
2014-06-18 12:36:40 -06:00
Kevin Sawicki 29d26a4fae Increase timeout on Windows CI 2014-06-18 10:04:41 -07:00
Ben Ogle 5c6f711bf3 Upgrade syntax themes to add css for new find decorations 2014-06-18 09:53:17 -07:00
Nathan Sobo 53c363b853 Merge pull request #2615 from adnelson/feature/delete-to-end-of-line
added delete to end of line
2014-06-18 10:46:48 -06:00
probablycorey bacd612c71 Apply editor-colors style to gutter
Closes #2596
2014-06-18 09:42:33 -07:00
Kevin Sawicki 2cded15c4c Upgrade to language-xml@0.15 2014-06-18 09:30:44 -07:00
Corey Johnson 2e73a46cbc Merge pull request #2603 from atom/cj-expose-resizing-to-editor
Expose resizing to editor
2014-06-18 09:19:43 -07:00
Kevin Sawicki 64ae7bcdcc Upgrade to tabs@0.42 2014-06-18 08:35:08 -07:00
Kevin Sawicki abca7f778c Upgrade to status-bar@0.41 2014-06-18 08:27:10 -07:00
Kevin Sawicki b7197145c8 Upgrade to spell-check@0.38 2014-06-18 08:19:36 -07:00
Kevin Sawicki 7f53bb5753 Upgrade to text-buffer 2.4.1 2014-06-18 08:18:41 -07:00
Kevin Sawicki 8d38fc77d6 Upgrade to snippets@0.46 2014-06-18 08:15:32 -07:00
Kevin Sawicki 1975882b9e Upgrade to fuzzy-finder@0.55 2014-06-17 18:16:53 -07:00
Kevin Sawicki 0bd4d31ab0 💄 Remove semicolon 2014-06-17 18:06:38 -07:00
Cheng Zhao 4192c121e5 Merge pull request #2630 from deprint/desktop-file
Install Atom.desktop when installing to /usr/local
2014-06-18 08:58:50 +08:00
Ben Ogle e89e2141d7 Merge pull request #2605 from atom/bo-ns-highlights
Add highlight decorations
2014-06-17 17:42:18 -07:00
Kevin Sawicki 25c5458bd2 Upgrade to wrap-guide@0.19 2014-06-17 17:30:58 -07:00
probablycorey ff0cddfd1d Merge remote-tracking branch 'origin/master' into cj-expose-resizing-to-editor 2014-06-17 17:22:10 -07:00
Ben Ogle a7ec7497e2 nof 2014-06-17 17:09:26 -07:00
Ben Ogle 3790cdb262 Reset highlights so they don’t interfere with styleguide text.highlight 2014-06-17 17:08:53 -07:00
Ben Ogle 4308ce7bb0 Warnings when you pass in a bs marker 2014-06-17 17:08:53 -07:00
Kevin Sawicki b302fdc553 Upgrade to markdown-preview@0.82 2014-06-17 16:41:31 -07:00
Nathan Sobo 2fffbba503 Eliminate Decoration class and use plain objects instead 2014-06-17 17:35:56 -06:00
probablycorey 9be1427891 Request scrollView measurement on resize events 2014-06-17 16:25:47 -07:00
Corey Johnson & Nathan Sobo 4564a39392 Remove measureScrollView helper 2014-06-17 16:09:23 -07:00
Corey Johnson & Nathan Sobo 068c1e6249 Use polling to detect editor resize 2014-06-17 16:07:07 -07:00
Kevin Sawicki 06a55250b9 Upgrade to bookmarks@0.25 2014-06-17 15:11:54 -07:00
Ben Ogle d8240628a7 Update doc comments 2014-06-17 14:53:11 -07:00
Kevin Sawicki eaa7593b27 Add single selection menu item 2014-06-17 14:42:57 -07:00
Kevin Sawicki 72e4be60c0 Upgrade to markdown-preview@0.81 2014-06-17 14:40:49 -07:00
Corey Johnson f3a4d32a32 Remove width setting of overflowExpander 2014-06-17 14:07:26 -07:00
Nathan Sobo edadedce7b Give highlight decorations unique id's to avoid potential React errors
Using the marker's id plus the decoration class can cause an error in
the event we apply a decoration with the same class twice to the same
marker. This is admittedly unlikely, but I think it's cleaner to just
allocate unique id's for decoration objects.
2014-06-17 15:03:45 -06:00
Nathan Sobo 89be77b0a9 💄 2014-06-17 14:47:49 -06:00
Nathan Sobo 99ba20ae0d Don't render empty highlights 2014-06-17 14:47:12 -06:00
Corey Johnson 0255e44f00 Remove suppressUpdates 2014-06-17 13:38:08 -07:00
Nathan Sobo 4832d36ac1 Rename filterDecorationsByScreenRow to getLineDecorations
Also rename local variable to lineDecorations for clarity
2014-06-17 14:35:56 -06:00
Nathan Sobo 5d15af943e Rename filterDecorationsByMarkerId to getHighlightDecorations
And rename local variable to highlightDecorations to clarify intent
2014-06-17 14:31:56 -06:00
Corey Johnson 0a671fc386 Add a div that triggers overflowchanged events on resize 2014-06-17 13:28:05 -07:00
Corey Johnson c06f5911c6 Update editor height change spec 2014-06-17 13:26:56 -07:00
Kevin Sawicki 2af8404ea9 Upgrade to bracket-matcher@0.47 2014-06-17 13:07:58 -07:00
Nathan Sobo 345d20dc4a Prepare 0.105.0 release 2014-06-17 14:05:11 -06:00
Kevin Sawicki 34b93554c3 Upgrade to tree-view@0.103 2014-06-17 11:55:53 -07:00
Kevin Sawicki 3de926a1af Hide when no deprecations 2014-06-17 11:36:07 -07:00
Kevin Sawicki bc85bd2e74 Upgrade to bracket-matcher@0.46 2014-06-17 11:34:21 -07:00
Kevin Sawicki 3601aac136 Correct deprecation label 2014-06-17 11:32:53 -07:00
Kevin Sawicki de8b498402 Add deprecations to spec runner 2014-06-17 11:28:01 -07:00
Ben Ogle ef09fbbfb2 Remove softWrap decoration option 2014-06-17 11:24:27 -07:00
Ben Ogle a3784500ec Fix editor-view tests 2014-06-17 11:13:15 -07:00
Kevin Sawicki 1bd00f1d0a Upgrade to language-c@0.18 2014-06-17 10:36:06 -07:00
Allen Nelson ef7f0ed9ed updated docstring 2014-06-17 12:18:34 -05:00
Kevin Sawicki 65e80cd65e Upgrade to symbols-view@0.56 2014-06-17 09:34:19 -07:00
Nathan Sobo 14bed8a3c8 Merge pull request #2587 from atom/bo-ns-input-handling
Handle textInput events in a way that works with autocomplete-plus
2014-06-17 10:11:34 -06:00
Kevin Sawicki d0513cb95d 📝 Doc optional param and default property value 2014-06-17 08:49:57 -07:00
Kevin Sawicki 6a08618821 Upgrade to package-generator@0.31 2014-06-17 08:29:38 -07:00
Fabian Stiewitz 72c87bfbc9 Install Atom.desktop when installDir is not temporary 2014-06-17 16:25:10 +02:00
Fabian Stiewitz 54c7c1e98d 🐧 Install Atom.desktop when installing to /usr/local 2014-06-17 12:40:10 +02:00
Kevin Sawicki 4e73fe3f24 Upgrade to settings-view@0.127 2014-06-16 17:55:13 -07:00
Ben Ogle 359793c0b0 Upgrade git-diff for use with new decoration apis. 2014-06-16 17:47:28 -07:00
Ben Ogle 34ec15862f Filter decorations in the components.
This reduces the number of intermediate objects we need to create. The 
downside is a bit more code complexity in the components.
2014-06-16 16:54:21 -07:00
Ben Ogle 04bbe393d4 Remove log lines 2014-06-16 16:51:46 -07:00
Ben Ogle 5b84aa7b18 💄 per nathan’s request 2014-06-16 16:06:18 -07:00
Ben Ogle 7ba498a170 Fix id generation 2014-06-16 16:06:01 -07:00
Ben Ogle c21f8a5a6c 💄 clean up spec names 2014-06-16 16:05:48 -07:00
Kevin Sawicki 5788e30269 Upgrade to tree-view@0.102 2014-06-16 16:02:50 -07:00
Ben Ogle 0312609e19 Make highlights render as absolute position 2014-06-16 15:57:23 -07:00
Ben Ogle 32fba97c3a Add a spec for highlights in folds 2014-06-16 15:56:55 -07:00
Ben Ogle 5259d5b750 Dont render invalid highlight decorations 2014-06-16 15:40:54 -07:00
Ben Ogle dff27eba18 Specs for highlights 2014-06-16 15:36:09 -07:00
Ben Ogle d2908c75fc Rename redundant describe 2014-06-16 15:36:09 -07:00
Nathan Sobo 2c04bff0fa Only return decorations for markers intersecting the screen row range
This relies on a fix to the interval-skip-list provided with the upgrade
to text-buffer@2.4.0.
2014-06-16 15:36:09 -07:00
Ben Ogle 4f2f158d0d Make selection updating work properly 2014-06-16 15:36:09 -07:00
Ben Ogle 351dc58354 Remove getSelectionScreenRanges() 2014-06-16 15:36:09 -07:00
Ben Ogle 2867dd98e5 Remove getGutterDecorations() 2014-06-16 15:36:09 -07:00
Ben Ogle 32a0804b9a Remove Decorations object 2014-06-16 15:36:09 -07:00
Ben Ogle 408e62a993 Pass highlightDecorations into the HighlightsComponent 2014-06-16 15:36:08 -07:00
Ben Ogle d4057d21c7 Pass the decoration hash into the gutterComponent 2014-06-16 15:36:08 -07:00
Ben Ogle 031ec9798a No more typeless decorations
Now you can specify a list of types with your decoration.
2014-06-16 15:36:08 -07:00
Ben Ogle 1ebdd801f5 Use decorations to render selections 2014-06-16 15:36:08 -07:00
Ben Ogle 084632a985 Rename Selection(s)Component to Highlight(s)Component 2014-06-16 15:36:08 -07:00
Ben Ogle 002e14990b Rename bufferRowHasClass 2014-06-16 15:36:08 -07:00
Ben Ogle 3a3fc4b614 Add a spec for screen line changes 2014-06-16 15:36:08 -07:00
Ben Ogle b028673b5d Only render on updates 2014-06-16 15:36:08 -07:00
Ben Ogle 6394814142 Make foldable decorations work again 2014-06-16 15:36:08 -07:00
Ben Ogle e128212410 Fix decoration specs to work with markers only 2014-06-16 15:36:08 -07:00
Ben Ogle 2d4360dcf0 Decorations can now only be attached to markers.
The basics work. It will render them on the gutter.
2014-06-16 15:36:08 -07:00
Ben Ogle & Nathan Sobo 120e2a3bdb Move decoration Editor specs to DisplayBuffer 2014-06-16 15:36:08 -07:00
Ben Ogle & Nathan Sobo 7142022f05 Add intersection support to DisplayBuffer::findMarkers 2014-06-16 15:36:08 -07:00
Ben Ogle & Nathan Sobo 25520a4cad Add containedInScreenRange to DisplayBuffer::findMarkers 2014-06-16 15:36:08 -07:00
Ben Ogle & Nathan Sobo 56da6399b8 Add startScreenRow and endScreenRow to DisplayBuffer::findMarkers 2014-06-16 15:36:08 -07:00
Ben Ogle & Nathan Sobo a7379b067a Use ::getMarker for fold decorations instead of new DisplayBufferMarker 2014-06-16 15:36:07 -07:00
Kevin Sawicki de6fb2802b Upgrade to language-yaml@0.7 2014-06-16 15:26:10 -07:00
Kevin Sawicki 2bfd7d093a Merge pull request #2629 from atom/ks-smaller-windows-build
Smaller Windows build
2014-06-16 15:04:00 -07:00
Kevin Sawicki 416266b815 💄 Use string interpolation 2014-06-16 14:29:17 -07:00
Kevin Sawicki bcc888bfb4 💄 2014-06-16 14:15:23 -07:00
Kevin Sawicki e9bcb851c3 Escape ignored patterns 2014-06-16 14:13:43 -07:00
Allen Nelson 8411d41621 deleting only selection if selection is not empty 2014-06-16 16:13:40 -05:00
Kevin Sawicki a66f81d70a Don't include *.pdb files 2014-06-16 12:56:39 -07:00
Kevin Sawicki 72d1eb24a3 Ignore build/Release/obj directory 2014-06-16 12:53:34 -07:00
Kevin Sawicki ba18c65dac Ignore plist tests/ 2014-06-16 12:37:04 -07:00
Kevin Sawicki 0c94298ea4 Merge pull request #2627 from atom/ks-windows-package-failures-on-ci
Fix packages specs on Windows CI
2014-06-16 12:34:29 -07:00
Kevin Sawicki 9bf374d4e5 Upgrade to language-ruby@0.29 2014-06-16 12:33:27 -07:00
Nathan Sobo 9344e3fc98 Merge pull request #2626 from atom/iz-mousedown-events-on-left-click-only
Handle mousedown events only for left button in editors
2014-06-16 13:29:37 -06:00
Kevin Sawicki ede6a081a4 Upgrade to settings-view@0.126 2014-06-16 11:26:52 -07:00
Kevin Sawicki d83547b9f4 Upgrade to setings-view@0.125 2014-06-16 11:26:52 -07:00
Kevin Sawicki ef2337359b Upgrade to settings-view@0.124 2014-06-16 11:26:51 -07:00
Kevin Sawicki bc8a5f4b23 Fail on windows if specs fail 2014-06-16 11:26:51 -07:00
Kevin Sawicki 261421b609 Upgrade to settings-view@0.123 2014-06-16 11:26:51 -07:00
Kevin Sawicki 07eb2585d6 Remove fixtures cleaning 2014-06-16 11:26:51 -07:00
Kevin Sawicki bec3d4effc Delete fixtures for force re-checkout 2014-06-16 11:26:51 -07:00
Kevin Sawicki 422c4d41d1 Upgrade to settings-view@0.122 2014-06-16 11:26:51 -07:00
Kevin Sawicki 7aa233d9d6 Update markdown-preview@0.80 2014-06-16 11:26:51 -07:00
Ivan Zuzak 6c9df6d91a Handle mousedown events only for left button in editors 2014-06-16 19:57:58 +02:00
Kevin Sawicki 520e478447 Upgrade to tree-view@0.101 2014-06-16 09:56:20 -07:00
Allen Nelson fc462fcd21 added delete to end of line 2014-06-16 10:59:55 -05:00
Ivan Žužak 69b34b7377 Upgrade to language-ruby@0.28.0 2014-06-16 17:46:30 +02:00
Kevin Sawicki 3180bd2e3c Upgrade to markdown-preview@0.79 2014-06-16 08:24:51 -07:00
Ivan Žužak 286c7e8f18 Add overview to debugging guide 2014-06-15 13:27:04 +02:00
Ivan Žužak 1c6e2f06ed Mention debugging guide in contributing guide 2014-06-15 13:10:04 +02:00
Cheng Zhao 527a18fedc Upgrade to atom-shell@0.13.1 2014-06-15 12:02:13 +08:00
Kevin Sawicki 46e1a9254d Merge pull request #2609 from Bengt/patch-1
Add installation step of "C++ Toolchain" on Fedora
2014-06-14 07:41:27 -07:00
Bengt Lüers ae46f1a3e1 Add installation step of "C++ Toolchain" on Fedora 2014-06-14 16:16:22 +02:00
Ben Ogle 573c7f9621 Upgrade scandal to fix replacing across devices 2014-06-13 16:29:47 -07:00
Ben Ogle dbed45c68e Upgrade temp to 0.7.0 for the tracking feature 2014-06-13 16:29:28 -07:00
Nathan Sobo 9e6756ed6d Don't perform an update in response scroll view dimension changes
We always measure the scroll view in the ::componentWillUpdate hook, so
performing *another* update in response to the measurement causes an
invariant violation in react. Whenever we are measuring, we are always
already updating.
2014-06-13 17:07:41 -06:00
Ben Ogle 95818ab21f Revert "Upgrade scandal to fix issues with renaming across devices"
This reverts commit f555af0b88.
2014-06-13 15:58:35 -07:00
Kevin Sawicki 9cf50960a2 Merge pull request #2606 from atom/ks-windows-ci
Publish builds on Windows CI
2014-06-13 15:53:08 -07:00
Ben Ogle f555af0b88 Upgrade scandal to fix issues with renaming across devices 2014-06-13 15:47:49 -07:00
Kevin Sawicki 853ee3eec5 💄 2014-06-13 15:44:43 -07:00
Kevin Sawicki bb9e052c90 DRY up zip code 2014-06-13 15:44:34 -07:00
Kevin Sawicki 4bade1c976 💄 2014-06-13 15:40:46 -07:00
Kevin Sawicki 058d55c829 Run specs on all platforms 2014-06-13 15:28:40 -07:00
Kevin Sawicki dc323348b7 Only publish janky master builds 2014-06-13 15:25:21 -07:00
Kevin Sawicki 858e7b62a3 Remove logging 2014-06-13 15:25:13 -07:00
Kevin Sawicki 28015339d9 Add some logging 2014-06-13 15:19:20 -07:00
Kevin Sawicki ca86e0258f Only log error code 2014-06-13 15:12:06 -07:00
Kevin Sawicki 87fcc39045 Add missing path segment 2014-06-13 15:11:16 -07:00
Kevin Sawicki b78ff8c3a9 Load atomcredentials on Windows 2014-06-13 15:05:36 -07:00
Kevin Sawicki 01fdf016a9 📝 Document invalid .vcxproj file error
Refs #2430
2014-06-13 14:33:16 -07:00
Kevin Sawicki 655cce9fd4 Renable asset uploading 2014-06-13 14:14:58 -07:00
Kevin Sawicki f3ea2cd9e0 Add a command 2014-06-13 12:34:00 -07:00
Kevin Sawicki ebcae85f1a Log directory 2014-06-13 12:23:49 -07:00
Kevin Sawicki 0b79c31d45 Use full path 2014-06-13 12:02:04 -07:00
Kevin Sawicki d5ec8551e1 Speed up built temporarily by not running specs 2014-06-13 11:53:30 -07:00
Kevin Sawicki cd376c2d1d Try 7za 2014-06-13 11:45:53 -07:00
probablycorey 8d84a97b2b Move scroll view measurements to componentWillUpdate 2014-06-13 11:36:40 -07:00
Kevin Sawicki 0104d7e264 Zip built app on Windows 2014-06-13 11:36:29 -07:00
Kevin Sawicki 019cccc978 Remove unused variable 2014-06-13 11:36:29 -07:00
Kevin Sawicki 7f1d88a05d Always pass windows build until flaky specs pass 2014-06-13 11:36:29 -07:00
Kevin Sawicki ec754e5cd9 Merge pull request #2602 from joliv/patch-1
Add git req to linux build instructions
2014-06-13 10:55:00 -07:00
joliv e046bb52d7 📝 Add git req to linux build instructions
Pretty simple, but doesn't come on a clean install.
2014-06-13 17:49:10 +00:00
Kevin Sawicki 34be92b5b0 Log message for all commands
The first time you bootstrap, all the build modules and apm are
installed. Previously this was showing no output so it was unclear
whether things are hung or now.

This will also help easily identify which stage of the build
npm and node-gyp errors are occurring.
2014-06-13 10:06:45 -07:00
Kevin Sawicki fb0a15b1b3 Upgrade to markdown-preview@0.78 2014-06-12 16:55:28 -07:00
Corey Johnson e96d2dbd17 Add the simplest resize fix that will work. 2014-06-12 16:17:45 -07:00
Corey Johnson 025370b9f8 Add editor component resize spec 2014-06-12 16:17:18 -07:00
Nathan Sobo e26ab5513f Don't assign scrollLeft on model on 'scroll-left-changed' events
Fixes #2513

I'm not entirely sure why, but for some reason we're getting into an
feedback cycle when the scrollLeft position changes in certain cases. In
theory, this shouldn't happen because reassigning the same value
shouldn't emit a change event. But since we're about to end-of-life the
jQuery editor, I'd like to try fixing it this way for now.
2014-06-12 17:01:12 -06:00
Kevin Sawicki f623a4f2b5 Upgrade to markdown-preview@0.77 2014-06-12 14:54:25 -07:00
Corey Johnson 4186a4943b Remove react shims deprecations 2014-06-12 14:53:09 -07:00
Corey Johnson e179860519 Merge pull request #2571 from lee-dohm/bug-2526
Change line commenting to uncomment if all non-blank lines are commented out
2014-06-12 08:45:47 -07:00
Ivan Žužak 43f8596fb1 Merge pull request #2584 from atom/iz-fix-tab-unindent
Outdent only if a tab is matched at the start of the line
2014-06-12 17:39:23 +02:00
Ben Ogle 2c7d01e398 Merge pull request #2588 from atom/bo-fix-page-up-down
Fix pageUp and pageDown in the react editor
2014-06-11 17:30:59 -07:00
Ben Ogle 1bdf45f7d6 Fix gutter width
When you had a 1000 line file and you fold everything
into 10 lines, it would make the gutter width only large
enough for the 10 lines, so line 999 wouldnt properly
fit in the gutter.

Refs #2423
2014-06-11 17:28:12 -07:00
Ben Ogle 7e6e61905b Move the cursor on pageUp / pageDown
Previously it was only moving the scrollTop, but not the cursors. 
Affected on the react editor.

Refs #2423
2014-06-11 17:19:59 -07:00
Corey Johnson 01b4ff24b9 Dedupe grim 2014-06-11 16:50:45 -07:00
Corey Johnson 47e2cb4645 Update grim and its related modules 2014-06-11 16:50:45 -07:00
Ben Ogle & Nathan Sobo 236f4c5342 Upgrade git-diff to update diff correctly after comitting 2014-06-11 17:40:13 -06:00
Ben Ogle & Nathan Sobo 911390aba8 Upgrade find-and-replace for React fixes 2014-06-11 17:38:01 -06:00
Ben Ogle & Nathan Sobo 4569b76dd5 Don't call preventDefault for spaces to prevent browser scrolling 2014-06-11 17:16:19 -06:00
Ben Ogle & Nathan Sobo 1c410cbf5a Handle textInput events in EditorComponent instead of on InputComponent
This commit also changes input handling to be more like it was in the
previous editor. We're using textInput rather than input events because
they are emitted *before* characters are inserted, enabling much simpler
detection of characters inserted via the accented-character menu on
OS X.

Previously I avoided this because something about it was causing reflows
in the old editor, but in this editor that doesn't seem to be a problem,
and it's actually faster.
2014-06-11 16:40:46 -06:00
Nathan Sobo 5f602ad86e Merge pull request #2567 from atom/bo-scroll-speed
Slow the scroll speed
2014-06-11 14:44:20 -06:00
Kevin Sawicki 9da9c77e61 Add paths that work on Git 1.7 2014-06-11 13:24:54 -07:00
Kevin Sawicki 8ed05a4201 Only log spec output on failures 2014-06-11 13:24:13 -07:00
Kevin Sawicki a8533c1010 Fail build if any specs fail on Windows 2014-06-11 13:24:13 -07:00
Ben Ogle 87915f70e2 editor.scrollSensitivity option 2014-06-11 12:07:49 -07:00
Ben Ogle ec07cb9524 Slow the scroll speed 2014-06-11 12:07:48 -07:00
Corey Johnson d4ae3ac548 Upgrade to language-c@0.17.0 2014-06-11 12:04:40 -07:00
Nathan Sobo 1b4426e3ba Don't pause overflowchanged events after React editor updates
Fixes #2237

Previously, operations such as typing and scrolling were triggering
overflowchanged events on the editor, which concerned me because we
were performing lots of unnecessary measurements of the scroll view.
Now that we draw extra lines above and below the visible screen row
range, this doesn't happen, so we can remove this pausing code which
was delaying the resizing of the editor in certain situations.
2014-06-11 12:07:05 -06:00
Kevin Sawicki 32245b1d92 Remove humanizeKeystrokes specs
These are already tested thoroughly in underscore-plus and
they are now platform-specific now which this spec was not
expecting.
2014-06-11 10:59:08 -07:00
Nathan Sobo 030bcd6d4f Make react cursor the width of a default character at the end of lines
When the cursor is positioned before a character, we always make it the
width of that character. But at the end of a line, there is no character
to use to set the width, so we just use the defaultCharWidth.

This makes the block cursor visible on empty lines in vim-mode.
2014-06-11 11:54:10 -06:00
Kevin Sawicki f1628fb1e0 Only codesign on Mac OS X 2014-06-11 10:45:12 -07:00
Nathan Sobo 7c1a4a9e08 Don't clip range start/end in DisplayBuffer::pixelRectForScreenRange
Fixes #2583

This prevents the cursor from having 0 width inside atomic tokens.
2014-06-11 11:40:57 -06:00
Kevin Sawicki 3b1c70911f Upgrade to minidump 0.7 2014-06-11 10:30:28 -07:00
Kevin Sawicki 70fc084864 Upgrade to settings-view@0.121 2014-06-11 10:28:25 -07:00
Kevin Sawicki d9152e856b Upgrade to tree-view@0.100 2014-06-11 10:28:25 -07:00
Corey Johnson 10dba4b9a0 Revert "Upgrade find-and-replace@0.116.0"
This reverts commit efea4c6d05.
2014-06-11 10:23:29 -07:00
Corey Johnson 5e51445118 Update cursor z-index 2014-06-11 10:04:31 -07:00
Corey Johnson f4b7f86eb0 Revert "Remove editor-colors class from lines component"
This reverts commit 8cca198af1.
2014-06-11 10:02:16 -07:00
Ivan Zuzak 07308a4e04 Add test for outdenting with tabs after normal characters 2014-06-11 19:02:14 +02:00
Corey Johnson 8cca198af1 Remove editor-colors class from lines component 2014-06-11 09:53:56 -07:00
Ben Ogle efea4c6d05 Upgrade find-and-replace@0.116.0 2014-06-11 09:42:11 -07:00
Ivan Zuzak 588d9b97eb Unindent only if the tab is at the start of the line 2014-06-11 18:31:37 +02:00
Corey Johnson 4f77a371f4 Merge pull request #2497 from atom/cj-add-react-editor-shims
Add shims to the React View Editor
2014-06-11 09:06:40 -07:00
Corey Johnson 94dd1eed54 Merge remote-tracking branch 'origin/master' into cj-add-react-editor-shims
Conflicts:
	src/editor-component.coffee
2014-06-11 08:56:27 -07:00
Ben Ogle 09b91974a7 Fix casing on Grim import 2014-06-11 08:52:36 -07:00
Nathan Sobo 99611fad34 Give React editor lines and line numbers an opaque background
This ensures subpixel antialiasing works correctly. It was previously
present on both of these components but got dropped accidentally.
2014-06-11 08:51:19 -06:00
Nathan Sobo 1b026cc805 Set is-focused class on React editor's wrapper view for now 2014-06-11 08:37:16 -06:00
Nathan Sobo 4c0d87080a Update git-diff so specs pass with React editor enabled 2014-06-11 08:30:17 -06:00
Nathan Sobo a09eb96982 Upgrade bookmarks to pass specs with react editor enabled 2014-06-11 08:05:30 -06:00
Nathan Sobo 5531d54554 Upgrade autosave to support react editor focusout events 2014-06-11 08:00:04 -06:00
Nathan Sobo b73d267a5f Merge branch 'master' into cj-add-react-editor-shims 2014-06-11 07:34:41 -06:00
Nathan Sobo 5add0e4f70 Don't forceUpdate in setImmediate callback if editor is unmounted
This was throwing errors in the EditorComponent spec.

/cc @benogle, just so you're aware
2014-06-11 07:21:05 -06:00
Nathan Sobo 7040906473 Ignore null bytes when measuring character widths in React editor
Fixes #2391
2014-06-11 07:18:52 -06:00
Nathan Sobo 131aad24c0 Merge branch 'master' into cj-add-react-editor-shims 2014-06-11 06:48:16 -06:00
Nathan Sobo 64870c733b Add API for enabling/disabling input to support vim-mode's insert mode 2014-06-11 06:07:41 -06:00
Nathan Sobo 68ca6a0a0d Merge pull request #2532 from karlin/select-paragraphs
Adds select-to-beginning-of-next/previous-paragraph commands
2014-06-11 05:39:30 -06:00
Kevin Sawicki 376010722e Upgrade to language-javascript@0.27 2014-06-10 18:22:17 -07:00
Kevin Sawicki 31cf907b48 💄 2014-06-10 16:54:25 -07:00
Kevin Sawicki 28af52dfab Upgrade to bracket-matcher@0.45 2014-06-10 15:44:02 -07:00
probablycorey 9e7e77bdf8 Merge remote-tracking branch 'origin/master' into cj-add-react-editor-shims
Conflicts:
	src/gutter-component.coffee
2014-06-10 15:42:23 -07:00
probablycorey d0385a90ea Revert "Use ReactEditorView in the workspace view spec"
This reverts commit b46ac9080c.
2014-06-10 15:37:49 -07:00
probablycorey f9c4af301d Shim scrollView outlet 2014-06-10 15:19:54 -07:00
Lee Dohm 3cf4b7b3e4 Use imperative style and standard JS regex
Based on pull request feedback
2014-06-10 14:54:01 -07:00
Kevin Sawicki 8523df58b0 Upgrade to image-view@0.35 2014-06-10 14:38:19 -07:00
Kevin Sawicki bd2c2bfe46 Merge pull request #2577 from jugglingnutcase/improve-npm-verify-on-win32
Fix NPM verification failures after `script/clean` on Win32
2014-06-10 14:38:04 -07:00
James R Sconfitto f5a70da6f0 🏁 Use "npm.cmd" to verify npm 2014-06-10 17:26:57 -04:00
probablycorey a8186b15cf Upgrade to bracket-matcher@0.44.0 2014-06-10 13:07:29 -07:00
Kevin Sawicki fe088ba16a Use local npm version when available 2014-06-10 11:45:47 -07:00
Nathan Sobo 562a047b9e Only requestUpdate when scrolling stops if component is still mounted
Fixes #2566
2014-06-10 12:13:57 -06:00
Kevin Sawicki 634c995a71 Verify npm version
This will end up in log output when people report build issues and now
the bootstrap will error when the npm version is <1.4.
2014-06-10 11:05:29 -07:00
Kevin Sawicki 153faefaf9 📝 Link to node.js wiki install instructions
Closes #2340
2014-06-10 09:26:38 -07:00
Kevin Sawicki 636a8a8286 📝 💄 2014-06-10 09:19:39 -07:00
Kevin Sawicki faada2de30 📝 Mention build-essential package
Closes #2384
2014-06-10 09:18:12 -07:00
probablycorey e762efa97e Upgrade to settings-view@0.120.0 2014-06-10 09:00:04 -07:00
Lee Dohm a2c9c21cfb Change line commenting to ignore blanks if any non-blanks
Fixes #2526

This slightly alters the heuristic for deciding whether to uncomment
or to comment blocks of code. Previously, it would key off the first
line of code and only if that was commented would it check the other
lines. Now it checks all lines of code and uncomments the block if all
non-blank lines are commented out.
2014-06-09 21:31:46 -07:00
Lee Dohm ea4f99e5ac Add test to illustrate the problem
See #2526
2014-06-09 21:18:03 -07:00
probablycorey b46ac9080c Use ReactEditorView in the workspace view spec 2014-06-09 17:35:44 -07:00
Kevin Sawicki 24a463b18d Upgrade to find-and-replace@0.115 2014-06-09 17:08:57 -07:00
Kevin Sawicki 3d28a04ffa Upgrade to command-palette@0.22 2014-06-09 16:43:30 -07:00
Ben Ogle 326542644d Upgrade git-diff@0.29.0 bookmarks@0.23.0 2014-06-09 16:33:27 -07:00
Ben Ogle 45f70bb783 Merge pull request #2507 from atom/bo-gutter-api
Add an API for decorations; render stuff in the gutter again
2014-06-09 16:30:48 -07:00
Corey Johnson a227ed7586 Add toggleSoftWrap and toggleSoftTabs 2014-06-09 16:10:29 -07:00
Corey Johnson 5288666bfc Revert "Export ReactEditorView as EditorView"
This reverts commit be20148518.
2014-06-09 16:07:00 -07:00
Corey Johnson 0396aac11f Add several setter shims to ReactEditorView 2014-06-09 16:03:20 -07:00
Ben Ogle 5db163a328 💄 2014-06-09 16:01:29 -07:00
Kevin Sawicki 4d12e025e4 Upgrade to archive-view@0.32 2014-06-09 15:50:26 -07:00
Corey Johnson be20148518 Export ReactEditorView as EditorView 2014-06-09 15:50:08 -07:00
Ben Ogle 756347a716 Add has-selection class to the editor div when there is a selection 2014-06-09 15:45:32 -07:00
Corey Johnson 7379627fcb Add several scroll shims to ReactEditorView 2014-06-09 15:37:02 -07:00
Kevin Sawicki 4b02d3ff61 Upgrade to tree-view@0.99 2014-06-09 15:33:47 -07:00
Ben Ogle dc6836dc2d Add specs for cursor-line decorations 2014-06-09 15:18:12 -07:00
Corey Johnson a2c4caf7ad Move scroll methods below afterAttach method 2014-06-09 15:14:48 -07:00
Corey Johnson e8b6fb919e Add shim for ReactEditorView::redraw 2014-06-09 15:06:49 -07:00
Ben Ogle 2087426afc Specs for decorationsForBufferRow 2014-06-09 15:05:43 -07:00
Kevin Sawicki b703ca0ebf Upgrade to markdown-preview@0.76 2014-06-09 15:04:32 -07:00
Corey Johnson 601c877136 Add pageDown/pageUp to ReactEditorView 2014-06-09 14:46:47 -07:00
Ben Ogle 6c609cb7d2 Revert "Move setImmediate into requestUpdate; Batch updates"
This reverts commit ad522e6ab1.
2014-06-09 14:45:43 -07:00
Corey Johnson 31d7110bba Remove getPageRows from API 2014-06-09 14:42:47 -07:00
Ben Ogle ad522e6ab1 Move setImmediate into requestUpdate; Batch updates 2014-06-09 14:40:59 -07:00
Ben Ogle e59f242f19 Move click gutter into the GutterComponent 2014-06-09 14:11:41 -07:00
Ben Ogle bae625a894 Add spec for when lines become foldable 2014-06-09 14:04:24 -07:00
Ben Ogle b5532ee4a3 💄 spec
Use the event system to click on the gutter
2014-06-09 14:04:24 -07:00
Ben Ogle 31b4b7a372 Speed up decoration removal and use less temp objects. 2014-06-09 14:04:24 -07:00
Ben Ogle 1a1ed56419 Oh man. Render only once! 2014-06-09 14:04:24 -07:00
Ben Ogle 13be8d5139 Add a cursor-line decoration to the gutter 2014-06-09 14:04:24 -07:00
Ben Ogle 312901ff68 Use decorations for folds.
They are more efficient when re-rendering.
2014-06-09 14:04:24 -07:00
Ben Ogle 346b6007ca Allow for typeless decorations that apply to everything
If you are querying for `type: ‘gutter’` it will return the typeless 
decorations as well.
2014-06-09 14:04:24 -07:00
Ben Ogle a8df77243c Fix spec
I changed the width of the gutter in b0af7cfc12729e9ef1320c0b178cc024bc0e60cc
16 characters is still within the break range of the word 'wraps'
2014-06-09 14:04:23 -07:00
Ben Ogle f30641da44 💄 Remove log line. 2014-06-09 14:04:23 -07:00
Ben Ogle 049531e495 Add comment 2014-06-09 14:04:23 -07:00
Ben Ogle e8594ccec4 💄 Change var names for consistency 2014-06-09 14:04:23 -07:00
Ben Ogle 65ab436da2 API docs 2014-06-09 14:04:23 -07:00
Ben Ogle e7bd8026d2 Deprecate old class functions 2014-06-09 14:04:23 -07:00
Ben Ogle d9e731c84a Update styles on the foldable icons 2014-06-09 14:04:23 -07:00
Ben Ogle 8e1e5a3760 Add ability to click the fold icons 2014-06-09 14:04:23 -07:00
Ben Ogle 02594e3f7a 💄 Use for loops 2014-06-09 14:04:23 -07:00
Ben Ogle da5bf6c74c Defensive on the decorations 2014-06-09 14:04:23 -07:00
Ben Ogle 5cd8f5952f Make editor push decorator updates to the gutter 2014-06-09 14:04:23 -07:00
Ben Ogle 1b8be75a76 Add specs for the editor interface
for decorations in ranges and associated with markers
2014-06-09 14:04:23 -07:00
Ben Ogle 235180cf03 Add specs for fold rendering 2014-06-09 14:04:23 -07:00
Ben Ogle a13990155f Use setImmediate rather than setTimeout 2014-06-09 14:04:23 -07:00
Ben Ogle a72f11594d 💄 remove decoratorType instance var 2014-06-09 14:04:23 -07:00
Ben Ogle 86d7a45a78 Remove the comment about overlap
Turns out it’s already dealing with overlap by not emitting events
when there is an overlap.
2014-06-09 14:04:22 -07:00
Ben Ogle a229d696d5 Add addDecorationForBufferRowRange and related remove 2014-06-09 14:04:22 -07:00
Ben Ogle ef6ca3853d 💄 2014-06-09 14:04:22 -07:00
Ben Ogle 9e86d5f5f1 💄 Clean up based on feedback 2014-06-09 14:04:22 -07:00
Ben Ogle 3ef91c61d9 Add api for getStartBufferPosition and related fns 2014-06-09 14:04:22 -07:00
Ben Ogle 5bae58eeb1 Clean up specs based on feedback. 2014-06-09 14:04:22 -07:00
Ben Ogle 6ce859774a Name changes 2014-06-09 14:04:22 -07:00
Ben Ogle fa4a6e2d71 Nof 2014-06-09 14:04:22 -07:00
Ben Ogle 9ee54801a2 Implement removeDecorationsForMarker 2014-06-09 14:04:22 -07:00
Ben Ogle 79578e08ab Specs for marker decorations 2014-06-09 14:04:22 -07:00
Ben Ogle 732e23b8ea Add initial addDecorationForMarker() 2014-06-09 14:04:22 -07:00
Ben Ogle d51894103d Debounce the rendering of decorations 2014-06-09 14:04:22 -07:00
Ben Ogle eb59196c02 Rendering decorations works well.
Also specs.
2014-06-09 14:04:22 -07:00
Ben Ogle 142eedd705 Renders decoration changes. 2014-06-09 14:04:22 -07:00
Ben Ogle 77d269c6d9 Beginning of decorations 2014-06-09 14:04:22 -07:00
Ben Ogle b23009a8f3 fold classes work 2014-06-09 14:04:21 -07:00
Corey Johnson 84de8c1bfd Move benchmark code to the end of the editor component 2014-06-09 14:01:45 -07:00
Kevin Sawicki 6a9faee109 Prepare 0.104 release 2014-06-09 14:01:14 -07:00
Corey Johnson 4d6737230a Remove unused mousewheel event spec 2014-06-09 13:55:19 -07:00
Corey Johnson 362f696e3e Add setFontFamily and setFontSize to ReactEditorView 2014-06-09 13:51:00 -07:00
Corey Johnson 677d3abe0e Add ::getFontFamily 2014-06-09 13:51:00 -07:00
Corey Johnson c78f9137cc Make method style consistent with the rest of the file 2014-06-09 13:51:00 -07:00
Nathan Sobo d8d378e083 Revert "Upgrade space-pen now that problem with 3.2.4 is fixed"
This reverts commit 7dcafb44f1.
2014-06-09 13:58:09 -06:00
Nathan Sobo 8cf9e1990b Add ReactEditorView::getModel shim 2014-06-09 13:47:36 -06:00
Nathan Sobo e9f116a14e Request update when cursors move outside of a batch update 2014-06-09 13:32:42 -06:00
Nathan Sobo b2253ab7ce Add ReactEditorView::insertText shim 2014-06-09 13:32:42 -06:00
Nathan Sobo fc5dc46e73 Make dummy line number have a buffer row of -1
This prevents accidentally returning the dummy line number when asking
for line numbers for buffer row 0 using shim code.
2014-06-09 13:32:42 -06:00
Corey Johnson cb9d488a1e Upgrade to spell-check@0.37.0 2014-06-09 11:20:45 -07:00
Kevin Sawicki 389b5c7891 Remove script/install-cli
The CommandInstaller class now has native module dependencies that are
compiled with apm so invoking it directly from node is no longer possible.

This can still be done using the grunt install task.

Closes #2555
2014-06-09 11:02:26 -07:00
Ben Ogle 6bf97f7a1a Upgrade to find-and-replace@0.114.0 2014-06-09 10:57:31 -07:00
Corey Johnson d0639393ca 0.103.0 2014-06-09 09:53:20 -07:00
Kevin Sawicki 7ae6cba337 Upgrade to tree-view@0.98 2014-06-09 09:32:06 -07:00
Kevin Sawicki a3e85d6758 Upgrade to first-mate 1.7 2014-06-09 09:18:58 -07:00
Kevin Sawicki decce0e3a1 Merge pull request #2561 from batjko/master
Add classic copy/paste to Linux and Win32 keymaps
2014-06-09 09:06:18 -07:00
batjko aa2868efbf Classic copy/paste added to Linux and Win32
Ctrl+Insert: Copy
Shift+Insert: Paste
2014-06-09 14:39:00 +01:00
Nathan Sobo 8521114c08 Fix failures associated with not passing focused: true on pane splits 2014-06-09 17:09:02 +09:00
Nathan Sobo 43b5a9cfd0 Don't set focused: true on new pane when splitting
This causes the active item to change in the model before the associated
view can be added, which causes problems with the ReactEditorView having
methods called on it before its afterAttach hook creates the component.

We call Pane::activate subsequently unless activation is suppressed,
which will focus the pane anyway, so this was redundant.
2014-06-09 16:48:51 +09:00
Nathan Sobo 4387e16496 Emit selection:changed events if editor is alive after update 2014-06-09 16:13:09 +09:00
Nathan Sobo 6f3ebe8d0c Add ReactEditorView::hiddenInput shim 2014-06-09 15:16:38 +09:00
Nathan Sobo c972d9b022 Get invisibles from component state 2014-06-09 15:11:16 +09:00
Nathan Sobo b1563fdfc0 Destroy item's of last pane even if the pane itself is not destroyed
We always want to preserve at least one pane, so we don't call destroy
on the pane if it is the last pane. However, we still want to destroy
its items. This was previously relying on the view to destroy the
underlying item, which isn't as reliable as doing it in the model.
2014-06-09 15:04:51 +09:00
Nathan Sobo a2c41a2ae3 Don't use the react editor in EditorView specs 2014-06-09 14:52:56 +09:00
Nathan Sobo 21623b9c37 Merge branch 'master' into cj-add-react-editor-shims
Conflicts:
	package.json
2014-06-09 11:56:13 +09:00
Nathan Sobo 7dcafb44f1 Upgrade space-pen now that problem with 3.2.4 is fixed 2014-06-09 11:01:06 +09:00
Ivan Žužak f9c975bba7 Add debugging guide to list of guides 2014-06-07 11:45:25 +02:00
Cheng Zhao 1c6f7b00eb Merge pull request #2524 from atom/atom-shell-v0.13.0
Support 32bit build on Linux
2014-06-07 15:25:57 +08:00
Cheng Zhao fc1709f113 📝 Mention 32bit arch is supported. 2014-06-07 14:09:03 +08:00
Cheng Zhao 35c2ef09a0 Support generating i386 deb file. 2014-06-07 14:09:03 +08:00
Cheng Zhao dbbf310e36 Upgrade to atom-shell@0.13.0 2014-06-07 14:09:03 +08:00
Cheng Zhao ee1c17d787 Upgrade to grunt-download-atom-shell@0.8.0 2014-06-07 14:09:03 +08:00
Nathan Sobo fe3ea229a2 Prevent focus loss on double click without breaking single click focus
Previously, we stopped propagation on mousedown events to prevent
certain cases where focus was being lost after double clicking to select
a word.

Unfortunately, this also broke the ability to focus the editor by
clicking it. When investigating this, I noticed that whenever we lost
focus, the target of the mousedown event was always the cursor. So I
tried setting `pointer-events: none` on cursors and can no longer
reproduce the double-click issue.

/cc @probablycorey
2014-06-07 12:37:40 +09:00
Ben Ogle 381ebe1a38 Upgrade to solarized-dark-syntax@0.17.0 2014-06-06 17:22:21 -07:00
Kevin Sawicki 965a65d6f8 Upgrade to language-sass@0.13 2014-06-06 11:51:46 -07:00
Kevin Sawicki 25b641125d 📝 Remove Weird Stuff 2014-06-06 11:04:01 -07:00
Kevin Sawicki 53aff00218 Merge pull request #2529 from strugee/master
Add troubleshooting long path issues for Windows
2014-06-06 11:02:59 -07:00
Kevin Sawicki 9f8e1fbb80 Upgrade to image-view@0.34 2014-06-06 10:53:51 -07:00
Kevin Sawicki 5e7a26dc9d Prepare 0.102 release 2014-06-06 10:42:40 -07:00
Kevin Sawicki 7ca6277403 Upgrade to apm 0.68 2014-06-06 10:28:04 -07:00
Kevin Sawicki 774e86da8d Upgrade to bracket-matcher@0.43 2014-06-06 09:55:11 -07:00
Kevin Sawicki 893d349594 Upgrade to apm 0.67 2014-06-06 09:27:04 -07:00
Kevin Sawicki f7d18154e7 Upgrade to markdown-preview@0.74 2014-06-06 09:15:15 -07:00
Kevin Sawicki 4f5098f0a3 Upgrade to language-gfm@0.39.0 2014-06-06 09:13:17 -07:00
Kevin Sawicki e04c6b4732 Upgrade to language-c@0.16.0 2014-06-06 09:04:08 -07:00
Kevin Sawicki f31cc1b0da Return early when skipping remove command 2014-06-06 08:58:34 -07:00
Kevin Sawicki 3b6711d83d Only spawn removed command for paths that exist
Prevents errors being logged when trying to remove folders that
don't exist on Windows.
2014-06-06 08:56:13 -07:00
Corey Johnson 776e8a308c Merge pull request #2522 from atom/cj-fix-react-double-click-bug
Fix unresponsive text input after double-clicking
2014-06-06 08:54:44 -07:00
Kevin Sawicki d62ac36062 Merge pull request #2531 from radum/master
better script/clean removal for windows
2014-06-06 08:52:39 -07:00
Kevin Sawicki 1734182191 Upgrade to atom-package-manager@0.66 2014-06-06 08:45:09 -07:00
probablycorey e0b54d8501 Use proper variable name 2014-06-06 08:06:16 -07:00
Nathan Sobo 2f3d74c047 Merge branch 'master' into cj-add-react-editor-shims
Conflicts:
	src/react-editor-view.coffee
2014-06-06 23:59:54 +09:00
Nathan Sobo 66661f2d10 Make cursor visible when .editor-contents is focused 2014-06-06 23:58:39 +09:00
Nathan Sobo cae5cdc81c Put the .editor class on the wrapper, not the component
Things depend on the react editor wrapper having the .editor class,
but inside the editor, we can control the style. I changed the
component's div to be .editor-contents for now. We can eliminate this
extra style when we eliminate the wrapper.
2014-06-06 23:52:35 +09:00
karlin 2f45685a06 remove focused describes 2014-06-06 08:40:15 -04:00
karlin 8577bf9a4c select to beginning of next or previous paragraph commands 2014-06-06 08:37:59 -04:00
Radu Micu 8e6dcf43b0 better script/clean removal for windows
Now `script/clean` uses `del /F /Q /S` to cleanup the folders but `del /S` deletes specified files from all subdirectories, so if we pass a folder as a parameter it will only delete the files within the folder and all subfolders recursively but not the actual folders. And this can cause problems, see Issue #2487

A better way is to use `rmdir /S /Q` as it takes care of the folder itself and it's contents.
/S - removes all directories and files in the specified directory in addition to the directory itself. (removes the directory tree)
/Q - obvious this is quite mode

I tested this approach on a couple machines that needed a clean before building and works OK with `rmdir`. It might give a warning in the console like `The system cannot find the file specified.` because not all of them are there but it can be ignored as the script will finish running.
2014-06-06 11:26:43 +01:00
Alex Jordan 15bb3ee31d add troubleshooting long path issues for Windows 2014-06-06 01:04:23 -07:00
Nathan Sobo 2234ff78c7 Include line-number class for backward compatibility 2014-06-06 16:54:28 +09:00
Nathan Sobo fca6a7758b Don't run afterAttach hooks twice on ReactEditorView 2014-06-06 16:46:14 +09:00
Nathan Sobo 7dae04b8d4 Add ReactEditorView::getText 2014-06-06 16:46:14 +09:00
probablycorey 7afb25cead Remove semicolons 2014-06-05 17:57:25 -07:00
probablycorey b0ddab842b Stop mouseDown event from propagating.
Closes #2459
2014-06-05 17:22:12 -07:00
Kevin Sawicki a2d08547b6 Downgrade to space-pen 3.2.0
CI had 243 failures after upgrading to 3.2.4
2014-06-05 17:06:48 -07:00
Kevin Sawicki a6aa94110c Upgrade to space-pen 3.2.4 2014-06-05 16:55:51 -07:00
Kevin Sawicki 8f5018f925 Merge pull request #2515 from atom/star-api-docs
📝 Add documentation for Atom.io Star API
2014-06-05 16:24:03 -07:00
Kevin Sawicki a47feb9dd8 📝 Minor tweaks 2014-06-05 16:23:40 -07:00
Kevin Sawicki 9ef4ea180b Upgrade to language-css@0.17 2014-06-05 16:13:05 -07:00
Kevin Sawicki 24be115cf6 Upgrade to language-php@0.15 2014-06-05 16:11:31 -07:00
Kevin Sawicki d61504873a Upgrade to solarized-dark-syntax@0.16 2014-06-05 16:10:44 -07:00
Kevin Sawicki ae7047571f Upgrade to atom-dark-syntax@0.16 2014-06-05 16:09:59 -07:00
Kevin Sawicki 40fdce9c00 Upgrade to solarized-light-syntax@0.8 2014-06-05 16:09:12 -07:00
Kevin Sawicki d3ede06cad Upgrade to language-ruby@0.27 2014-06-05 16:07:58 -07:00
Kevin Sawicki 31d25209a0 Upgrade to tree-view@0.97 2014-06-05 15:09:25 -07:00
Corey Johnson d7ee81418d Remove editor class form ReactEditorView, it is on EditorComponent
I couldn’t recreate the problem with activation events mentioned
https://github.com/atom/atom/commit/fa66689c07f3c64cdf338da1c9a034d06ec54f9c
2014-06-05 14:13:41 -07:00
Ivan Žužak 1d2ce26b81 Merge pull request #2502 from atom/iz-debugging-atom-docs
Add debugging guide
2014-06-05 22:22:36 +02:00
Corey Johnson 56095187e6 Only show the first 10 lines of a spec failure and its stacktrace
It is difficult to scroll through stack traces when there are huge
failure messages. This limits the length to 10 lines, if you hover
over the message it will expand.

Somewhat related to #1173
2014-06-05 11:36:58 -07:00
Corey Johnson 04e4b917b0 Only show the first 10 lines of a spec failure and its stacktrace
It is difficult to scroll through stack traces when there are huge
failure messages. This limits the length to 10 lines, if you hover 
over the message it will expand.

Somewhat related to #1173
2014-06-05 11:36:26 -07:00
Kevin Sawicki 58af226359 Upgrade to apm 0.65
Closes #2516
2014-06-05 11:19:37 -07:00
Daniel Hengeveld 88cb7e2f96 'Returns package' -> 'Returns a package' 2014-06-05 11:14:34 -07:00
Daniel Hengeveld 728aacd3fb 📝 Add documentation for Atom.io Star API 2014-06-05 11:09:29 -07:00
Kevin Sawicki 4f56bc32dc Upgrade to snippets@0.45 2014-06-05 10:50:45 -07:00
Kevin Sawicki d16bd0d7eb 💄 2014-06-05 10:09:27 -07:00
Kevin Sawicki b6fc17e363 Mention sudo might be required for npm config
This will depend on how you've installed and configured npm in the
PATH

Refs #2342
2014-06-05 09:59:44 -07:00
Kevin Sawicki b6056a44e2 Merge pull request #2506 from Bengt/patch-1
Add concrete install instructions for Fedora Linux
2014-06-05 09:56:02 -07:00
Kevin Sawicki 6ce4efa3ce Upgrade to apm 0.64 2014-06-05 09:45:44 -07:00
Kevin Sawicki 0c0f143f91 Only print python version when checked 2014-06-05 08:53:02 -07:00
Ben Ogle 2a5ac13e4c Merge pull request #2510 from wulftone/patch-2
Add alt-# shortcuts for pane switching in linux
2014-06-04 22:12:33 -07:00
Trevor Bortins 6cc6c81493 Update linux.cson 2014-06-04 22:11:29 -07:00
Trevor Bortins a215cd77ed Add alt-# shortcuts for pane switching 2014-06-04 22:06:57 -07:00
Kevin Sawicki ddad8ef45c Merge pull request #2508 from onkrot/master
Changing mkdeb script
2014-06-04 20:34:58 -07:00
onkrot c1ce1e624d Changing mkdeb script 2014-06-05 09:29:01 +06:00
Kevin Sawicki d611dbb36a Upgrade to language-sass@0.12 2014-06-04 20:27:38 -07:00
Nathan Sobo 2ee2efeb84 Add ReactEditorView::isFocused shim 2014-06-05 12:07:52 +09:00
Nathan Sobo 367e429162 Add ReactEditorView::setText 2014-06-05 12:03:56 +09:00
Nathan Sobo 8417dfd10e Add the ReactEditorView::updateDisplay shim 2014-06-05 12:01:09 +09:00
Nathan Sobo 15d1c5f992 Add ReactEditorView::setWidthInChars shim 2014-06-05 11:59:02 +09:00
Nathan Sobo e0b1a0cfa7 Add ReactEditorView::getFontSize 2014-06-05 11:58:48 +09:00
Nathan Sobo cfd9baa0d6 Use Editor::getVisibleRowRange instead of the rendered row range
The rendered row range is larger than the visible row range to force the
DOM to break up repaints. This is a more accurate method to us.
2014-06-05 11:54:28 +09:00
probablycorey 1d80c35708 Add active property 2014-06-04 17:33:49 -07:00
probablycorey ad88ace448 Add getFirstVisibleScreenRow and getFirstVisibleScreenRow 2014-06-04 17:18:00 -07:00
probablycorey a6d870bf4c Add underlayer an overlayer classes to the correct elements 2014-06-04 16:32:50 -07:00
Bengt Lüers 646d8a5966 Add concrete install instructions for Fedora Linux 2014-06-05 01:05:57 +02:00
Kevin Sawicki 7be8bd7118 Upgrade to settings-view@0.119 2014-06-04 14:55:45 -07:00
Kevin Sawicki e98b43e479 Upgrade to language-python@0.18 2014-06-04 14:52:40 -07:00
Corey Johnson c167166add Merge pull request #2457 from atom/cj-add-python-check
Create requirement verifier for script/bootstrap
2014-06-04 14:43:30 -07:00
Kevin Sawicki 68964f1ca1 🏁 Don't crash when closing spec window
Focusing the window during the blur event that fires when the
window is closed currently crashes the app on Windows.

Closes #2485
2014-06-04 14:33:39 -07:00
probablycorey fbcb152107 Reorder if/else check 2014-06-04 14:07:59 -07:00
Kevin Sawicki c51ede98fc 🐧 Use ctrl-alt-shift-p for logging cursor scopes 2014-06-04 14:01:33 -07:00
probablycorey 51183f4be5 Use process.exit 2014-06-04 13:14:00 -07:00
Kevin Sawicki bf16527aa6 🏁 Use ctrl-alt-shift-p for logging
Previously this was bound to both log cursor specs and run package
specs and run package specs seemed to be a more valuable and commonly
run command.
2014-06-04 13:10:59 -07:00
Ivan Zuzak 2cce36694d Add second part of the debugging guide 2014-06-04 22:07:44 +02:00
Kevin Sawicki 11fbb33a24 Upgrade to find-and-replace@0.113 2014-06-04 12:50:21 -07:00
probablycorey 2e5c844d46 Use childProcess directly 2014-06-04 12:44:51 -07:00
probablycorey 0b088e8b72 💄 2014-06-04 12:34:18 -07:00
probablycorey 1479197ffb Add better python error message 2014-06-04 12:32:14 -07:00
probablycorey c79c7b7a98 Make all verify requirements methods take callbacks
This moves the error handling to bootstrap and also allows us to 
display a success message.
2014-06-04 12:16:16 -07:00
Kevin Sawicki dfb72c287b Upgrade to find-and-replace@0.112 2014-06-04 11:59:22 -07:00
Kevin Sawicki 1db983a0a0 Upgrade to apm 0.62 2014-06-04 11:46:01 -07:00
probablycorey 3ead596a5d Assume the PYTHON env points to python.exe 2014-06-04 11:44:52 -07:00
Kevin Sawicki b8a2139c05 Upgrade to jasmine-tagged 1.1.2 2014-06-04 11:29:27 -07:00
probablycorey 99af9e2c33 Update error messages 2014-06-04 11:10:14 -07:00
probablycorey b7bd11a883 Reuse pythonExecutable variable 2014-06-04 11:09:50 -07:00
probablycorey 1ac40b2673 Mimic Atom’s if/else style convention 2014-06-04 10:55:10 -07:00
probablycorey 5434a26636 Rename postVerification method to bootstrap 2014-06-04 10:53:05 -07:00
probablycorey 50445a73bd Merge branch 'jugglingnutcase-exec-python-for-version' into cj-add-python-check 2014-06-04 10:48:47 -07:00
Kevin Sawicki ff9c031f57 Use path.join instead of path.resolve
Applies commit 41ab48b to spec-bootstrap.coffee
2014-06-04 10:01:45 -07:00
Kevin Sawicki c1ebbf36be Add missing l to global 2014-06-04 09:52:20 -07:00
Kevin Sawicki 8717547db4 Normalize resource path in remaining locations 2014-06-04 09:45:27 -07:00
Kevin Sawicki e99996d5b4 Match backslashes in stack traces on Windows 2014-06-04 09:38:13 -07:00
Kevin Sawicki 7c4a32fffa Normalize resource path in AtomWindow constructor 2014-06-04 08:46:40 -07:00
Ivan Žužak 196729e6d2 Issue reports should include Atom version and OS 2014-06-04 17:31:11 +02:00
Ivan Žužak db94aa94eb Mention how to get the full stack trace for errors 2014-06-04 17:22:55 +02:00
Ivan Žužak f670673baf Move explanation for unset! example into the text 2014-06-04 17:11:42 +02:00
Ivan Zuzak f5bd6a6baf first part of debugging guide 2014-06-04 16:56:09 +02:00
Ivan Žužak 9e20cefd4b Add example for unset! directive 2014-06-04 16:33:22 +02:00
Nathan Sobo fa66689c07 Add .editor class to react wrapper for package activation events 2014-06-04 21:07:13 +09:00
Nathan Sobo 905b28975e Add split methods 2014-06-04 21:06:41 +09:00
Nathan Sobo 7e5f667b31 Don't assume ::component is defined 2014-06-04 21:06:27 +09:00
Nathan Sobo f103e72c01 Remove exceptions related to unassigned lineHeight
These exceptions break specs when simulateDomAttachment is used. They
were only present to ensure correct sequencing during development of the
react editor, so it's safe to remove them for now.
2014-06-04 21:05:29 +09:00
Nathan Sobo 6cba6af743 Temporary: Enable react editor for specs on this branch so we get CI feedback 2014-06-04 19:18:54 +09:00
Nathan Sobo eeb44407e3 Add ReactEditorView::getModel 2014-06-04 19:15:56 +09:00
Nathan Sobo 68df603512 Upgrade space-pen to make $.fn.view work with nodes appended w/o jQuery
The autosave package uses $.Event.targetView on a node that's managed
by React. This upgrade to SpacePen allows us to retrieve the containing
SpacePen view.
2014-06-04 19:15:56 +09:00
James R Sconfitto 3f8d7d54cf 🏁 Verify python version for build
References:
https://github.com/TooTallNate/node-gyp/blob/56dcb889091a6a0594854ccc517e498b21078d5f/lib/configure.js
2014-06-03 22:20:33 -04:00
Kevin Sawicki b5703ff57a Normalize resource path before creating app
This ensures the drive letter case is consistent with the format
used by require.
2014-06-03 17:40:08 -07:00
Kevin Sawicki f97db691c3 Add back core spec require
This was accidentally deleted in #2462
2014-06-03 17:26:02 -07:00
Kevin Sawicki 41ab48bc6e Use path.join instead of path.resolve
This ensures the case of the path is consistent with how require resolves
paths.

Closes #2486
2014-06-03 17:19:00 -07:00
Corey Johnson 087b52c9b4 Remove unnecessary append method. 2014-06-03 17:13:23 -07:00
Corey Johnson 18f7297968 Use actual property for overlayer 2014-06-03 17:12:56 -07:00
Corey Johnson 3cd34e0b4d Add gutter.getLineNumberElement shim 2014-06-03 15:25:26 -07:00
Kevin Sawicki ae1b640725 Upgrade to pathwatcher 1.3.2 2014-06-03 15:14:24 -07:00
Corey Johnson 25e3e46166 Make overlayer a property 2014-06-03 14:57:46 -07:00
Kevin Sawicki dc49875af9 Upgrade to underscore-plus 1.4.1 2014-06-03 14:57:21 -07:00
Kevin Sawicki a36454c86c Upgrade to underscore-plus 1.4 2014-06-03 14:42:28 -07:00
Kevin Sawicki 8fa68c488d Upgrade to spell-check@0.36 2014-06-03 14:42:12 -07:00
Corey Johnson 2c84d69ff2 Add overlayer shim 2014-06-03 14:40:30 -07:00
Corey Johnson 3fb28803b5 Add append shim 2014-06-03 14:40:17 -07:00
Kevin Sawicki a25cf0a899 Upgrade to bracket-matcher@0.42 2014-06-03 12:47:15 -07:00
Kevin Sawicki 6e1efdf2ee Check for that grunt command exists before spawning 2014-06-03 12:10:37 -07:00
Corey Johnson 8e095d7b5b Merge pull request #2164 from steffengy/fix-indent
Fix indenting of HTML tags for instance. Fix #1294
2014-06-03 12:01:44 -07:00
Ivan Žužak 9899e7f2e3 Merge pull request #2493 from atom/iz-update-build-docs
Add links to build error reports in build docs
2014-06-03 20:45:58 +02:00
Ivan Zuzak a62a0f4bb7 add links to build error reports in build docs 2014-06-03 20:38:38 +02:00
Corey Johnson dac792a243 Remove .editor class from ReactEditorView
ReactEditorView and EditorComponent were using the editor class. This
caused context menus that used `.editor` as the selector to display
twice.
2014-06-03 11:36:55 -07:00
Kevin Sawicki 31b3d8f967 Add missing require 2014-06-03 11:06:02 -07:00
Ben Ogle 55fb816998 Upgrade to base16-tomorrow-dark@0.16.0 2014-06-03 10:58:31 -07:00
Corey Johnson ce527aea10 Pull out menu item building into seperate method 2014-06-03 10:51:46 -07:00
Kevin Sawicki a7a9301f25 Quote all arguments to cmd.exe
This is required since the command or arguments may have spaces that will
be interpreted as separate arguments unless quotes surround it.

Closes #2231
Closes atom/symbols-view#37
2014-06-03 10:50:00 -07:00
Corey Johnson 0f551d4b11 Add expectations to context-menu specs 2014-06-03 10:44:45 -07:00
Corey Johnson 35a7bb115d Fix context-menu specs 2014-06-03 10:44:45 -07:00
Kevin Sawicki 553abc2009 Merge pull request #2492 from p-e-w/linux-dev-tools-keybinding
🐧 Make "Developer Tools" key binding match Chrome
2014-06-03 10:37:43 -07:00
Philipp Emanuel Weidmann 0ad1aeea43 🐧 Make "Developer Tools" key binding match Chrome 2014-06-03 19:31:32 +02:00
Corey Johnson 7e52c86095 📝 Update context menu doc 2014-06-03 10:25:12 -07:00
Corey Johnson 950338ed22 Fix linter errors 2014-06-03 10:17:53 -07:00
Corey Johnson 8ed3b7a250 Merge pull request #2134 from erikhakansson/AdvancedContextMenu
Advanced context menu
2014-06-03 10:13:37 -07:00
Ivan Žužak 390c36ca15 Upgrade to tree-view@0.96.0 2014-06-03 18:56:28 +02:00
Ivan Žužak 1df2e50bbf Upgrade to settings-view@0.118.0 2014-06-03 15:30:19 +02:00
Nathan Sobo 749dba1ac7 Prevent LinesComponent from updating on simple cursor movement 2014-06-03 19:23:19 +09:00
Nathan Sobo a28566a559 Add ScrollbarCornerComponent::shouldComponentUpdate 2014-06-03 19:18:14 +09:00
Nathan Sobo 64f1c8b80e Merge pull request #2481 from atom/ns-react-clean-up-measurement
Fix cursor and selection positioning when changing line height, font size, and font family
2014-06-03 19:15:40 +09:00
Nathan Sobo b47f6265c7 Move gutter width measurement into EditorComponent 2014-06-03 18:30:24 +09:00
Nathan Sobo 9511c952af 💄 2014-06-03 18:19:11 +09:00
Nathan Sobo be0877327e Kill comment 2014-06-03 18:18:53 +09:00
Nathan Sobo 3134bfda95 Update selections when the font size or font family change 2014-06-03 17:43:57 +09:00
Nathan Sobo 1c177aa206 Add spec for cursor position updates when the font family changes 2014-06-03 17:43:57 +09:00
Nathan Sobo ec65def5d3 Add spec for cursor position updates when the font size changes 2014-06-03 17:43:57 +09:00
Nathan Sobo 3aefa53b33 Batch together line and character width measurement after font changes
This ensures we only perform a single update with the most up-to-date
information about line height, default character width, and specific
character widths. If this update causes more lines to be drawn we may
measure again, but not necessarily.
2014-06-03 17:43:56 +09:00
Nathan Sobo 4fd07a4cf3 Subscribe to scroll view DOM events in ::listenForDOMEvents 2014-06-03 17:43:56 +09:00
Nathan Sobo 03463da729 Allow Editor::batchUpdates calls to be nested 2014-06-03 17:43:56 +09:00
Nathan Sobo 1cc5ef3479 Update selections when the line height changes 2014-06-03 17:43:56 +09:00
Nathan Sobo 77f78d0a11 Update cursors component if the defaultCharWidth changes 2014-06-03 17:43:56 +09:00
Nathan Sobo 8f98f2368b Base gutter updates on defaultCharWidth instead of fontSize/Family 2014-06-03 17:43:56 +09:00
Nathan Sobo f467e3eed4 Move decision to measure lineHeight/charWidths to EditorComponent
This prevents the double-update of the lines component when changing
the font-size, line-height and font-family. We detect the update of
these values in the root component and trigger a measurement. If the
measurement determines that the pixel values have changed, *then* we
update the lines.
2014-06-03 17:43:56 +09:00
Nathan Sobo 3052fe3f3b Update cursors when the line height in pixels changes 2014-06-03 17:43:56 +09:00
Nathan Sobo 1bce626324 Compute ranges of cursors & selections in EditorComponent and pass down
Previously, SelectionsComponenet::shouldComponentUpdate was storing the
ranges for selections as a side effect. We also were passing boolean
values (cursorMoved and selectionUpdated) to determine if these
components should update.

Now, we compute a simple hash of screen ranges for selections and
cursors in the root component and pass them down. This simplifies
shouldComponentUpdate for selections and allows us to implement one
for cursors.
2014-06-03 17:43:55 +09:00
Nathan Sobo e222998f82 Only compare screenRow to mouseWheelScreen row when it is defined
Fixes #2482
2014-06-03 17:43:35 +09:00
Kevin Sawicki 2aca16dc6b Upgrade to language-hyperlink@0.10 2014-06-02 21:38:26 -07:00
Kevin Sawicki 653a2623bf 🏁 bind ctrl-alt-up-down to adding selections 2014-06-02 15:59:13 -07:00
Kevin Sawicki 03ce9e0ec8 Upgrade to symbols-view@0.55 2014-06-02 15:58:56 -07:00
Kevin Sawicki 0245ec28eb Always handle resolving absolute URIs 2014-06-02 15:45:47 -07:00
Kevin Sawicki 94f86cb461 Don't resolve uris when project has not path 2014-06-02 15:41:05 -07:00
Kevin Sawicki b4871fddfb Upgrade to release-notes@0.32 2014-06-02 14:21:54 -07:00
Kevin Sawicki a598dcc259 🏁 Match Chrome's Settings menu item 2014-06-02 13:51:38 -07:00
Kevin Sawicki 918c86476c Check for href attribute on currentTarget
This makes clicking on images wrapped in anchor tags open correctly.
2014-06-02 13:35:18 -07:00
Kevin Sawicki 4d65a220e2 Add support for a ATOM_DEV_RESOURCE_PATH env var
This is helpful on windows to set a default dev resource path that
isn't ~/github/atom since on Windows it is common to clone Atom to C:\atom
2014-06-02 12:38:33 -07:00
Ben Ogle 7697f19c3d Merge pull request #2474 from atom/bo-add-shift-keymaps
Add missing shift-backspace and shift-delete bindings
2014-06-02 10:58:02 -07:00
Kevin Sawicki 6ad6409efe Merge pull request #2462 from atom/ks-windows-spec-fixes
Get core specs green on Windows
2014-06-02 10:25:09 -07:00
Kevin Sawicki b6fcc35131 Write removed file to temp directory 2014-06-02 10:17:13 -07:00
Kevin Sawicki bd873dc851 Upgrade to first-mate@1.6.1 2014-06-02 10:17:13 -07:00
Kevin Sawicki 4c2931f6b5 Use forward slash on all platforms
Paths are normalized by git-utils to use / on all platforms
2014-06-02 10:17:13 -07:00
Kevin Sawicki 1704c78eea Enable core specs when run outside of clone repo
The failing specs have been updated so that specs
can now run without the requirement of a Git repository
at the root.
2014-06-02 10:17:13 -07:00
Kevin Sawicki bcad8c1b3e Remove # which is interpreted as a tag
This spec was not running because of it since
jasmine-tagged is configured to filter tags by
process.platform
2014-06-02 10:17:13 -07:00
Kevin Sawicki 81d9193bf4 Copy repository to temp folder 2014-06-02 10:17:13 -07:00
Kevin Sawicki 7514f70434 Set project path to temp working directory 2014-06-02 10:17:13 -07:00
Kevin Sawicki 12a8688a9b Copy repository in remaining specs 2014-06-02 10:17:13 -07:00
Kevin Sawicki 0524a724e1 Move fixtures into repo 2014-06-02 10:17:13 -07:00
Kevin Sawicki 805c7ae301 💄 2014-06-02 10:17:13 -07:00
Kevin Sawicki 3f3dabed41 Remove spec completely tested in git-utils library 2014-06-02 10:17:13 -07:00
Kevin Sawicki 516035a82c Add copyRepository helper 2014-06-02 10:17:12 -07:00
Kevin Sawicki 08686ee769 Use temp directory in isPathNew/Modified specs 2014-06-02 10:17:12 -07:00
Kevin Sawicki 5b479ad5f5 Use temp directory in checkoutHead specs 2014-06-02 10:17:12 -07:00
Kevin Sawicki d4366aa09e Pass element not jQuery object as target
Previously this was passing since ctrl-z was completely unbound at
this point which isn't the case on Windows.
2014-06-02 10:17:12 -07:00
Corey Johnson 3f549bbada Merge pull request #2477 from atom/ns-react-remove-scroll-view-component
Merge EditorScrollViewComponent into EditorComponent
2014-06-02 08:02:49 -07:00
Nathan Sobo 1187d50b81 Fix inequality in LinesComponent::shouldComponentUpdate
Change objects from the display-buffer are currently end-row inclusive.
I'd like to fix this, but not until we switch editors.
2014-06-02 19:17:30 +09:00
Ben Ogle a1d4c2a4c7 Upgrade to silarized-dark-syntax@0.15.0 2014-06-01 11:57:09 -07:00
Nathan Sobo afe386ce40 💄 EditorComponent method order 2014-06-01 18:31:47 +09:00
Nathan Sobo d31669c67f Merge EditorScrollViewComponent into Editor
I don't think that this component was really carrying its weight. Its
render function basically passed through directly to other components
that updated between renders, but didn't contain any content on its
own that actually changed after the first render.

React components seem to carry overhead, so I want every component we
use to count. Also, I'm considering circumventing some of React's
standard update logic for performance reasons, and making the structure
more shallow will help with that.
2014-06-01 15:24:59 +09:00
Ben Ogle 5259a1ced4 Add missing shift-backspace and shift-delete bindings 2014-05-31 16:15:36 -07:00
steffen 437b0decab Fix indenting of HTML (closing) tags for instance. Fix #1294
The indentation level is not anymore reduced by adding a new line,
which previously caused multiple reductions of the indentation level.
This fixes the behavior of HTML closing tags, which currently
"jump" backwards if you try to move them down.
2014-05-31 13:32:14 +02:00
Nathan Sobo 61ee1be2cb Merge pull request #2463 from atom/ns-react-fix-duplicate-lines
Fix line duplication in React editor
2014-05-31 19:52:35 +09:00
Nathan Sobo 2548891b99 Clear the mousewheelScreenRow even if the event does not cause scrolling
If a mousewheel event is triggered when the editor can't be scrolled,
we still want to clear the mouseWheelScreenRow. This is typically done
when we stop scrolling, but if we never start scrolling it will never
happen. This commit adds another timeout to cover that case.
2014-05-31 18:36:59 +09:00
Nathan Sobo 115a7e1dfb 💄 Give mousewheel events their own describe block 2014-05-31 18:20:27 +09:00
Kevin Sawicki 5d2be8d5c5 Upgrade to apm 0.61 2014-05-30 17:39:49 -07:00
Kevin Sawicki 6d08ade20c Upgrade to apm 0.60 2014-05-30 17:31:43 -07:00
Nathan Sobo 0043072ecf Only preserve mouseWheelScreenRow if it's out of the rendered row range
Fixes #2429, #2443

Otherwise, it's possible to duplicate lines. If a line is in the
rendered row range and it's not in the set of lines returned by the
editor, we should remove it no matter what. Line preservation is only
intended for lines that are out of view.
2014-05-31 08:56:57 +09:00
Nathan Sobo 89c57b6d52 Only set the mouseWheelScreenRow when scrolling vertically
When we handle a mousewheel event targeting a line or line number, we
assign the mousewheelScreenRow to prevent the removal of the target
node, which interferes with velocity scrolling.

However, the ::mousewheelScreenRow is only cleared 100ms after we stop
scrolling vertically. This means that if we're only scrolling
horizontally, it's never cleared. This causes the line node associated
with this screen row to hang around longer until the mousewheel screen
row is cleared again, which is not what we want.

This commit only assigns the ::mousewheelScreenRow when scrolling
vertically, so we can be sure it will be cleared.
2014-05-31 08:56:57 +09:00
Nathan Sobo f2a08cd178 Update the lines and gutter when the mouseWheelScreenRow changes 2014-05-31 08:56:56 +09:00
Nathan Sobo df524e4803 Fix bug in LinesCompoent::shouldComponentUpdate 2014-05-31 08:56:32 +09:00
Corey Johnson b8c4b83653 Merge pull request #2461 from atom/cj-fix-data-gutter-add-class-to-line
Fix data gutter add class to line
2014-05-30 15:25:52 -07:00
probablycorey 2df2254227 Remove trailing semi-colon
I drank too much javascript today…
2014-05-30 15:10:44 -07:00
probablycorey f4d256eef2 Use buffer row data attribute to find gutter lines 2014-05-30 15:05:15 -07:00
probablycorey cb109dc09f Add buffer-row data to gutter-component 2014-05-30 15:04:50 -07:00
Kevin Sawicki 919181067a Upgrade to fuzzy-finder@0.54 2014-05-30 14:05:03 -07:00
Kevin Sawicki 48d252e118 Upgrade to find-and-replace@0.111.0 2014-05-30 13:11:11 -07:00
Kevin Sawicki 75a07ac722 Upgrade to dev-live-reload@0.31 2014-05-30 11:45:05 -07:00
Kevin Sawicki e06bbfac6b Remove unimplemented items from windows menu 2014-05-30 11:18:20 -07:00
probablycorey 4265cfc61e Merge remote-tracking branch 'origin/master' into cj-add-python-check 2014-05-30 11:10:45 -07:00
probablycorey 57531d75fe Add better python path description 2014-05-30 11:01:22 -07:00
Kevin Sawicki 5c1d9a6a2e Upgrade to welcome@0.16.0 2014-05-30 10:59:22 -07:00
Ben Ogle 883009a3bd Upgrade to atom-dark-ui@0.29.0 2014-05-30 10:53:54 -07:00
Kevin Sawicki 3ed5e64a01 Upgrade to welcome@0.15.0 2014-05-30 10:37:38 -07:00
probablycorey 0fdceb8474 Update bootstrap requires 2014-05-30 09:36:29 -07:00
probablycorey 041ec8c7cf Use verifyRequirements in script/bootstrap 2014-05-30 09:31:53 -07:00
probablycorey 07e64152be Add verify-requirements util 2014-05-30 09:31:42 -07:00
Kevin Sawicki 87d2e51adb Upgrade to exception-reporting@0.18.0 2014-05-30 09:05:22 -07:00
Kevin Sawicki 30582c69e8 Merge pull request #2449 from jsomers/patch-1
Update os-x.md
2014-05-30 08:22:35 -07:00
James Somers 6e34562d94 Update os-x.md
With the original URL, git would throw this error:

```
fatal: unable to access 'https://github.com/atom/atom/': The requested URL returned error: 500
```
2014-05-29 22:05:00 -04:00
Kevin Sawicki 3da933372f Upgrade to go-to-line@0.22 2014-05-29 18:16:10 -07:00
Kevin Sawicki 3601baeb80 Upgrade to markdown-preview@0.73 2014-05-29 16:49:52 -07:00
Kevin Sawicki 64b4adf6c8 Prepare 0.101.0 release 2014-05-29 15:33:05 -07:00
Corey Johnson d2d63d3241 Merge pull request #2431 from atom/cj-add-tokenized-event
Use tokenized event to determine tab style
2014-05-29 15:19:14 -07:00
Corey Johnson 4840987082 Add overlayer class to ReactEditorView
Closed #2442
2014-05-29 15:16:48 -07:00
Corey Johnson 249a14704b 📝 Fix typo in docs 2014-05-29 15:16:43 -07:00
Kevin Sawicki cf64d80abe Upgrade to tabs@0.41 2014-05-29 15:14:14 -07:00
Ben Ogle 5e511ca6c6 Typo! 2014-05-29 15:02:58 -07:00
Kevin Sawicki c4a547a9ea Upgrade to bracket-matcher@0.41.0 2014-05-29 12:44:26 -07:00
Kevin Sawicki b936e126da Upgrade to atom-keymap 0.26
This added support for custom number pad keybindings so num-enter
is now mapped to the editor:newline command and the core:confirm
command.
2014-05-29 11:46:58 -07:00
Kevin Sawicki 5418e74fb9 Upgrade to bracket-matcher@0.40.0 2014-05-29 11:13:31 -07:00
Corey Johnson 40a2ed3703 Merge pull request #2364 from themaninthesuitcase/cp-projectRelativeTabPath
Update getLongTitle to be project relative
2014-05-29 09:51:45 -07:00
Kevin Sawicki 67c8de623d Remove empty ca setting
npm 1.4 is a requirement now so this workaround is no longer needed.
2014-05-29 09:26:18 -07:00
Kevin Sawicki bf7c14e6f3 Upgrade to first-mate 1.6 2014-05-29 09:14:21 -07:00
Kevin Sawicki 512a50814b Upgrade to language-ruby@0.26.0 2014-05-29 09:04:15 -07:00
Kevin Sawicki 3c251dbe56 Upgrade to deprecation-cop@0.6 2014-05-29 08:51:20 -07:00
Kevin Sawicki eae33be515 Upgrade to minidump 0.6 2014-05-28 20:19:26 -07:00
Kevin Sawicki a343e4b9f7 Merge pull request #2432 from atom/ks-install-npm-in-build-folder-on-ci
Install npm in build folder on CI
2014-05-28 18:50:58 -07:00
Kevin Sawicki 5f359a4271 💄 2014-05-28 18:36:42 -07:00
Kevin Sawicki ae1dd6e876 Add missing comma 2014-05-28 18:31:20 -07:00
Kevin Sawicki d1bd2113bf Install npm into build/ folder 2014-05-28 18:30:27 -07:00
probablycorey c9ae9e11c1 Reword specs 2014-05-28 16:34:42 -07:00
Ben Ogle b10b8d80ae Upgrade find-and-replace@0.110.0 2014-05-28 16:34:11 -07:00
probablycorey 7f57a094f6 Determine softTab state after the buffer is tokenized. 2014-05-28 16:31:00 -07:00
probablycorey b7df08cbdd Add spec to re-emit the tokenized event when the grammar is changed 2014-05-28 16:10:02 -07:00
probablycorey 89dc5f26ad Only emit the tokenized event after the first full tokenization 2014-05-28 15:56:08 -07:00
probablycorey 2c60b0463e Use tokenized buffer created by editor 2014-05-28 15:46:26 -07:00
Ben Ogle 3093198662 Upgrade to background-tips@0.14.0 2014-05-28 15:31:35 -07:00
Ben Ogle 7b8ef2f6e3 Upgrade atom-light-ui@0.25.0 2014-05-28 14:58:16 -07:00
probablycorey c56ac70181 Add tokenized event to tokenized buffer 2014-05-28 14:53:38 -07:00
Ben Ogle d77c914fd8 Upgrade to atom-dark-ui@0.28.0 2014-05-28 14:52:46 -07:00
Ben Ogle 8e91e503c9 Upgrade atom-dark-ui@0.27.0
Close atom/tabs#51
2014-05-28 14:33:55 -07:00
Kevin Sawicki 97c9f05447 Upgrade to fuzzy-finder@0.53.0 2014-05-28 14:15:08 -07:00
Ben Ogle 2715bec4c8 Upgrade find-and-replace@0.109.0 2014-05-28 14:08:58 -07:00
Kevin Sawicki 45717d7431 📝 Correct typos 2014-05-28 14:01:45 -07:00
Kevin Sawicki afd61a369b 📝 Pluralize method 2014-05-28 14:00:50 -07:00
Kevin Sawicki 86082d19e1 Upgrade to apm 0.59.0 2014-05-28 13:29:27 -07:00
erikhakan@gmail.com b7d6825287 docs markdown 2014-05-28 22:10:49 +02:00
erikhakan@gmail.com 1fe13fbad8 updated docs 2014-05-28 22:08:51 +02:00
Kevin Sawicki 1f21e4178d Upgrade to timecop@0.19.0 2014-05-28 13:04:38 -07:00
erikhakan@gmail.com aef75238ec added separator for submenu 2014-05-28 21:58:23 +02:00
Erik Håkansson 419b1ec348 Submenus now work with old context menu structure 2014-05-28 21:50:42 +02:00
Kevin Sawicki bb31af5e8c Upgrade to language-perl@0.9.0 2014-05-28 09:46:28 -07:00
Kevin Sawicki befedac546 Upgrade to bracket-matcher@0.39.0 2014-05-28 09:16:37 -07:00
Ivan Žužak be0dcb840e Upgrade to find-and-replace@0.108.0 2014-05-28 17:31:37 +02:00
Ivan Žužak b521af9b4a Upgrade to settings-view@0.117.0 2014-05-28 16:31:53 +02:00
Chris Pearson 61cb22840e Update getLongTitle to fall back to basename
Update getLongTitle to fall back to basename when the relative path
resolves to a blank string.
2014-05-28 15:12:51 +01:00
Nathan Sobo eaeb5b3b13 Upgrade snippets to support multi-digit tabstop indices 2014-05-27 19:09:07 -06:00
Kevin Sawicki 466a50ff37 Merge pull request #2386 from atom/ks-reload-grammar-from-model
Reload grammar in editor when path changes
2014-05-27 13:53:26 -07:00
Kevin Sawicki 4f2d935a1d Reload grammar on path changed in TokenizedBuffer 2014-05-27 12:58:17 -07:00
Kevin Sawicki b19126024a 💄 2014-05-27 12:58:17 -07:00
Kevin Sawicki 56eb1fc6e4 Reload grammar before emitting events 2014-05-27 12:58:17 -07:00
Kevin Sawicki 07a2a6710d Reload grammar in editor when path changes 2014-05-27 12:58:17 -07:00
Nathan Sobo cbedd221f3 Merge pull request #2419 from atom/bo-fix-cursor
Make cursor visible when over indent guides
2014-05-27 14:45:33 -05:00
Ben Ogle d684911fce Make cursor visible when over indent guides 2014-05-27 12:11:24 -07:00
Kevin Sawicki b625965982 Upgrade to apm 0.58.0 2014-05-27 11:34:50 -07:00
Nathan Sobo 9688469501 Merge pull request #2387 from atom/ns-react-find-and-replace-markers
Make React editor backward compatible with find-and-replace marker views
2014-05-27 13:20:51 -05:00
Nathan Sobo f9cb9b7ea2 Upgrade find-and-replace to support the ReactEditorView 2014-05-27 12:11:29 -06:00
Nathan Sobo 6448258f4e Add shims to support find-and-replace marker views 2014-05-27 12:11:01 -06:00
Kevin Sawicki 9f1a3c6eff 📝 Recommend opening issue on atom/atom 2014-05-27 10:43:12 -07:00
Kevin Sawicki 21c2bf4861 📝 Don't use emojis in the title header 2014-05-27 10:43:12 -07:00
Corey Johnson b9753a0785 Force npm to be installed on cibuilds 2014-05-27 10:34:11 -07:00
Kevin Sawicki ff27ac5670 Upgrade to tree-view@0.95.0 2014-05-27 09:53:13 -07:00
Corey Johnson 720679b41b Upgrade to tree-view@0.94.0 2014-05-27 09:41:25 -07:00
Kevin Sawicki 248843583e Merge pull request #2399 from frk1705/patch-1
Fix example in editor-view.coffee
2014-05-27 08:51:28 -07:00
Kevin Sawicki 1f3ef99390 Merge pull request #2400 from Gaelan/patch-1
Add 🏁 for Windows to CONTRIBUTING.md
2014-05-27 08:50:42 -07:00
Kevin Sawicki e74b56c50e Update to language-xml@0.14.0 2014-05-27 08:49:18 -07:00
Kevin Sawicki c924d55a26 Upgrade to fuzzy-finder@0.52.0 2014-05-27 08:37:42 -07:00
Kevin Sawicki 4964a067d0 Upgrade to symbols-view@0.54.0 2014-05-27 08:32:30 -07:00
Cheng Zhao 264196a11f Upgrade to atom-shell@0.12.7 2014-05-27 17:24:10 +08:00
Gaelan bfa70b4ba6 Add 🏁 for Windows to CONTRIBUTING.md 2014-05-25 18:28:02 -07:00
Maximilian Schüßler 7e5d554bd8 Fix example in editor-view.coffee 2014-05-25 21:27:21 +02:00
Erik Håkansson a90039baab fixes to spec 2014-05-24 23:52:08 +02:00
Erik Håkansson 55228f9667 updated coding style and added spec 2014-05-24 23:52:08 +02:00
Erik Håkansson 6295c2ddc4 minor changes 2014-05-24 23:52:08 +02:00
Erik Håkansson 5ca6d01911 renamed variable to make code more understandable 2014-05-24 23:52:08 +02:00
Erik Håkansson 6d9fed6644 removed unnecessary newlines 2014-05-24 23:52:08 +02:00
Erik Håkansson 3c8bfb8bc8 Context menus can now handle different types and commands, as well as submenus 2014-05-24 23:52:08 +02:00
Ben Ogle 00987f3642 Merge pull request #2380 from ddavison/master
ⓐⓓⓓⓘⓝⓖ ⓟⓐⓣⓒⓗ ⓣⓞ ⓓⓞⓒⓢ
2014-05-23 16:14:30 -07:00
ddavison 6e070ae057 ⓒⓛⓐⓡⓘⓕⓘⓒⓐⓣⓘⓞⓝ 2014-05-23 19:12:12 -04:00
Kevin Sawicki ac70bfc456 Don't parse line and column if path to open exists
This previously prevented file containing a colon from being open
from the command line.

Closes #2376
2014-05-23 15:32:55 -07:00
Kevin Sawicki fd0f323666 Open directory path instead of project path
This ensures that the repository opened is always project’s
path instead of the potentially non-existent path or file
specified to Project::setPath
2014-05-23 15:05:04 -07:00
Nathan Sobo 0e31557abf Only measure character widths when editor is visible 2014-05-23 15:59:44 -06:00
Kevin Sawicki e7c1d20d8e Upgrade to keybinding-resolver@0.18.0 2014-05-23 14:43:21 -07:00
Kevin Sawicki e8c8f0de0d Prepare 0.100.0 release 2014-05-23 14:29:36 -07:00
Kevin Sawicki ea0773e8fc Upgrade to atom-keymap 0.23.0 2014-05-23 14:00:33 -07:00
ddavison 037306a30c Merge branch 'master' of https://github.com/ddavison/atom
* 'master' of https://github.com/ddavison/atom:
  ⓐⓓⓓⓘⓝⓖ ⓟⓐⓣⓒⓗ ⓣⓞ ⓓⓞⓒⓢ

Conflicts:
	docs/publishing-a-package.md
2014-05-23 15:30:05 -04:00
ddavison 9ea94cb6cc ⓐⓓⓓⓘⓝⓖ ⓟⓐⓣⓒⓗ ⓣⓞ ⓓⓞⓒⓢ 2014-05-23 15:29:35 -04:00
ddavison 97fe09f157 ⓐⓓⓓⓘⓝⓖ ⓟⓐⓣⓒⓗ ⓣⓞ ⓓⓞⓒⓢ 2014-05-23 15:16:51 -04:00
Nathan Sobo 5b149bd41a Merge pull request #2370 from atom/ns-react-fix-scroll-corruption
Prevent React editor's scroll view from being auto-scrolled by Chromium
2014-05-23 12:54:15 -06:00
Corey Johnson 8a899f2116 Merge pull request #2360 from atom/apm-api-docs
add atom.io api docs
2014-05-23 10:18:06 -07:00
Kevin Sawicki dfa2f46ced Prepare 0.99.0 release 2014-05-23 09:36:25 -07:00
Corey Johnson 2b2d1d87f7 Merge branch 'cj-paragraph-test' 2014-05-23 09:23:57 -07:00
Corey Johnson 3784b77b95 Merge remote-tracking branch 'origin/master' into cj-paragraph-test 2014-05-23 09:23:30 -07:00
Corey Johnson 7f418e2de4 Add move by paragraph commands 2014-05-23 09:13:44 -07:00
Kevin Sawicki 78da19f479 Downgrade to atom-keymap 0.19.0
This reverts changes that broke shift + number line keybindings

Refs atom/atom-keymap#30
2014-05-23 09:10:52 -07:00
Corey Johnson 4e18ebe843 Merge pull request #2359 from atom/cj-split-windows-build-requirements
Add separate Windows 8 and Windows 7 build instructions
2014-05-23 08:57:06 -07:00
Corey Johnson 152a8b311f Merge remote-tracking branch 'origin/master' into cj-split-windows-build-requirements
Conflicts:
	docs/build-instructions/windows.md
2014-05-23 08:51:08 -07:00
karlin 64470a3c7d add moveToBeginningOf{Next,Previous}Paragraph for cursor and wrappers for editor 2014-05-23 00:51:01 -04:00
Nathan Sobo fae035731f Prevent autoscrolling scroll-view when cursor is at end of longest line
If the longest line is longer than the width of the scroll view, we need
to allow 2px horizontally to prevent the hidden input from
autoscrolling.
2014-05-22 20:18:34 -06:00
Nathan Sobo 446a48ca00 Position hidden input at 0,0 unless cursor is focused
The editor's scroll view is getting autoscrolled when the editor is
focused, so we won't position the hidden input until after the editor
is focused, and will always return it to 0,0 when the editor is blurred.
2014-05-22 20:13:50 -06:00
Nathan Sobo ce9b34c9eb Warn when scroll view gets accidentally scrolled and fix it
I want this code to go away once we track down the causes of any
unwanted autoscrolling by the browser
2014-05-22 19:53:14 -06:00
Corey Johnson d1ed176550 Merge pull request #2368 from atom/iz-scrollview-support-for-core-move-up-down
Support core:move-up and core:move-down in ScrollView
2014-05-22 16:41:50 -07:00
Corey Johnson 652219b8cf Merge pull request #2362 from CoolOppo/patch-1
Fix slash in Windows build instructions
2014-05-22 15:55:36 -07:00
Daniel Hengeveld e6229f6145 Use h4 for individual methods in apm api doc 2014-05-22 15:45:30 -07:00
Nathan Sobo 9c066d93fa Run react perf in scroll benchmark if NODE_ENV isn't production 2014-05-22 16:01:48 -06:00
Nathan Sobo e754689014 Add displayName to ScrollbarComponent and ScrollbarCornerComponent 2014-05-22 16:01:48 -06:00
Ivan Zuzak de96de2de1 Support core:move-up/down in ScrollView
Closes #1828
2014-05-22 23:58:50 +02:00
Kevin Sawicki 6d89c893b7 Upgrade to grammar-selector@0.27.0 2014-05-22 14:56:41 -07:00
Kevin Sawicki 16df6a32d6 📝 Use TomDoc in Atom class 2014-05-22 14:06:17 -07:00
Chris Pearson a337384e7b Update getLongTitle to be project relative 2014-05-22 21:49:49 +01:00
Kevin Sawicki cdb6de05b3 Update broken Keymap class reference 2014-05-22 13:27:45 -07:00
Kevin Sawicki 1b262eadaa Prepare 0.98.0 release 2014-05-22 13:23:59 -07:00
CoolOppo fd5ea8a0b1 Fix slash in Windows build instructions
This could be mildly confusing to some who are unfamiliar with using bash.
2014-05-22 15:44:37 -04:00
Nathan Sobo fe31d2d28a Add scrolling benchmark to React editor 2014-05-22 13:25:47 -06:00
Daniel Hengeveld 40b66e8eb3 add atom.io api docs 2014-05-22 12:13:58 -07:00
Kevin Sawicki 71e83962ac Merge pull request #2356 from klorenz/master
📝 Add solution for "TypeError: Unable to watch path"
2014-05-22 11:34:50 -07:00
probablycorey 5316d586d1 Add information about where application is located 2014-05-22 11:28:08 -07:00
Kevin Sawicki f79039e4f7 Upgrade to apm 0.57.0 2014-05-22 11:17:14 -07:00
probablycorey f4d6b69002 Split the windows build requirements by version 2014-05-22 11:00:33 -07:00
Kevin Sawicki 08e6dc20e1 Upgrade to settings-view@0.116.0 2014-05-22 09:57:33 -07:00
Nathan Sobo 4f14d8a64f Merge pull request #2344 from atom/ns-ks-react-dont-measure-when-hidden
React: Don't measure line height / char width when editor is hidden
2014-05-22 10:56:43 -06:00
Nathan Sobo da53dfc903 Upgrade atom-keymap for numpad fixes on Linux/Windows 2014-05-22 10:54:19 -06:00
Nathan Sobo 875cfefd36 Merge branch 'master' into ns-ks-react-dont-measure-when-hidden
Conflicts:
	spec/editor-component-spec.coffee
	src/editor-component.coffee
	src/editor-scroll-view-component.coffee
	src/lines-component.coffee
2014-05-22 10:48:21 -06:00
Nathan Sobo b6fb996ceb Merge pull request #2327 from atom/ns-react-fork
Use Atom-specific fork of React allowing selection restoration opt out
2014-05-22 10:41:26 -06:00
Nathan Sobo 316559ae09 Merge pull request #2345 from atom/ns-ks-lines-div-height
Ensure .lines div is always at least the height of the scroll view
2014-05-22 10:35:44 -06:00
Nathan Sobo 08d28d7ed4 Upgrade space-pen so $.fn.views doesn't return undefined values 2014-05-22 10:34:15 -06:00
probablycorey 3a3adf43a4 Merge remote-tracking branch 'origin/master' into zelon-master
Conflicts:
	docs/build-instructions/windows.md
2014-05-22 09:29:53 -07:00
Kevin Sawicki & Nathan Sobo 0951305962 Wire editor.lineHeight config value 2014-05-22 10:17:22 -06:00
Kevin Sawicki & Nathan Sobo 481935c880 Add specs for updating lineHeightInPixels when changing font size/family 2014-05-22 10:17:22 -06:00
Kevin Sawicki & Nathan Sobo 8ffcdad89a Re-measure the line height in pixels when the CSS line-height changes 2014-05-22 10:17:21 -06:00
Kevin Sawicki & Nathan Sobo 9e3ce09658 Rename lineHeight to lineHeightInPixels to distinguish from CSS value
CSS has a line-height property with values like '1.3', but we also have
a measured pixel value for line height. It's important to keep these
separate conceptually.
2014-05-22 10:17:12 -06:00
Corey Johnson 8c5d0775bc Merge pull request #2339 from atom/cj-add-spec-documentation
Add spec documentation
2014-05-22 08:51:02 -07:00
Kay-Uwe (Kiwi) Lorenz 36e8b10917 Merge branch 'master' of https://github.com/klorenz/atom 2014-05-22 17:43:03 +02:00
Kay-Uwe (Kiwi) Lorenz b2b048994c added a solution for an issue in linux troubleshooting section 2014-05-22 17:41:18 +02:00
Ivan Žužak 6db23e67e8 Merge pull request #2353 from aaronraimist/master
Updates Jasmine link in CONTRIBUTING.md
2014-05-22 17:13:18 +02:00
Aaron Raimist 7872e95561 Updates Jasmine link in CONTRIBUTING.md 2014-05-22 10:03:45 -05:00
Kevin Sawicki & Nathan Sobo 45eeee9aea Ensure .lines div is always at least the height of the scroll view
This ensures that the wrap guide extends the entire height of the
editor.
2014-05-21 19:07:03 -06:00
Kevin Sawicki & Nathan Sobo 9cbc693c77 Avoid measuring lineHeight/defaultCharWidth on show unless needed
We only need to re-measure if the fontSize, fontFamily, or lineHeight
changed while the editor was hidden.
2014-05-21 17:35:57 -06:00
Kevin Sawicki & Nathan Sobo ee9d4ab70e Don't measure lineHeight/defaultCharWidth when editor is hidden 2014-05-21 17:15:47 -06:00
Kevin Sawicki & Nathan Sobo 68c3113b75 Call hide on the views instead of the jQuery collection
This ensures that views with custom ::hide methods can invoke special
behavior.
2014-05-21 17:11:36 -06:00
probablycorey 3a71b0470b Add links to writing specs doc 2014-05-21 14:47:30 -07:00
probablycorey 421cdb41b9 Add spec documentation 2014-05-21 14:45:36 -07:00
Corey Johnson a8538a1361 Merge pull request #2295 from lee-dohm/contributing
📝 Unify the two contributing documents
2014-05-21 12:38:23 -07:00
Lee Dohm c3cedd2dc9 Split out the package-specific information
Per PR feedback, splitting out package-specific development information
into its own document.
2014-05-21 11:35:23 -07:00
Kevin Sawicki da38218941 Upgrade to bracket-matcher@0.38.0 2014-05-21 09:29:05 -07:00
Kevin Sawicki c700ca0430 Remove unused sync option 2014-05-21 08:55:40 -07:00
KIM, JINWOOK 0fe3f2d03c Use 'with' instead of 'and'
Using 'with' instead of 'and' could prevent some people to think that SP1 is an other program, or is Windows SP1
2014-05-21 22:11:59 +09:00
Nathan Sobo 65b1e13b83 Use Atom-specific fork of React allowing selection restoration opt out
This fork of React allows data-react-skip-selection-restoration to be
defined on input elements, skipping costly selection restoration that
occurs when the input element is focused during reconciliation.
2014-05-20 23:05:13 -06:00
Nathan Sobo 2acb387446 Merge pull request #2317 from atom/cj-add-invisibles-to-react-editor
Add invisibles to react editor
2014-05-20 22:10:12 -06:00
probablycorey 746273a2ef Merge remote-tracking branch 'origin/master' into cj-add-invisibles-to-react-editor 2014-05-20 16:30:18 -07:00
Nathan Sobo 778beba901 Remove editor-colors class from line numbers 2014-05-20 17:10:55 -06:00
Nathan Sobo 9278920093 Merge branch 'master' into cj-add-invisibles-to-react-editor
Conflicts:
	src/editor-component.coffee
2014-05-20 17:03:14 -06:00
probablycorey ece868c9de Concat strings instead of joining an Array 2014-05-20 15:16:07 -07:00
Kevin Sawicki 651ed9b91e Upgrade to apm 0.56.0 2014-05-20 15:08:23 -07:00
Nathan Sobo ac993680db Remove stray logging 2014-05-20 15:27:28 -06:00
Nathan Sobo 48b33ed07d 💄 2014-05-20 15:17:19 -06:00
Nathan Sobo 724953206f Merge pull request #2319 from atom/ns-react-no-cursor-animation
Don't use CSS animations to blink cursor in the React editor
2014-05-20 15:09:50 -06:00
Nathan Sobo c4e3b90201 Upgrade atom-keymap for Linux support and 'unset!' on partial matches 2014-05-20 15:07:43 -06:00
probablycorey a722d1aa36 Make editor component spec pass 2014-05-20 14:07:36 -07:00
probablycorey 25e3ae0325 Re-render the lines when the showInvisible config option is triggered 2014-05-20 13:58:22 -07:00
Ivan Žužak e26da5887d Upgrade to markdown-preview@0.72.0 2014-05-20 22:37:25 +02:00
Kevin Sawicki 31037797e4 Upgrade to bracket-matcher@0.37.0 2014-05-20 13:27:27 -07:00
Nathan Sobo 2ae7cba452 Don't blink cursors with CSS animation
It seems to create intermittent lags when moving the cursor and typing.
2014-05-20 14:04:59 -06:00
Nathan Sobo fa3ebc8c0f Fix interval cancellation in specs 2014-05-20 14:03:44 -06:00
probablycorey ff36781c98 Add failing spec for toggling showInvisibles config option 2014-05-20 12:34:43 -07:00
probablycorey 2f038cbe66 Update lines component when invisibles changes 2014-05-20 12:34:18 -07:00
probablycorey f962888b35 Remove unnecessary spec 2014-05-20 11:49:40 -07:00
probablycorey 6880368a79 Add soft wrap support to invisibles 2014-05-20 11:49:31 -07:00
Kevin Sawicki 13ba6883b4 Upgrade to apm 0.55.0 2014-05-20 11:42:45 -07:00
probablycorey 1e6e804ebb Use screen line count to determine renderedEndRow 2014-05-20 11:37:32 -07:00
Kevin Sawicki 5690d9fe81 Upgrade to symbols-view@0.53.0 2014-05-20 10:55:01 -07:00
Nathan Sobo 6fef8de63e Merge pull request #2284 from pritambaral/react-paste
Ignore paste in react editor, Fixes #2186
2014-05-20 11:50:26 -06:00
Nathan Sobo e29185ef11 Upgrade atom-keymap for dvorak-qwerty and better linux support 2014-05-20 11:40:32 -06:00
probablycorey c999a6e0e4 Show carriage return invisibles 2014-05-20 10:38:01 -07:00
probablycorey 2bbf5c7800 Remove unnecessary spec 2014-05-20 10:37:24 -07:00
probablycorey 273203e4c9 Fix typo 2014-05-20 10:37:02 -07:00
Lee Dohm 1211680998 📝 Unify the two contributing documents
Both documents had some really great stuff to them, but there was too much
overlap. I did my best to unify them into one document, taking the best
features of each.
2014-05-20 10:35:18 -07:00
Nathan Sobo 84e76556da Try to fix flaky spec 2014-05-20 11:11:35 -06:00
Corey Johnson 55881d594b Merge pull request #2239 from atom/cj-windows-build-instructions-update
Update windows build instructions and requirements
2014-05-20 09:58:45 -07:00
probablycorey 6f0882a098 Merge remote-tracking branch 'origin/master' into cj-windows-build-instructions-update
Conflicts:
	docs/build-instructions/windows.md
2014-05-20 09:51:08 -07:00
Kevin Sawicki dda465d08a Upgrade to language-ruby@0.25.0 2014-05-20 09:49:19 -07:00
KIM, JINWOOK 124c517056 Add Visual Studio 2010 SP1 download URL
Many people are confused by indicating just Visual Studio 2010 Express without SP1
2014-05-20 23:50:12 +09:00
Cheng Zhao 6fa6863244 Don't popup context menu with no items, fixes #2032.
On OS X popuping an empty context menu would have no effect but on Linux
an empty menu container would still be showed.
2014-05-20 22:36:51 +08:00
Nathan Sobo 0ad26c337a Don't use _.pluck when building TokenizedLines 2014-05-19 22:20:57 -06:00
Nathan Sobo 353eb27d2e Update dataset screenRow of gutter nodes when updating them 2014-05-19 21:34:06 -06:00
Nathan Sobo 6edb0b7a3d Delete dead method 2014-05-19 21:32:26 -06:00
Nathan Sobo cd5f0c0047 Update the screenRow on the line element's dataset in ::updateLineNode 2014-05-19 21:32:26 -06:00
Nathan Sobo 5716c7c574 Upgrade underscore-plus for multiplyString optimization 2014-05-19 21:31:10 -06:00
Kevin Sawicki ce30299122 Upgrade to find-and-replace@0.106.0 2014-05-19 17:39:34 -07:00
probablycorey 9b5593d020 Put EOL invisibles into their own scope 2014-05-19 17:27:59 -07:00
probablycorey 4d642b91ef Only pass invisibles through to the line component if needed 2014-05-19 17:10:36 -07:00
probablycorey 8b4cff474f Spec 💄 2014-05-19 17:10:04 -07:00
probablycorey 73ce81d597 Pass invisibles down to lines component 2014-05-19 16:56:53 -07:00
probablycorey 09e4c585aa Add setInvisibles method 2014-05-19 16:56:17 -07:00
Kevin Sawicki 2c5af98cca Upgrade to bracket-matcher@0.36.0 2014-05-19 16:45:04 -07:00
probablycorey cbe07b49aa Add basic invisible specs 2014-05-19 16:20:51 -07:00
Kevin Sawicki aa557a7bdf Upgrade to bracket-matcher@0.35.0 2014-05-19 15:47:11 -07:00
Kevin Sawicki 65cafdda03 Upgrade to language-gfm@0.38.0 2014-05-19 15:39:14 -07:00
Kevin Sawicki 9a18ff5954 Update atom.ico in resources directory 2014-05-19 14:04:34 -07:00
Nathan Sobo d2bc7ab192 Merge pull request #2258 from atom/ns-react-scroll-perf
Improve scroll performance of the React editor
2014-05-19 14:42:18 -06:00
Kevin Sawicki bf7d2defd6 Upgrade to grunt-download-atom-shell@0.7.2 2014-05-19 13:35:44 -07:00
Kevin Sawicki c4e4429744 Upgrade to language-python@0.17.0 2014-05-19 13:34:44 -07:00
Nathan Sobo bfc382c398 Add specs for line/line-number preservation 2014-05-19 14:33:17 -06:00
Nathan Sobo 795399e184 Preserve the target when scrolling w/ mousewheel on editor lines 2014-05-19 14:17:09 -06:00
Nathan Sobo 37bdfb716b Preserve the target when scrolling w/ mousewheel in gutter
Removing the target of a mouseweel event messes up velocity scrolling
with the track pad, so it needs to be preserved until scrolling ceases.
2014-05-19 14:03:34 -06:00
Corey Johnson 405afca1c6 Merge pull request #2269 from pritambaral/tmpdir
Use os.tmpdir() insted of /tmp
2014-05-19 12:20:50 -07:00
Pritam Baral 7627e0b0f0 Minor fix + Remove last references to /tmp 2014-05-19 23:57:48 +05:30
Pritam Baral 25d2206471 Consolidate redundant code 2014-05-19 23:57:48 +05:30
Pritam Baral 2d96444e21 Use os.tmpdir() on OS X 2014-05-19 23:57:48 +05:30
Pritam Baral f5c3bdb845 Use os.tmpdir() on Linux
/tmp isn't always available, is on precious RAM-backed fs or simply not
what the user has set his $TMPDIR to. According to the specification, we
should use $TMPDIR, which node lets us find through os.tmpdir().

Also, contributing.md isn't in favour of using platform-dependent code.

This commit focusses only on Linux, and leaves OS X as is with /tmp for
discussion.
2014-05-19 23:57:48 +05:30
Corey Johnson 22b932ebee Merge pull request #2290 from varesa/master
Make instructions for manual VS path more accurate
2014-05-19 10:06:15 -07:00
probablycorey ad157fe423 💄 2014-05-19 09:38:59 -07:00
Kevin Sawicki 50a6d251d6 Prepare 0.97.0 release 2014-05-19 09:18:36 -07:00
probablycorey f3d36a9726 Move instructions out of requirements 2014-05-19 09:06:45 -07:00
probablycorey c2b8cedef1 💄 2014-05-19 09:06:26 -07:00
Kevin Sawicki 314833bbac Add missing parens on indent guide check
Previously the indent guide was always showing on the whitespace only lines

Closes #2274
2014-05-19 08:52:06 -07:00
Kevin Sawicki e643fe7e7d Upgrade to language-go@0.12.0 2014-05-19 08:39:45 -07:00
Cheng Zhao 0d8a05bdb1 Upgrade to atom-shell@0.12.5 2014-05-19 22:52:32 +08:00
Esa Varemo 21fd2b8f1d Make instructions for manual VS path more accurate
Move the line number for the variable close to the actual current location.
Add a note to not to include unescaped backward slashes as they would appear in normal Windows paths.
2014-05-18 17:37:36 +03:00
Pritam Baral c7461f476e Ignore paste in react editor, Fixes #2186 2014-05-18 04:17:21 +05:30
Corey Johnson 7410f9a90d Merge pull request #2278 from GeoffreyFrogeye/fixTypo-cmdInLinuxKeyMaps
Fixed a typo where cmd would appear in linux.cson
2014-05-17 12:39:55 -07:00
Geoffrey Frogeye 3d98f66330 Fixed a typo where cmd would appear in linux.cson
Fixes #2251 again
2014-05-17 17:53:17 +02:00
Nathan Sobo 8e65d30a84 Compute rendered row range once in EditorComponent and pass it down 2014-05-16 20:58:40 -06:00
probablycorey b4977ff617 Upgrade to release-notes@0.31.0 2014-05-16 15:52:59 -07:00
Kevin Sawicki d397001c33 Merge pull request #2198 from hkdobrev/commits-emoji
Add more Emoji to the contributing guide
2014-05-16 15:37:00 -07:00
Kevin Sawicki bd7de18c7a Upgrade to settings-view@0.115.0 2014-05-16 15:20:21 -07:00
Corey Johnson 9ca506de4b Merge pull request #2173 from Locke23rus/issue-1791
💄 Deprecate backspaceToBeginningOf{Word,Line}
2014-05-16 15:13:44 -07:00
Nathan Sobo 626964f15b Upgrade go-to-line to fix double toggle on react editor 2014-05-16 16:07:35 -06:00
probablycorey 532f119b9d Add application:install-update to workspaceView 2014-05-16 15:05:19 -07:00
Haralan Dobrev 187cf2a710 Change security emoji to 🔒 2014-05-17 01:01:21 +03:00
Nathan Sobo c058483422 Update the gutter width when the number of digits changes 2014-05-16 15:56:18 -06:00
Kevin Sawicki a83a6e5127 Explicitly set permissions on temp folder
Refs #2129
2014-05-16 14:47:55 -07:00
Nathan Sobo 57e6419d1d Restore conditional loading of react editor renderer 2014-05-16 15:31:16 -06:00
Nathan Sobo 9b7547cbe0 Get indent guide specs passing again 2014-05-16 15:31:16 -06:00
Nathan Sobo e74dfe3438 Fix gutter specs and update lines when digit counts change 2014-05-16 15:31:16 -06:00
Nathan Sobo fe82e3e30f Only clear screen row caches on lines component if lineHeight changes 2014-05-16 15:31:16 -06:00
Nathan Sobo b000e8e4a2 Get selection specs passing again 2014-05-16 15:31:16 -06:00
Nathan Sobo 64c82f1c87 Update cursor positioning text for simplified token markup 2014-05-16 15:31:15 -06:00
Nathan Sobo 0ad2730353 Update specs for new line node rendering approach
Lines are no longer translated on the GPU, and they aren't inserted into
the DOM in an order that reflects their order in the buffer.
2014-05-16 15:31:15 -06:00
Nathan Sobo 6017b73acf Add ability to look up line nodes by screen row 2014-05-16 15:31:15 -06:00
Nathan Sobo 0334177696 Make lineOverdrawMargin a property 2014-05-16 15:31:15 -06:00
Nathan Sobo 54cec0a5ff Hold the gutter's width with a dummy line number 2014-05-16 15:31:15 -06:00
Nathan Sobo c5fa2bf12d Attach views to .lines instead of defunct .scroll-view-content 2014-05-16 15:31:15 -06:00
Nathan Sobo bc8a1756f3 Use the .selections layer as the underlayer 2014-05-16 15:31:15 -06:00
Corey Johnson & Nathan Sobo 3f01e2f748 Implement shouldComponentUpdate for SelectionsComponent 2014-05-16 15:31:15 -06:00
Nathan Sobo 7dfe829fc8 Style lines with inline styles for performance 2014-05-16 15:31:15 -06:00
Nathan Sobo c87bc57f9e Don't update top positions of lines/lineNodes unless they have changed 2014-05-16 15:31:15 -06:00
Nathan Sobo 89bd241a78 Always run react in dev mode for now 2014-05-16 15:31:14 -06:00
Nathan Sobo d15fd34f7a Render selections on lines layer; don't put each line number on GPU 2014-05-16 15:31:14 -06:00
Nathan Sobo a118cdd32b Put selections and lines on the GPU together in sibling divs 2014-05-16 15:31:14 -06:00
Nathan Sobo 3a2de9c698 Don't render every line on the GPU
Opaque lines are turning out to be a total pain, plus they ruin absolute
positioning on the lines div. The slight speed boost isn't seeming worth
it anymore.
2014-05-16 15:31:14 -06:00
Nathan Sobo c60e5d90fd 💄 2014-05-16 15:31:14 -06:00
Nathan Sobo e9bff37e06 Render line numbers manually 2014-05-16 15:31:14 -06:00
Nathan Sobo 695f8da3c3 💄 extract buildLineInnerHTML method 2014-05-16 15:31:14 -06:00
Nathan Sobo ea5c5c9e84 Move line HTML generation into lines component 2014-05-16 15:31:14 -06:00
Nathan Sobo 4f9108980f WIP: Manually update line nodes when scrolling 2014-05-16 15:31:14 -06:00
Nathan Sobo 8148e4e50d Skip selection restoration on our fork of react 2014-05-16 15:31:14 -06:00
Nathan Sobo f07a832c83 Sync cursor animations when cursors are added 2014-05-16 15:31:14 -06:00
Nathan Sobo 070d239f41 Blink cursors with a CSS animation
Now that they're on their own layer, I don't think it affects the
repaint timing when typing on lines (if it ever did).
2014-05-16 15:31:13 -06:00
Nathan Sobo 9b02055db9 Move selection background region calculation into React component 2014-05-16 15:31:13 -06:00
Nathan Sobo 0162247bd7 Precompute selection regions for all lines
This is easer to reason about and probably more efficient than computing
everything on a per-line basis.
2014-05-16 15:31:13 -06:00
Nathan Sobo 9001d34ddf Change selection specs to match new rendering scheme 2014-05-16 15:31:13 -06:00
Nathan Sobo cbcc30b384 Don't render empty selections 2014-05-16 15:31:13 -06:00
Nathan Sobo ce9fe90217 Make multi-line selections appear to span the screen with a single div
Because lines are opaque and any area of a selection that overlaps a
line is actually rendered on the line itself, the screen-spanning
background of a multi-line selection can actually be rendered as a
single div spanning the entire screen from the first row to the
penultimate row of the selection.
2014-05-16 15:31:13 -06:00
Nathan Sobo 7a9278e6a7 Render selection fragments on opaque lines
Because lines are opaque on the GPU for sub pixel antialiasing, the
lines obscure the selections which were formerly rendered behind the
lines. This commit renders selection fragments *on* each opaque line
layer so the selections look correct again. Still needs cleanup and
optimization.
2014-05-16 15:31:13 -06:00
Nathan Sobo 01622140e3 Rename renderedRowRange to visibleRowRange
We only render visible rows now, so this makes more sense.
2014-05-16 15:31:13 -06:00
Nathan Sobo e44027b186 Fix the height/width of the editor in spec
Now that everything is absolutely position, the editor no longer assumes
a "natural" height and width. This can be addressed later if we want to
allow editors to expand based on their content.
2014-05-16 15:31:13 -06:00
Nathan Sobo d53f97ecfe Fix horizontal scrolling spec 2014-05-16 15:31:13 -06:00
Nathan Sobo f3efd7d60b Position cursors relative to scrollLeft and fix specs 2014-05-16 15:31:12 -06:00
Nathan Sobo 8d25da9474 Update line number rendering specs for new layer scheme 2014-05-16 15:31:12 -06:00
Nathan Sobo 1aee276b45 Update line rendering specs for new layer scheme 2014-05-16 15:31:12 -06:00
Nathan Sobo 191bc115cf Use explicit descendant selector for styling lines 2014-05-16 15:31:12 -06:00
Nathan Sobo 63488997ee Give lines and line numbers an opaque background to support sub-pixel AA
Since lines and line numbers are now on the GPU, their text won't be
properly anti-aliased on low-resolution displays unless their layers
have a solid background.
2014-05-16 15:31:12 -06:00
Nathan Sobo a22480d857 Don't give lines a negative z-index
Removing the z-index makes them accessible via mouse in the inspector.
2014-05-16 15:31:12 -06:00
Nathan Sobo 757ae6de39 Position selections relative to viewport
This is getting closer, but lines still need to be opaque. Multi-line
selections will still need to be rendered behind the line layers so they
can extend to the edge of the viewport, so this code still has value.
2014-05-16 15:31:12 -06:00
Nathan Sobo cfc08e8b98 Allow horizontal scrolling 2014-05-16 15:31:12 -06:00
Nathan Sobo c8e9282557 Position cursors as layers relative to the viewport 2014-05-16 15:31:11 -06:00
Nathan Sobo a36163ce86 Manually set the gutter width to the width of a line number
We need to absolutely position line numbers to minimize repaints, but
the gutter needs to be wide enough to show them.
2014-05-16 15:31:11 -06:00
Nathan Sobo e3d1a6aef8 Render each line number on its own layer 2014-05-16 15:31:11 -06:00
Nathan Sobo 7d8256d343 Drop lineOverdraw and scroll-view-content div 2014-05-16 15:31:11 -06:00
Nathan Sobo bf9f8597a7 Give each line its own layer on the GPU 2014-05-16 15:31:11 -06:00
Nathan Sobo 9f2c8c1756 Measure characters in new lines when vertically scrolling stops 2014-05-16 15:31:11 -06:00
Nathan Sobo 0ae8765a8a Update scroll position directly on mousewheel events
Previously, we were updating the scrollbars and relying on an async
scroll events to fire. But updating the scrollbars is expensive, so this
updates the model directly when the next animation frame fires instead.
2014-05-16 15:31:11 -06:00
Nathan Sobo 308960309d Overdraw lines to discourage Blink from repainting the entire editor 2014-05-16 15:31:11 -06:00
Nathan Sobo b8ac8516fe Don't preserve rows when scrolling 2014-05-16 15:31:11 -06:00
Nathan Sobo 3f1ce617a7 Try to fix flaky spec 2014-05-16 15:05:49 -06:00
Kevin Sawicki 10e609ba27 Upgrade to tabs@0.40.0 2014-05-16 13:31:58 -07:00
Kevin Sawicki 6cae6981d8 Recommend cloning to shallow path
Prevents path length issues
2014-05-16 13:29:39 -07:00
Kevin Sawicki bff396ab1a Upgrade to language-xml@0.13.0 2014-05-16 13:00:46 -07:00
Kevin Sawicki 7f442d045b Check for errors in script/mkdeb
Refs #2129
2014-05-16 12:54:24 -07:00
Kirill Nikitin 8918eb4758 Bug #1791 Fix typo in example group name and function names. 2014-05-16 23:05:05 +04:00
Kevin Sawicki 628ea72943 Check if selector matches parents of test element
Previously a menu for a keybinding with a .workspace selector would not
display the shortcut because the selector wasn't matching the test editor
element directly.

Now the parent elements of the test editor are checked as well.

Closes #2089
2014-05-16 11:57:04 -07:00
Kevin Sawicki fc2830bacb Use div for test workspace element 2014-05-16 11:53:40 -07:00
Kevin Sawicki b5bff9f8b8 Upgrade to language-python@0.16.0 2014-05-16 10:38:48 -07:00
Kevin Sawicki 5e2181e665 🐧 Add keybindings for select-to-top/bottom
ctrl-shift-home/end are now mapped

Closes #2251
2014-05-16 10:05:33 -07:00
Kevin Sawicki b0e91f8b33 Upgrade to tree-view@0.93.0 2014-05-16 09:47:44 -07:00
Kevin Sawicki 635af7f838 Upgrade to apm 0.54.0 2014-05-16 09:27:16 -07:00
Kevin Sawicki e537080b64 Upgrade to autocomplete@0.28.0 2014-05-16 08:36:02 -07:00
Nathan Sobo f2c7d171bf Fix another subscription leakage associated with theme manager specs 2014-05-16 09:14:21 -06:00
Nathan Sobo 7a4a85cb20 Fix failures running config specs locally 2014-05-16 09:00:01 -06:00
Nathan Sobo 2952f4c2ad Merge pull request #2213 from dyross/dyr-hide-cursor-nicely
Hide the cursor with cursor-hidden class rather than element.style
2014-05-16 08:36:27 -06:00
Nathan Sobo ce668e7139 Fix subscription leak when ~/.atom/styles.less is present running specs 2014-05-16 08:33:49 -06:00
Kirill Nikitin 917b223c6c merge conflict 2014-05-16 11:45:43 +04:00
David Y. Ross e3302b3f73 hide the cursor with cursor-hidden class rather than element.style 2014-05-15 19:20:32 -07:00
probablycorey 38a347ddab Upgrade to grunt-download-atom-shell@0.7.2 2014-05-15 16:41:07 -07:00
Kevin Sawicki e3dbd412e1 Upgrade to find-and-replace@0.105.0 2014-05-15 15:34:50 -07:00
Kevin Sawicki fc9a11959c Upgrade to language-html@0.22.0 2014-05-15 15:33:37 -07:00
Kevin Sawicki 71155abf57 Upgrade to find-and-replace@0.104.0 2014-05-15 15:19:54 -07:00
Kevin Sawicki d5458c1865 Upgrade to fuzzy-finder@0.51.0 2014-05-15 15:14:51 -07:00
Kevin Sawicki 56af2ca4d7 Upgrade to bracket-matcher@0.34.0 2014-05-15 15:10:01 -07:00
Corey Johnson f30c56c237 Don't require 32bit node 2014-05-15 14:55:58 -07:00
Kevin Sawicki cc1e6e2a1f Upgrade to find-and-replace@0.103.0 2014-05-15 14:48:24 -07:00
Kevin Sawicki d7c98cb394 Upgrade to language-sass@0.11.0 2014-05-15 14:44:36 -07:00
Kevin Sawicki 4ff5f96fd4 Upgrade to go-to-line@0.20.0 2014-05-15 14:41:33 -07:00
Kevin Sawicki 1c1c3617e9 Upgrade to find-and-replace@0.102.0 2014-05-15 14:40:16 -07:00
Corey Johnson bb9d67a1b1 Merge remote-tracking branch 'origin/master' into cj-windows-build-instructions-update
Conflicts:
	script/bootstrap
2014-05-15 14:34:07 -07:00
Kevin Sawicki 187e264445 Upgrade to language-ruby-on-rails@0.14.0 2014-05-15 14:08:41 -07:00
Kevin Sawicki 493cd24059 Upgrade to apm 0.53.0 2014-05-15 13:54:36 -07:00
Kevin Sawicki 3c766d87c2 Upgrade to symbols-view@0.52.0 2014-05-15 13:46:28 -07:00
Kevin Sawicki f360ca2cb7 Upgrade to fs-plus 2.2.3 2014-05-15 12:15:12 -07:00
Haralan Dobrev ba8bd80173 Remove ♻️ from the emoji in CONTRIBUTING.md 2014-05-15 22:02:29 +03:00
Haralan Dobrev 6102143faf Use 🔥 emoji for general deleting of code 2014-05-15 21:50:06 +03:00
Kevin Sawicki 3eadc61a3b 💄 Use trailing if 2014-05-15 10:48:02 -07:00
Kevin Sawicki 2bef7e26d7 Merge pull request #2246 from Flannelhead/master
Make ctrl+click add a new cursor in Linux and Windows, fixes #2105
2014-05-15 10:24:15 -07:00
Kevin Sawicki 7d655bf840 📝 Mention previous value is in second argument object 2014-05-15 10:16:29 -07:00
Kevin Sawicki 42c4dc6937 Merge pull request #2243 from lee-dohm/doc-fix
📝 Clean up Config::observe
2014-05-15 10:13:35 -07:00
Kevin Sawicki a4059110f9 Merge pull request #2232 from atom/TOS-help
Include Terms of Use in the help menu
2014-05-15 10:12:06 -07:00
Haralan Dobrev 952c96d03b Use 🍎 for Mac OS specific bugs 2014-05-15 20:10:40 +03:00
Kevin Sawicki 4c73f4e968 Upgrade to language-javascript@0.26.0 2014-05-15 09:57:26 -07:00
Kevin Sawicki 5f36406b52 Upgrade to archive-view@0.31.0 2014-05-15 09:52:45 -07:00
Kevin Sawicki 385cf0f3df Upgrade to language-gfm@0.37.0 2014-05-15 09:46:33 -07:00
Kevin Sawicki e70ad97273 Upgrade to language-ruby@0.24.0 2014-05-15 09:32:56 -07:00
Kevin Sawicki 0b7bf34a0f Upgrade to language-gfm@0.36.0 2014-05-15 09:29:39 -07:00
Kevin Sawicki 713bce7f0b Upgrade to autoflow@0.17.0 2014-05-15 09:25:19 -07:00
Flannelhead 534704a32c Check for e.ctrlKey instead of e.metaKey if not on Mac. 2014-05-15 10:09:50 +03:00
Lee Dohm 37241a7919 📝 Clean up Config::observe 2014-05-14 21:15:17 -07:00
Corey Johnson 333c5b66d1 Merge pull request #2240 from lee-dohm/node-module-doc
📝 Document process for hacking node module components
2014-05-14 20:05:41 -07:00
Lee Dohm a47d55f016 📝 Document process for hacking node module components
See: http://discuss.atom.io/t/how-to-setup-development-for-core-modules-like-atom-keymap/9221/18?u=leedohm
2014-05-14 18:25:12 -07:00
Corey Johnson 58c55cdf81 Troubleshooting message no longer needed because of
50a616d91c
2014-05-14 16:22:35 -07:00
Corey Johnson 50a616d91c Upgrade to grunt-download-atom-shell@0.7.1 2014-05-14 16:20:34 -07:00
Corey Johnson a2be86d15a Require fs in bootstrap 2014-05-14 15:42:05 -07:00
Corey Johnson 73f8c28add Update windows build instructions 2014-05-14 15:34:19 -07:00
Corey Johnson d015793851 Remove unnecessary instructions 2014-05-14 15:31:58 -07:00
Corey Johnson 0b5b741db4 Make sure python2.7 is installed on win32
Closes #2193 
Closes #2167
Closes atom/node-runas#5
2014-05-14 15:29:21 -07:00
Corey Johnson aeac32ae47 Ensure that node is 32bit on win32 2014-05-14 14:49:35 -07:00
Corey Johnson fab60e7faa Create separate instruction
I'm not sure if this step is needed, but it existed before. If it is 
needed we should include WHY you have to do this.
2014-05-14 14:04:56 -07:00
Corey Johnson 6296665f46 Removed unnecessary instruction. 2014-05-14 14:00:13 -07:00
Cameron McEfee 7882ac60d8 Include Terms of Use in the help menu 2014-05-14 10:44:33 -07:00
Andrew Stubbs 1fe6c498ac Make hard tabs align to columns. 2014-05-14 13:31:03 +01:00
probablycorey 4fa0b6e783 Upgrade to welcome@0.14.0 2014-05-13 20:57:17 -07:00
Corey Johnson 3a8ddc0cd6 Merge pull request #1977 from 1ace/patch-1
Is atom really incompatible with the newer version of nodejs?
2014-05-13 17:33:40 -07:00
Corey Johnson 3803b473c5 Merge pull request #2176 from Locke23rus/more-naitive-linux-keymaps
🐧 Fix #2166 Add commands for ctrl-home and ctrl-end.
2014-05-13 17:18:30 -07:00
Corey Johnson 93d993d876 Merge pull request #2171 from avdg/fullscreen
Map key for full screen on windows
2014-05-13 17:12:53 -07:00
Corey Johnson 2b3a3ac3c0 Merge pull request #2185 from jugglingnutcase/win32-bindings
Improve some Win32 ctrl keybindings
2014-05-13 17:10:27 -07:00
probablycorey c8b2e6ed2a Prepare 0.96.0 release 2014-05-13 16:53:39 -07:00
James R Sconfitto 58fa414c21 💄 Move bindings under platform header 2014-05-13 16:13:30 -04:00
James R Sconfitto 8872b0bc9b Add ctrl-pageup and ctrl-pagedown Win32 bindings 2014-05-13 16:09:01 -04:00
probablycorey c77a6b10de Upgrade to language-html@0.21.0 2014-05-13 07:55:05 -07:00
Corey Johnson f86280a77b Merge pull request #2170 from skardach/fix-filename-string
Cast opened paths to string
2014-05-12 22:49:24 -07:00
Corey Johnson 65ae582d96 Merge pull request #2194 from aureliojargas/patch-3
Fix link for TextMate's GitHub Organization
2014-05-12 22:46:22 -07:00
probablycorey 5694f9c703 Upgrade to language-html@0.20.0 2014-05-12 18:38:21 -07:00
Haralan Dobrev 6c4d1be004 📝 Add more Emoji to the contributing guide
Suggest Emoji for:
 - Fixing something on Mac OS
 - Fixing a bug
 - Burning whitespace
 - Fixing the CI build
 - Adding tests
 - Refactoring
 - Security
2014-05-13 03:05:31 +03:00
Corey Johnson 9cfa46ea37 Upgrade to node-pathwatcher@1.3.1 2014-05-12 15:20:37 -07:00
Corey Johnson 11d5dfee3a Upgrade to markdown-preview@0.71.0 2014-05-12 14:51:19 -07:00
Corey Johnson 864f61c430 Upgrade to node-pathwatcher@1.3.0 2014-05-12 14:49:30 -07:00
Aurelio Jargas ca164a0b0b Fix link for TextMate's GitHub Organization 2014-05-12 15:56:06 -03:00
Corey Johnson e011becc1a Upgrade to language-ruby-on-rails@0.13.0 2014-05-12 11:26:14 -07:00
Corey Johnson 25f5717ccf Merge pull request #1971 from abe33/feature_proper_multiselections_copy_paste
Implements multiple selections clipboard paste
2014-05-12 11:10:37 -07:00
Ivan Žužak 3f0640f4c3 Merge pull request #2162 from teddybradford/development
Remove duplicate . from default nonWordCharacters
2014-05-12 16:31:04 +01:00
James R Sconfitto 65e8de9db8 Improve ctrl-delete binding for Win32 2014-05-12 11:22:34 -04:00
Cheng Zhao c1ed25d5dc Merge pull request #2189 from atom/atom-shell-v0.12.4
Upgrade to atom-shell@0.12.4
2014-05-12 23:10:38 +08:00
Cheng Zhao f731769afd 📝 No more need of libudev hack on Linux. 2014-05-12 22:28:03 +08:00
Cheng Zhao c466cef7d1 Upgrade to atom-shell@0.12.4 2014-05-12 22:27:22 +08:00
Stan Kardach b4cb92af99 Fix #2152: Cast opened paths to string
path.resolve() was throwing an exception if given path was not a string.
When iterating through all given paths, each entry is casted by JS to
most suitable type and paths in form of a number (i.e. '1234') were
cast to Number, hence the bug.
2014-05-12 15:59:33 +02:00
James Sconfitto 5e7cbbf506 Add ctrl-home and ctrl-end Win32 bindings 2014-05-11 23:03:18 -04:00
Kirill Nikitin 397e0a8ac2 🐧 Add commands for ctrl-home and ctrl-end. 2014-05-12 05:02:16 +04:00
Kirill Nikitin 111b5d1fbe 💄 Deprecate backspaceToBeginningOf{Word,Line}
Rename functions `backspaceToBeginningOfWord` to `deleteToBeginningOfWord` and
`backspaceToBeginningOfLine to `deleteToBeginningOfLine`.
Rename commands `editor:backspace-to-beginning-of-word` to
`delete-to-beginning-of-word` and `editor:backspace-to-beginning-of-line` to
`editor:delete-to-beginning-of-line`.

Fix #1791
2014-05-12 02:50:20 +04:00
abe33 b2e86c80c4 Change test to cover all Selection::copy branches 2014-05-12 00:06:13 +02:00
abe33 b77ea04056 💄 Remove unnecessary double conditions 2014-05-12 00:06:01 +02:00
Anthony Van de Gejuchte ba94f38166 Map key for full screen on windows 2014-05-11 23:12:45 +02:00
probablycorey 7cdaaf2f78 Upgrade markdown packages 2014-05-11 13:52:36 -07:00
Corey Johnson 6caf60bd6b Merge pull request #2160 from dyross/dyr-dev-builds
append git hash to version for dev builds
2014-05-11 12:58:39 -07:00
Stan Kardach 19c7086200 Fix #2152: Cast opened paths to string
path.resolve() was throwing an exception if given path was not a string.
When iterating through all given paths, each entry is casted by JS to
most suitable type and paths in form of a number (i.e. '1234') were
cast to Number, hence the bug.
2014-05-11 17:29:24 +02:00
Teddy Bradford 1519dda294 Remove duplicate . from default nonWordCharacters 2014-05-11 02:10:30 -04:00
David Y. Ross a7efca8bb4 append git hash to version for dev builds 2014-05-10 20:50:20 -07:00
Corey Johnson dbe15f7dda Merge pull request #2142 from aureliojargas/patch-1
Remove unused 's' option from getopts
2014-05-10 15:53:21 -07:00
Corey Johnson c81a6737ad Merge pull request #2144 from aureliojargas/patch-2
Use $(...) for command substitution, not backticks
2014-05-10 13:06:42 -07:00
Paul Betts 5b0d974b43 Merge pull request #2074 from dertuxmalwieder/master
+FreeBSD, -bullshit
2014-05-10 08:37:16 -07:00
Aurelio Jargas 2b73dff0f4 Use $(...) for command substitution, not backticks
Currently both \`...\` and `$(...)` are used for command substitution. It's better to chose just one and stick to it, to avoid confusion.

Some arguments favoring `$(...)`:

* **Easier to read.** The backtick is easily confused with apostrophes and quotes.
* **Easier to nest.** Nesting backticks commands is an escaping nightmare. Using parenthesis is natural: `$(foo $(bar))`
2014-05-10 09:15:53 -03:00
Aurelio Jargas adf0ff0a67 Remove unused 's' option from getopts
This option is not handled by the next `case` command.
2014-05-10 08:41:30 -03:00
Corey Johnson c79ef0473d Merge pull request #2133 from aaronhalford/updatedocs
Update docs and fix typos
2014-05-09 17:19:07 -07:00
Aaron Halford d51b955e09 Update linux.md 2014-05-09 15:22:43 -07:00
Aaron Halford 774d7ec0af Update docs and fix typos 2014-05-09 15:16:13 -07:00
probablycorey d6f4b00e16 🔥 whitespace 2014-05-09 11:40:27 -07:00
probablycorey 9d81df8670 Remove x86 instructions because they aren't supported.
Based on comment by https://github.com/atom/atom/pull/2117/files#r12489527
2014-05-09 11:40:18 -07:00
Corey Johnson 14a430b939 Merge pull request #2128 from alfredxing/body-fullscreen-class
Add `fullscreen` class to body when in full screen
2014-05-09 11:36:39 -07:00
Corey Johnson 07de4a70a1 Merge pull request #2117 from sophearak/master
Add troubleshoot document libudev in Ubuntu 14.04
2014-05-09 11:30:39 -07:00
Corey Johnson eb84ac829b Merge pull request #2114 from Someguy123/master
Add troubleshooting to Windows build instructions
2014-05-09 11:29:50 -07:00
Corey Johnson b8db56a77b Merge pull request #2113 from MitchelSBlake/patch-1
Add more sublime parity keybindings
2014-05-09 11:25:46 -07:00
Corey Johnson 1036f16d1e Merge pull request #2111 from Locke23rus/update-linux-keymaps
🐧 Fix #2103, #2100 Update platform bindings for linux/win.
2014-05-09 11:13:13 -07:00
Nathan Sobo 5ed1cfc259 Merge pull request #1923 from atom/ns-fix-scrollbar-overlap
Refine scrollbar interactions
2014-05-09 11:46:35 -06:00
Nathan Sobo ce5c29fb47 Base the visible lines on the height instead of the clientHeight
Because overlay scrollbars are invisible unless scrolling and even
regular scrollbars can be transparent.
2014-05-09 11:33:04 -06:00
Nathan Sobo f0fd48202c Refresh scrollbars when overlay/classic style preferences changes 2014-05-09 11:33:04 -06:00
Nathan Sobo d5eb8c21b2 Only refresh editor scrollbars on stylesheet changes that require it
If a stylesheet is added or removed, we check if it contains a selector
for scrollbars before refreshing anything.
2014-05-09 11:33:04 -06:00
Nathan Sobo 76b9982e04 Emit stylesheet-added/removed from ThemeManager w/ CSSStyleSheet objects
This enables subscribers to detect not just that stylesheets have
changed, but specifically how they have changed. This is used by the
React editor component to only refresh scrollbars when a stylesheet
that actually contains selectors for scrollbar elements is added or
removed.
2014-05-09 11:33:04 -06:00
Nathan Sobo ca7f11f7d0 Default scrollbar height/width to 15 when it's measure as 0
A 0 measurement indicates that overlay scrollbars are enabled, so we
just fall back to 15px in that case so the user can hover directly over
the scrollbar to scroll.
2014-05-09 11:33:04 -06:00
Nathan Sobo 1c1ace90db Hide and show scrollbars before measuring them after stylesheet changes
We measure the scrollbar-corner node when there's a stylesheet change,
but Chromium won't apply the new style if it was already visible before
the change. This commit hides and shows it before measuring so we get
accurate values.
2014-05-09 11:33:04 -06:00
Nathan Sobo bdd605e85b Explicitly assign dummy scrollbars to the correct width/height
Previously, dummy scrollbars were always 15px wide/tall. This caused
them to obscure the ability to click for the entire 15px region, even if
the actual scrollbar was styled to be much thinner. Now we explicitly
measure the size of scrollbars on mount and when the stylesheets change
and set the height/width explicitly.
2014-05-09 11:33:04 -06:00
Nathan Sobo e1b4b921ba Hide scrollbar when not scrollable in a given direction 2014-05-09 11:33:04 -06:00
Nathan Sobo ab1ede5fe6 Add a dummy scrollbar corner
Horizontal / vertical scrollbars render a 'corner' on the lower right
when they would otherwise overlap. I previously relied on drawing both
dummy scrollbars at their full width/height so the corner got rendered,
but that interfered with the display of the horizontal scrollbar in
certain circumstances because it was too wide to scroll. This commit
provides that behavior with an absolutely positioned div with the same
dimensions as the intersection of scrollbars when both are visible.
2014-05-09 11:33:04 -06:00
Nathan Sobo 5e6d91d66c Don't allow spec window size to interfere with the size of the editor 2014-05-09 11:33:04 -06:00
Nathan Sobo dbd271f70a Don't obscure last character of long lines with vertical scrollbar
This entailed quite a few changes to dial in scrollbars. The scrollbars
are now adjusted in size to account for the width of the opposite
scrollbar. If the width or height are not explicitly constrained and we
are scrollable in the opposite direction that is constrained, we account
for the width of the opposite scrollbar in assigning a natural height
or width based on the content.
2014-05-09 11:33:04 -06:00
Nathan Sobo 527ada47f9 Account for gutter width in scrollWidth of horizontal scrollbar
Because the scrollbar now spans the entire editor but the scrollable
area does not include the gutter, we need to add the current width of
the gutter to the scroll width of the horizontal scrollbar to allow
it to scroll to the end of the longest lines.
2014-05-09 11:33:03 -06:00
Nathan Sobo afb70d0a95 Remove stray return in spec 2014-05-09 11:33:03 -06:00
Nathan Sobo b5f910ad06 Update line number padding when max digits changes 2014-05-09 11:33:03 -06:00
Nathan Sobo e412371b88 Remove logging 2014-05-09 11:33:03 -06:00
Nathan Sobo 7b4bc16531 Fix specs that broke when accounting for horizontal scrollbar height 2014-05-09 11:33:03 -06:00
Nathan Sobo e6df30e94c Respect horizontal scrollbar when rendering the vertical, and vice versa
We set overflow to hidden in the opposite scroll direction only if we
can't actually scroll in that direction, causing the white square where
neither scrollbar overlaps to appear at the lower right corner.
2014-05-09 11:33:03 -06:00
Nathan Sobo d9ba9262bf Update scrollTop to valid position when scrollbar disappears 2014-05-09 11:33:03 -06:00
Nathan Sobo c4be32a5dd Revert "Revert "Don't obscure the last line of the editor with the horizontal scrollbar""
This reverts commit 1d634e471e.
2014-05-09 11:33:03 -06:00
Corey Johnson 0a32f6b5f0 Merge pull request #2050 from Spice-King/win-cmd-spawn-fix
Fix running .cmd stubs through BufferedProcess
2014-05-09 09:12:31 -07:00
Kyle Filz f9fe5efbb0 Fix running .cmd stubs through BufferedProcess
ChildProcess.spawn only will run .exe files on Windows, not .cmd, .bat,
.anythingElse.

See joyent/node#2318 for more information.
2014-05-09 09:04:36 -05:00
Kirill Nikitin 87e723e33b 🐧 Fix #2103, #2100 Update platform bindings for linux/win. 2014-05-09 17:57:55 +04:00
Kevin Sawicki 3f0302b256 Upgrade to apm@0.52.0 2014-05-09 13:52:31 +02:00
Ivan Žužak 88d024e73b Upgrade to feedback@0.33.0 2014-05-09 12:23:06 +01:00
Sophearak THA 47a2e57633 📝 Add troubleshoot document libudev in Ubuntu 14.04 2014-05-09 14:44:57 +07:00
abe33 e7acbb314e 😕 Forgot to replace most references to clipboardMetadata
Never attempt to fix a PR right before going to sleep!
2014-05-09 09:33:35 +02:00
Cthulhux d6a4c70929 FreeBSD
Signed-off-by: Cthulhux <zeug@tuxproject.de>
2014-05-09 09:28:50 +02:00
Alfred Xing 839cad0c2a Add fullscreen class to body when in full screen
Add a `fullscreen` class to body when full screen is triggered, as suggested
by @orderedlist in #1694
2014-05-08 20:36:46 -07:00
Chris S d3845db403 Add troubleshooting to Windows build instructions 2014-05-09 04:04:43 +01:00
Scott Blake 3d68bdf126 Add more sublime parity keybindings 2014-05-08 22:57:32 -04:00
Daniel Hengeveld 0d190d2cd4 Merge pull request #2112 from atom/why-ghfw
Explain why GH4W
2014-05-08 19:21:53 -07:00
Paul Betts 4afae028ec Explain why GH4W 2014-05-08 19:00:53 -07:00
Paul Betts 5165f0df88 Merge remote-tracking branch 'origin/master' into winreadme
Conflicts:
	README.md
2014-05-08 18:06:05 -07:00
Corey Johnson 5b7b3501a6 Merge pull request #2081 from xcvd/master
Shift backspace keymap
2014-05-08 17:03:25 -07:00
Corey Johnson c3937d0c4c Merge pull request #2073 from captn3m0/master
Make atom build behind firewalls
2014-05-08 16:53:31 -07:00
Corey Johnson 6e27208c5c Merge pull request #2108 from atom/cj-update-build-docs
Update build docs
2014-05-08 16:42:34 -07:00
Corey Johnson 91342db0ba Tweak build instruction content 2014-05-08 16:34:54 -07:00
Corey Johnson 8f7123ae12 Update build instruction links 2014-05-08 16:31:10 -07:00
Corey Johnson 3a22b3d4b8 Move build instructions to separate files 2014-05-08 16:30:44 -07:00
Corey Johnson 919ca82ccd Update building section of docs 2014-05-08 16:16:31 -07:00
Corey Johnson d35baac054 Add build instructions section to docs folder 2014-05-08 16:16:13 -07:00
Eric Engeström 9302242299 Allowing node > 1.0 (no reason not to already do that, I guess) 2014-05-09 00:45:13 +02:00
Eric Engeström ed90a78ea5 Replacing string comparison with actual int comparison 2014-05-09 00:42:40 +02:00
Corey Johnson 9aa2df7cee Merge pull request #2059 from bradgearon/master
append .cmd to apm in package-manager.coffee if platform is win32
2014-05-08 15:14:36 -07:00
Corey Johnson 41ea18a8f1 Merge pull request #2047 from cameronmcefee/master
Wordsmith the Atom readme
2014-05-08 15:10:39 -07:00
Corey Johnson 5cf37fd13e Merge pull request #2045 from atom/cj-tabs-be-weird
Make Atom smarter about guessing if a file uses soft or hard tabs
2014-05-08 15:09:32 -07:00
abe33 3e12695914 💄 Clear object deconstruction in Selection::copy 2014-05-09 00:07:46 +02:00
abe33 ed1c8897ec 😅 Forgot to remove the test focus 2014-05-09 00:07:00 +02:00
abe33 75eb0182e9 💄 Use skinny arrow instead 2014-05-09 00:03:40 +02:00
abe33 554165ca48 💄 Harmonize lineForRow calls in specs 2014-05-09 00:02:31 +02:00
abe33 5a5cb869e2 💄 Replace have with has in spec description 2014-05-08 23:59:55 +02:00
Corey Johnson a649d75ab8 Merge remote-tracking branch 'origin/master' into cj-tabs-be-weird
Conflicts:
	package.json
2014-05-08 14:36:50 -07:00
Corey Johnson 255cdbb60a Avoid problems with version pattern ^X.Y.Z
Older versions of npm don't recognize that pattern
2014-05-08 14:14:26 -07:00
Corey Johnson bd4e56fd08 Upgrade to text-buffer@2.2.2 2014-05-08 14:01:30 -07:00
Corey Johnson 5246d784db Upgrade to text-buffer@2.2.1 2014-05-08 13:50:54 -07:00
Brad Gearon e945b83318 remove os require use process.platform instead 2014-05-08 12:38:35 -05:00
Kevin Sawicki 38bd996996 Merge pull request #2052 from AngelEzquerra/ignore_mercurial_files
Add mercurial directories to default list of ignored names
2014-05-08 19:23:40 +02:00
Kevin Sawicki 8f3a72e11b Merge pull request #2071 from lee-dohm/doc-fix
📝 Some simple documentation fixes
2014-05-08 19:21:00 +02:00
Kevin Sawicki ddc62efb44 Upgrade to pathwatcher@1.2.4 2014-05-08 19:17:17 +02:00
Kevin Sawicki 8f08e497a0 Upgrade to scrollbar-style@0.4.0 2014-05-08 19:16:47 +02:00
xcvd 8048f8af5f Shift backspace keymap
Within windows build shift-backspace currently does nothing. Behaviour
untested in linux (perhaps linux.cson should be modified too?)
2014-05-08 11:53:47 +01:00
Cthulhux 4fc4e36902 +FreeBSD, -bullshit
Signed-off-by: Cthulhux <zeug@tuxproject.de>
2014-05-08 09:38:16 +02:00
Abhay Rana c66d3fdba0 Make atom build behind firewalls
This is to get `npm install` to work behind firewalls where `git://` is blocked.
2014-05-08 12:24:34 +05:30
Lee Dohm 9b49c2f987 📝 Some simple documentation fixes 2014-05-07 22:38:51 -07:00
Paul Betts bceed13606 Fix Windows build instructions 2014-05-07 20:08:09 -07:00
Brad Gearon d99c9edc43 append .cmd to apm in package-manager.coffee if platform is win32
avoids NOENT error when searching for packages
2014-05-07 18:35:05 -05:00
Cameron McEfee 31306a3243 Apply @probablycorey's suggestions 2014-05-07 15:04:39 -07:00
Angel Ezquerra 67de17e0c3 Add mercurial directories to default list of ignored names
atom already ignored git and svn directories. It makes sense to ignore
mercurial (.hg) directories as well.
2014-05-07 23:56:29 +02:00
Corey Johnson 3371252656 Merge pull request #1995 from dpen2000/patch-1
Update README.md
2014-05-07 14:37:53 -07:00
Nathan Sobo a7e9037e5b Upgrade language-go for grammar improvements in atom/language-go#18 2014-05-07 14:44:30 -06:00
Cameron McEfee b3e376ce7c This doesn't need to change. 2014-05-07 13:03:59 -07:00
Cameron McEfee d24b664873 fix io typo 2014-05-07 13:00:30 -07:00
Cameron McEfee b8394830a0 Wordsmith the readme 2014-05-07 12:59:58 -07:00
probablycorey 7d76105530 Merge remote-tracking branch 'origin/master' into cj-tabs-be-weird 2014-05-07 12:59:23 -07:00
probablycorey bbe399196f Upgrade to find-and-replace@0.101.0 2014-05-07 12:49:45 -07:00
probablycorey 8c6cdf7358 Upgrade to text-buffer@2.2.1 2014-05-07 12:34:34 -07:00
dpen2000 f71bb9349b Update README.md
Change 2010 express edition link because old one redirects to a general page about Visual Studio
2014-05-07 14:26:40 -05:00
probablycorey 6bb260140b Don't use comment lines to determine soft/hard tabs.
Closes atom/language-php#24
Closes #1733
2014-05-07 12:18:05 -07:00
Nathan Sobo 88aec85f92 Upgrade pathwatcher to support windows builds 2014-05-07 12:24:02 -06:00
Kevin Sawicki 61cdee9743 Upgrade to language-less@0.9.0 2014-05-07 09:20:30 -07:00
Kevin Sawicki 15c3efa6e4 💄 Add variable names for clarity 2014-05-07 09:14:42 -07:00
Kevin Sawicki a1835efb4e Merge pull request #1988 from Ferk/master
Fix for source tarballs error on 'set-version' (not a git repository)
2014-05-07 09:12:49 -07:00
Kevin Sawicki 5e0f132d33 Merge pull request #1991 from evinugur/master
ignore Thumbs.db in workspace-view and in actual atom gitignore
2014-05-07 09:05:56 -07:00
Kevin Sawicki 2c7c4c95f2 Merge pull request #2013 from pborreli/typos
Fixed typos
2014-05-07 08:56:19 -07:00
Kevin Sawicki 81f115d3db Merge pull request #2006 from Heather/patch-1
Visual C++ 2010 should be SP1
2014-05-07 08:48:48 -07:00
Kevin Sawicki c4f872acff Upgrade to apm 0.51.0 2014-05-07 08:43:25 -07:00
Nathan Sobo b3dbb18889 Upgrade reactionary for cleanup / removal of unused 'class' feature 2014-05-07 09:23:51 -06:00
Cheng Zhao 02a278d80c Mention the mkdeb task, closes #1969. 2014-05-07 22:54:20 +08:00
Nathan Sobo c7954a4c5e Upgrade path watcher for variable name fix on windows 2014-05-07 08:15:51 -06:00
Cheng Zhao 61fff23be2 Upgrade to atom-shell@0.12.3 2014-05-07 16:31:37 +08:00
Pascal Borreli 7070ed8ae4 Fixed typos 2014-05-07 08:52:58 +01:00
Heather 101b18e408 Visual C++ 2010 should be SP1
else-way there will be "failure during conversion to COFF"
description on StackOverflow: http://stackoverflow.com/questions/10888391/error-link-fatal-error-lnk1123-failure-during-conversion-to-coff-file-inval
2014-05-06 22:15:45 -07:00
Cheng Zhao f0bd3b1c20 Ignore the "paste" event, fixes #1945.
Somehow on Linux the "paste" event is emitted when user presses ctrl-v,
even if the ctrl-v has been captured by window event handler. This
should be a bug of Chromium.
2014-05-07 10:39:01 +08:00
Corey Johnson 921bf8501f Merge pull request #1993 from mattbelland/docs-grammar-fix
Remove unnecessary conjunction and spaces
2014-05-06 19:30:08 -07:00
Matt Belland 594a2d201b Remove unnecessary conjunction and spaces 2014-05-06 19:19:43 -07:00
Evin Ugur cb0ba55871 ignore Thumbs.db in workspace-view and in actual atom gitignore 2014-05-06 21:24:11 -04:00
Fernando C.V 27bcf046b1 Take version from package.json also when there's no .git directory (source releases) 2014-05-07 02:55:07 +02:00
Kevin Sawicki 44f19610b6 Add grunt.cmd 2014-05-06 17:03:19 -07:00
Kevin Sawicki a1d2e253ea Upgrade to apm 0.50.0 2014-05-06 16:53:33 -07:00
Kevin Sawicki a961a8f644 Upgrade to apm@0.49.0 2014-05-06 16:14:52 -07:00
probablycorey 86b7fec0bb Update build requirements in readme 2014-05-06 15:55:10 -07:00
Kevin Sawicki 6060e0d8a9 Upgrade to symbols-view@0.51.0 2014-05-06 15:37:41 -07:00
Kevin Sawicki c160601a9d Upgrade to spell-check@0.35.0 2014-05-06 15:15:32 -07:00
abe33 56a1ecf6c1 Adds specs for multi selections clipboard handling 2014-05-07 00:13:04 +02:00
Kevin Sawicki 648441ee5c Update to scrollbar-style@0.3.0 2014-05-06 15:04:59 -07:00
Kevin Sawicki 03f0e084e1 Merge pull request #1978 from kelunik/master
Use headings to enable links
2014-05-06 15:03:49 -07:00
Niklas Keller ab57dc840f Use headings to enable links 2014-05-07 00:01:59 +02:00
Eric Engeström 2ff5309d54 Allow newer version of nodejs 2014-05-07 00:00:44 +02:00
Kevin Sawicki a308903735 Merge pull request #1975 from giodamelio/patch-1
Add message about 64bit to the Linux requirements fixes #1973
2014-05-06 14:53:24 -07:00
Gio d'Amelio b6cb604330 Add message about 64bit to the Linux requirements fixes #1973 2014-05-06 14:52:22 -07:00
Kevin Sawicki fb557e9b90 Merge pull request #1972 from dsine-de/patch-1
fixed Windows path slash
2014-05-06 14:32:17 -07:00
dsine-de 3180ab067c fixed Windows path slash 2014-05-06 23:31:31 +02:00
abe33 4b7d982eb4 💄 Fix typo in pasteText method comments 2014-05-06 23:26:13 +02:00
abe33 fbabc6f455 Implements multiple selections clipboard paste
Includes:

  - Passing the selection index in the `Editor::mutateSelectedText`
method callback
  - Storing all the selections content on many calls of
`Selection::copy` with `maintainClipboard = true` in a metadata
`selections` array
  - Handling clipboard with a `selections` metadata in
the`Editor::pasteText` method
2014-05-06 23:19:39 +02:00
Kevin Sawicki fa759d8128 Upgrade to apm 0.48.0 2014-05-06 14:10:56 -07:00
Kevin Sawicki e9ed45671f Merge pull request #1935 from tombh/1814-linux-compat-show-error-on-startup
If atom.sh has non-zero exit show errors captured by nohup. Refers to #1814
2014-05-06 13:32:17 -07:00
Kevin Sawicki 8cc871f326 Merge pull request #1957 from bogdan-kulynych/master
Add node and npm versions to Linux build instructions, as mentioned in #1814
2014-05-06 12:48:16 -07:00
Corey Johnson 3651adbefd Upgrade to language-javascript@v0.25.0 2014-05-06 12:24:09 -07:00
Bogdan ff70ded25b Correct npm version 2014-05-06 22:04:12 +03:00
Bogdan 244c06b524 Add node and npm versions to Linux build instructions, as mentioned in #1814 2014-05-06 21:44:17 +03:00
Kevin Sawicki e7309b254c Merge pull request #1951 from bonh/master
Make sure gyp uses Python 2 (#1933)
2014-05-06 11:16:36 -07:00
Jeff Bonhag 0cdce9c665 Make sure gyp uses Python 2 (#1933)
gyp/npm uses /usr/bin/python to build, which is a problem on systems where
/usr/bin/python is Python 3 or higher.  Fortunately, you can tell npm which
Python to use.
2014-05-06 14:10:40 -04:00
Kevin Sawicki 7a10bf1c33 Indent install option 2014-05-06 10:35:53 -07:00
Kevin Sawicki a6d5a4ab5d Merge pull request #1941 from qJake/master
Add Git for Windows as Windows build requirement
2014-05-06 10:34:38 -07:00
Kevin Sawicki 68f3c98872 Upgrade to apm@0.47.0 2014-05-06 10:32:39 -07:00
qJake 0b8c0cc431 Add Git for Windows as Windows build requirement 2014-05-06 12:28:16 -05:00
Kevin Sawicki d9eaf8d334 Update to scrollbar-style@0.2.0 2014-05-06 10:24:58 -07:00
Corey Johnson 8d29ec4116 Prepare 0.95.0 release 2014-05-06 10:19:14 -07:00
Kevin Sawicki 806ff4e141 Resolve path to apm
Refs #1936
2014-05-06 09:56:03 -07:00
Corey Johnson 4b0ddbf2ab Upgrade to feedback@0.32.0 2014-05-06 09:55:45 -07:00
Thomas Buckley-Houston 1ea54f8c92 🐧 If atom.sh has non-zero exit show errors captured by nohup. Refers to #1814 2014-05-06 17:21:01 +01:00
Kevin Sawicki 31cb4c58c2 Upgrade to apm@0.46.0 2014-05-06 09:15:07 -07:00
Kevin Sawicki b9bffc32b0 Upgrade to release-notes@0.29.0 2014-05-06 09:15:07 -07:00
Corey Johnson b267a781da Upgrade to welcom@0.13.0 2014-05-06 09:11:24 -07:00
Corey Johnson 6f7209c68b Upgrade to feedback@0.31.0 2014-05-06 09:06:24 -07:00
Corey Johnson fb6782ef31 Update clone url in readme 2014-05-06 08:42:18 -07:00
Kevin Sawicki fae8aafc17 Merge pull request #1929 from pierredup/patch-1
Fix link to API in README
2014-05-06 08:31:18 -07:00
Pierre du Plessis ba38dddf4d Fix link to API in README 2014-05-06 17:29:37 +02:00
Kevin Sawicki 0a4600409a Merge pull request #1927 from aaronraimist/master
Updates Jasmine link
2014-05-06 08:26:38 -07:00
Aaron Raimist 706e4476d5 Updates Jasmine link
📝
Updates Jasmine link in CONTRIBUTING.md
2014-05-06 10:25:35 -05:00
Kevin Sawicki c113a0a217 Merge pull request #1926 from bfrohs/patch-1
Show code necessary to create emoji
2014-05-06 08:24:00 -07:00
Brandon Frohs ef05278537 Show code necessary to create emoji
Touch screens without `:hover` are unable to see the tooltip.
2014-05-06 11:22:01 -04:00
Kevin Sawicki 1254425ba8 Fix windows links 2014-05-06 08:11:32 -07:00
Corey Johnson e3641286e7 Merge pull request #1924 from atom/cj-readme-requirements
Update build requirements
2014-05-06 07:48:05 -07:00
Corey Johnson 3a03f470c7 Use .bat fence instead of .sh 2014-05-06 07:43:08 -07:00
Kevin Sawicki 4ea44d9612 Prepare 0.94.0 release 2014-05-06 07:03:21 -07:00
Kevin Sawicki 15c2540c29 Merge branch 'master' into cj-readme-requirements 2014-05-06 06:49:58 -07:00
Kevin Sawicki 112f90979c Upgrade to language-xml@0.12.0 2014-05-06 06:39:10 -07:00
Kevin Sawicki cbe73fd916 Read LICENSE.md as UTF8 2014-05-06 06:39:10 -07:00
Ivan Žužak 3ea28c8ed6 Upgrade to language-gfm@0.34.0 2014-05-06 15:33:58 +02:00
Cheng Zhao 5a219a9087 Upgrade to atom-shell@0.12.2 2014-05-06 10:22:39 +08:00
Kevin Sawicki 11eae4d5db Upgrade to language-gfm@0.33.0 2014-05-05 17:43:28 -07:00
Kevin Sawicki fe4016a49d 🐧 Mention separate build/install 2014-05-05 17:37:38 -07:00
Kevin Sawicki 0b786427f4 Set CFBundleTypeIconFile to file.icns
Closes #1726
2014-05-05 17:22:33 -07:00
Kevin Sawicki 4900dc6bcd Set LSHandlerRank to Alternate
This should prevent Atom from being the default editor for all these file
types and instead make it opt-in.

Closes #1808
2014-05-05 17:22:33 -07:00
Corey Johnson 31b06b2e47 Update script/build directions 2014-05-05 17:15:59 -07:00
Corey Johnson cf6d83a896 Update windows version requirement 2014-05-05 17:13:10 -07:00
Corey Johnson 637410a8c5 Upgrade to grunt-download-atom-shell@0.7.0 2014-05-05 17:10:35 -07:00
Corey Johnson 084e4ab830 Use previous windows readme directions 2014-05-05 16:18:32 -07:00
Corey Johnson 5a53b34697 Add more specific node details 2014-05-05 16:15:10 -07:00
Corey Johnson 8f3b76d3c9 Update Windows requirements 2014-05-05 16:13:38 -07:00
Kevin Sawicki f5df111b5c Add Linux platform note and keyring install command 2014-05-05 16:05:24 -07:00
Kevin Sawicki 1d31a10dc4 Include original LICENSE.md in generated file 2014-05-05 16:01:05 -07:00
Kevin Sawicki db61de6cf3 Add .md extension to generated license 2014-05-05 15:55:34 -07:00
Kevin Sawicki c75d36ef93 Implement application:open-license in AtomWindow
Allows the LICENSE.md file to be opened even when no windows are
open.

Closes #1624
2014-05-05 15:54:47 -07:00
Corey Johnson bb2527bbb8 Add stub linux and windows requirements 2014-05-05 15:49:29 -07:00
Corey Johnson eb31c6c85f Add OS X build requirements 2014-05-05 15:33:20 -07:00
Corey Johnson 546f81f2d0 Fix spacing 2014-05-05 15:33:03 -07:00
Kevin Sawicki 7bb6cd99eb Tweak README copy 2014-05-05 13:04:22 -07:00
Kevin Sawicki 3dbdaee25c Merge pull request #1898 from atom/open-source-release
Open Source Atom
2014-05-05 12:59:19 -07:00
Kevin Sawicki b458de0f2d Merge pull request #1921 from atom/ks-split-option-errors
Fix split option errors
2014-05-05 11:36:24 -07:00
Kevin Sawicki 240747ed76 💄 Tweak spec descriptions 2014-05-05 11:28:36 -07:00
Kevin Sawicki 8b5fd64dd4 Guard against PaneAxis as first child
Pane::findLeftmostSibling expected to return a Pane, not a PaneAxis
2014-05-05 11:28:36 -07:00
Kevin Sawicki 1c514bdc6b Split right when rightmost sibling is an axis
This was previously throwing an error when Workspace::open was called
with a split: right option and the rightmost sibling was a PaneAxis
since it was assuming findOrCreateRightmostSibling was always returning
a Pane, not a PaneAxis.
2014-05-05 11:28:36 -07:00
Kevin Sawicki f4d9abc789 Use ~ instead of ^ to support older npm versions 2014-05-05 11:07:43 -07:00
Kevin Sawicki e5197f6f0f Fench code block as sh 2014-05-05 11:06:36 -07:00
Kevin Sawicki 8f57246571 Upgrade to settings-view@0.114.0 2014-05-05 11:03:55 -07:00
Kevin Sawicki 7658107e3b Merge pull request #1920 from atom/new-brand-assets
New brand assets
2014-05-05 10:29:27 -07:00
Kevin Sawicki c33227830e Add file icon for all sizes 2014-05-05 10:22:28 -07:00
Kevin Sawicki 43f2153c86 Add icons for all sizes 2014-05-05 10:14:47 -07:00
Kevin Sawicki 084d84660a Update atom.icns with single 2x 512x512 2014-05-05 09:58:12 -07:00
Cameron McEfee 4120b34d22 larger icon graphic 2014-05-05 09:51:01 -07:00
Kevin Sawicki c4a0bce92f Upgrade to tabs@0.39.0 2014-05-05 09:49:44 -07:00
Kevin Sawicki 858c18114b Update file and app icons 2014-05-05 09:39:24 -07:00
Cameron McEfee 91f9302fc4 improve aliasing on the new icon 2014-05-05 09:33:02 -07:00
Kevin Sawicki 4f3bf04668 Update atom.icns with new icon 2014-05-05 09:19:17 -07:00
Kevin Sawicki 11c9417e8d Upgrade to scope-property-store@0.9.0 2014-05-05 08:51:59 -07:00
Kevin Sawicki db141d9d7f Upgrade to markdown-preview@0.69.0 2014-05-05 08:49:01 -07:00
Cameron McEfee 5624596c88 Update the icon png 2014-05-04 15:51:41 -07:00
Cameron McEfee cda7ca047c Logo in the docs 2014-05-04 15:48:25 -07:00
Cameron McEfee ac25ad3985 Logo in the readme 2014-05-04 15:42:45 -07:00
Kevin Sawicki 1bf4e7ab96 Upgrade to first-mate 1.5.3 2014-05-02 18:08:01 -07:00
Kevin Sawicki 49587ace05 Upgrade to tree-view@0.92.0 2014-05-02 11:12:10 -07:00
Ivan Žužak 54fb06d4b0 Upgrade to release-notes@0.28.0 2014-05-02 20:02:24 +02:00
Ivan Žužak 8f81b5dc63 Upgrade to find-and-replace@0.100.0 2014-05-02 20:00:47 +02:00
Kevin Sawicki d5e1649607 Upgrade to settings-view@0.113.0 2014-05-02 10:50:46 -07:00
Kevin Sawicki e2c1f6c0e2 Upgrade to markdown-preview@0.68.0 2014-05-02 10:16:01 -07:00
Kevin Sawicki 8ec7d1273c Cache handlerPath 2014-05-01 17:05:47 -07:00
Kevin Sawicki 7ffc5cc02b Terminate task before recreating 2014-05-01 17:05:28 -07:00
Kevin Sawicki aac27db552 Upgrade to grammar-selector@0.26.0 2014-05-01 16:04:45 -07:00
Kevin Sawicki 03acb1c40a Upgrade to markdown-preview@0.67.0 2014-05-01 15:38:38 -07:00
Kevin Sawicki 5eb332042e Merge pull request #1915 from atom/ks-safe-mode
Safe mode
2014-05-01 15:30:44 -07:00
Kevin Sawicki 66943c4820 Add application:open-safe command
This opens a new "safe mode" window similar to the application:open-dev
command
2014-05-01 15:20:22 -07:00
Kevin Sawicki 4ed9e34893 Tweak option description 2014-05-01 15:20:22 -07:00
Kevin Sawicki 4f4da78e54 Add --safe argument
This will launch Atom in "safe" mode where packages from ~/.atom
will not be loaded automatically or be resolveable by name.
2014-05-01 15:20:22 -07:00
Kevin Sawicki 832dfd057e Upgrade to tabs@0.38.0 2014-05-01 15:14:39 -07:00
Kevin Sawicki dd74280146 Set status to 0 if it is ignored
The statuses obtained via the background task do not include ignored
entries so don't put ignored entries into the cache when checking the
status individually.

This was causing the fuzzy finder to show ignored paths in the status
list view after an ignored file was saved.
2014-05-01 14:20:46 -07:00
Kevin Sawicki a7d1a68fb8 Upgrade to git-utils 1.3 2014-05-01 14:13:19 -07:00
Kevin Sawicki 6b8b454625 Upgrade to symbols-view@0.50.0 2014-05-01 13:12:05 -07:00
Kevin Sawicki 5c5b7df70d Upgrade to tree-view@0.91.0 2014-04-30 16:54:32 -07:00
Corey Johnson 7d3abda86f Fix Workspace::openLicense 2014-04-30 16:38:44 -07:00
Kevin Sawicki 7f824ffbb3 Merge pull request #1914 from atom/ks-open-to-column
Open to initial column
2014-04-30 16:21:49 -07:00
Corey Johnson 0b7475a4c1 Merge remote-tracking branch 'origin/master' into open-source-release
Conflicts:
	package.json
2014-04-30 16:11:44 -07:00
Kevin Sawicki cf62d3212c Use path.join instead of hard-coded separator 2014-04-30 16:07:26 -07:00
Kevin Sawicki b260cbb43a Call open on model instead of view 2014-04-30 16:07:26 -07:00
Kevin Sawicki 1367f08de8 Parse initial column from path to open argument 2014-04-30 16:07:26 -07:00
Kevin Sawicki 27b02a7981 Add initialColumn options to Workspace::open
This options works similarly to the existing initialLine option
2014-04-30 16:07:26 -07:00
Corey Johnson e62ae02c00 Update file.icns 2014-04-30 16:04:58 -07:00
Corey Johnson 233402dd33 Update atom icon 2014-04-30 15:52:13 -07:00
Corey Johnson 69821b7a6b Add .gitignore file to dot-atom.
This will help users who want to push their .atom directory to GitHub

Closes #1094
2014-04-30 14:41:23 -07:00
Kevin Sawicki efcffe5205 Remove unused grunt task 2014-04-30 14:31:43 -07:00
Kevin Sawicki 802e651b6e 📝 Link to apm repo 2014-04-30 14:18:11 -07:00
Kevin Sawicki 0e8b951050 Upper case pane to match File menu item 2014-04-30 14:10:41 -07:00
Corey Johnson 8ef97bd78e Add menu items for pane management on windows 2014-04-30 13:59:49 -07:00
Corey Johnson 6749988de1 Add menu items for pane management
Closes #1897
2014-04-30 13:57:37 -07:00
Kevin Sawicki 4a26f8f28b Merge pull request #1912 from atom/ks-whitespace-double-click
Whitespace double click
2014-04-30 10:10:26 -07:00
Kevin Sawicki a4ee412e96 Remove Math.max corrections to range
Editor::getTextInBufferRange will clip the specified range instead.
2014-04-30 09:58:37 -07:00
Kevin Sawicki 4f655d7de5 📝 Update comment to match behavior 2014-04-30 09:58:37 -07:00
Kevin Sawicki 33c02ef3e1 Mention double clicking in spec description 2014-04-30 09:58:37 -07:00
Kevin Sawicki aa4749f175 Select all adjacent whitespace on double click
Cursor::isSurroundedByWhitespace was use column 0 instead of the
position right before the cursor.
2014-04-30 09:58:37 -07:00
Kevin Sawicki 6ace49b0e8 Merge pull request #1911 from atom/ks-preserve-indentation-when-commenting
Preserve indentation when commenting
2014-04-30 09:58:17 -07:00
Kevin Sawicki 9cf642e910 Preserve indentation when commenting
Previously this happened only when the language did not have a
comment end pattern.
2014-04-30 09:50:11 -07:00
Kevin Sawicki 2990f36595 Remove unused publish release step 2014-04-30 09:43:01 -07:00
Kevin Sawicki 032fc86a4d Merge pull request #1913 from atom/ks-no-more-atom-master-builds
Stop uploading to atom-master-builds
2014-04-30 09:35:41 -07:00
Kevin Sawicki 868cbb680c Stop uploading to atom-master-builds
Packages using Travis now build against a release build
2014-04-30 09:29:05 -07:00
Kevin Sawicki 98d2aaf10e Upgrade to language-java@0.10.0 2014-04-30 09:17:00 -07:00
Kevin Sawicki f7dead17c0 Upgrade to markdown-preview@0.66.0 2014-04-30 09:09:15 -07:00
Cheng Zhao f3168b2672 Use "closed" event instead of "destroyed".
The meaning of "destroyed" event has changed since atom-shell v0.12.0,
fixes #1910.
2014-04-30 12:25:59 +08:00
Corey Johnson e8c62b501f Fix workspaceView spec 2014-04-29 16:59:15 -07:00
Nathan Sobo 6ff2b2a01e Fix undefined variables in tokenized-line-spec 2014-04-29 17:24:16 -06:00
Kevin Sawicki 960285a270 Unfocus EditorComponent spec 2014-04-29 16:11:20 -07:00
Kevin Sawicki 17cd979299 Upgrade to apm@0.45.0 2014-04-29 15:32:00 -07:00
Kevin Sawicki b5846f9755 Upgrade to atom-keymap@0.19.0
Closes #1908
2014-04-29 09:01:54 -07:00
Kevin Sawicki dd39ffdf3b Upgrade to settings-view@0.112.0 2014-04-29 08:25:04 -07:00
Cheng Zhao 368b871270 Merge pull request #1907 from atom/atom-shell-v0.12.0
Upgrade to atom-shell@0.12.0
2014-04-29 15:49:45 +08:00
Cheng Zhao 9c06b4d344 Some events of browser-window have changed. 2014-04-29 15:25:36 +08:00
Cheng Zhao f48241bc5e Use new IPC API of atom-shell. 2014-04-29 15:16:27 +08:00
Cheng Zhao a7b94e1709 Upgrade to atom-shell@0.12.0 2014-04-29 15:09:47 +08:00
probablycorey 3d2dedb49f Update the readme 2014-04-28 14:42:31 -07:00
probablycorey dd5ab8098e Use consistent version pattern
Use `^Z` `^Z.Z` or `^Z.Z.Z`
2014-04-28 14:27:11 -07:00
Kevin Sawicki f5b833c49c Upgrade to apm 0.43.0 2014-04-28 14:06:32 -07:00
Kevin Sawicki ba032be402 Upgrade to apm@0.42.0 2014-04-28 13:20:14 -07:00
Kevin Sawicki a96a448063 Upgrade to language-go@0.10.0 2014-04-28 10:52:12 -07:00
Kevin Sawicki faeed9f604 Upgrade to snippets@0.43.0 2014-04-25 14:57:07 -07:00
probablycorey 0a8f2422d3 Use public grunt-download-atom-shell 2014-04-24 17:37:24 -07:00
Kevin Sawicki 24dbe19a82 Upgrade to language-c@0.15.0 2014-04-24 16:45:44 -07:00
Kevin Sawicki 7d8901072c Upgrade to snippets@0.42.0 2014-04-24 16:23:23 -07:00
Kevin Sawicki 848a4e2052 Merge pull request #1904 from atom/ks-remove-apm-submodule
Remove apm submodule
2014-04-24 16:21:49 -07:00
Kevin Sawicki e8090b16f3 Move apm version to apm/package.json 2014-04-24 15:43:35 -07:00
Kevin Sawicki 950964eee3 Remove directory that no longer exists 2014-04-24 15:43:35 -07:00
Kevin Sawicki b403f76d81 Remove .gitmodules 2014-04-24 15:43:35 -07:00
Kevin Sawicki 8f2cdae0eb Install apm from npmjs.org 2014-04-24 15:43:35 -07:00
Corey Johnson fa4b3c8dea Merge pull request #1903 from atom/cj-add-deprecation-warning-to-specs
Remove all deprecated calls from core
2014-04-24 15:36:53 -07:00
Kevin Sawicki e76bbc0f13 Guard against deleted submodule 2014-04-24 15:12:08 -07:00
Corey Johnson c9a377d4ac Deprecate reopenItemSync 2014-04-24 14:28:09 -07:00
Corey Johnson c7e308bca0 Remove use of OpenSync from specs 2014-04-24 14:14:10 -07:00
Corey Johnson 5193e6e46b Upgrade to text-buffer@2.2.0 2014-04-24 14:13:57 -07:00
Kevin Sawicki 66628e8c52 Update broken link to publish doc 2014-04-24 13:56:14 -07:00
Corey Johnson bec65cf2ac Only fail on deprecations when core specs are run 2014-04-24 13:47:01 -07:00
Corey Johnson 606b249430 Upgrade to grim@0.10.0 2014-04-24 13:34:56 -07:00
Kevin Sawicki 8bc1b7e955 Prepare 0.93.0 release 2014-04-24 12:07:35 -07:00
Corey Johnson 2ceccf5239 Exclude EditorViews that are mini editors from WorkspaceView::eachEditorView
Fixes #1900
2014-04-24 09:26:04 -07:00
Nathan Sobo ad8bd98c9a Don't overwrite the file-scoped path variable 2014-04-24 10:13:01 -06:00
Nathan Sobo 6c4e138ec0 Upgrade to language-ruby@0.23.0 2014-04-24 09:52:45 -06:00
Kevin Sawicki 9ad1021c2d Upgrade to settings-view@0.111.0 2014-04-23 18:14:18 -07:00
Corey Johnson c03dec2783 Merge remote-tracking branch 'origin/master' into cj-add-deprecation-warning-to-specs 2014-04-23 16:51:14 -07:00
Corey Johnson 9d92a27ccf Remove deprecated method calls from project spec 2014-04-23 16:50:25 -07:00
Corey Johnson b652dc8fd8 Use workspace.open instead of project.open 2014-04-23 16:36:44 -07:00
Corey Johnson c1929540a3 Remove deprecated calls in pane view spec 2014-04-23 16:35:51 -07:00
Corey Johnson 1601423f30 Update deprecated calls in language mode spec 2014-04-23 16:31:00 -07:00
Corey Johnson 1de2c14e50 Use TextBuffer::getEndPosition 2014-04-23 16:30:38 -07:00
Corey Johnson c1907054b7 Remove deprecated methods from display buffer spec 2014-04-23 16:24:10 -07:00
Corey Johnson 5f524c1181 Remove deprecated calls from git spec 2014-04-23 16:22:44 -07:00
Corey Johnson b897603b66 Remove deprecated option from selection spec 2014-04-23 16:22:34 -07:00
Corey Johnson 0e5c530006 Remove rogue focused spec 2014-04-23 16:19:43 -07:00
Corey Johnson 4a60b5787a Remove deprecated calls from editor view spec 2014-04-23 16:18:48 -07:00
Corey Johnson 88cc69f87a Update enableKeymap spec helper 2014-04-23 16:18:36 -07:00
Corey Johnson 42e91defb9 Rename getEofPosition to getEndPosition 2014-04-23 16:06:32 -07:00
Nathan Sobo aeb5a84696 Do render indent guides for tokens with leading whitespace 2014-04-23 17:04:20 -06:00
Nathan Sobo 228836447c Only render trailing whitespace indent guides on whitespace-only lines
Fixes #1895
2014-04-23 16:58:10 -06:00
Kevin Sawicki 832cc40a7f Add .md extension 2014-04-23 15:36:57 -07:00
Corey Johnson d89b4534f1 Update the year 2014-04-23 15:35:33 -07:00
Corey Johnson 725f6f7cf2 Use MIT license 2014-04-23 15:34:29 -07:00
Kevin Sawicki b760d3e4fc Upgrade to markdown-preview@0.65.0 2014-04-23 13:21:51 -07:00
Nathan Sobo 1d634e471e Revert "Don't obscure the last line of the editor with the horizontal scrollbar"
This reverts commit babbdbf9e5.
2014-04-23 14:03:33 -06:00
Nathan Sobo babbdbf9e5 Don't obscure the last line of the editor with the horizontal scrollbar
This assumes the scrollbar is 15px high, which is incorrect when using
overlay scrollbars or when the scrollbar is styled to have a different
height. We'll need to measure it in a subsequent commit.
2014-04-23 13:59:35 -06:00
Nathan Sobo e9d820e8a8 💄 GutterComponent 2014-04-23 13:59:35 -06:00
Nathan Sobo 16e05347a7 Remove unneeded componentWillUnmount method
It's defined in the SubscriberMixin
2014-04-23 13:59:35 -06:00
Kevin Sawicki 2574ee5936 Prepare 0.92.0 release 2014-04-23 12:02:36 -07:00
Nathan Sobo 283966dbb9 Only autoscroll selections in the model when managing scroll position 2014-04-23 12:42:02 -06:00
Corey Johnson 38c25feee0 Remove deprecated calls to editor spec 2014-04-23 11:27:23 -07:00
Kevin Sawicki f8727ffa6f Store compile cache in ~/.atom/compile-cache 2014-04-23 10:59:23 -07:00
Kevin Sawicki 1f31918373 Upgrade to pathwatcher 1.2.1 for empty file fix 2014-04-23 09:35:08 -07:00
Nathan Sobo 104aa5efc7 Merge pull request #1883 from atom/ns-react-editor-view
React Editor View, Take 2
2014-04-23 10:06:00 -06:00
Nathan Sobo 7fe0f5b445 Make parameter names explicit in delegators 2014-04-23 09:56:49 -06:00
Corey Johnson a15bb260c0 Update call to TextBuffer::rangeForRow 2014-04-22 17:52:07 -07:00
Corey Johnson 6b833043db Removed references to the isReversed option 2014-04-22 17:51:44 -07:00
Kevin Sawicki c1260d68bb Restore window when opening path
Previously the window would stay minimized if it was triggered
from the command line and was already open.

Closes #1889
2014-04-22 16:58:53 -07:00
Corey Johnson b30a2c9442 Remove deprecated calls from workspace view spec 2014-04-22 16:51:50 -07:00
Corey Johnson 3eb99c9391 Remove deprecated call from spec helper 2014-04-22 16:51:38 -07:00
Kevin Sawicki 08748b5bad Upgrade to tabs@0.37.0 2014-04-22 16:48:55 -07:00
Corey Johnson 10636b96bc buildBufferSync can't be deprecated because TokenizedBuffer uses it 2014-04-22 16:48:01 -07:00
Corey Johnson b5ac7c89a3 Update spec to match its description 2014-04-22 16:47:17 -07:00
Corey Johnson 01298bb470 Fix deprecation message 2014-04-22 16:22:23 -07:00
Nathan Sobo 752aa9a8e9 Handle editor:page-up/down commands 2014-04-22 17:10:23 -06:00
Nathan Sobo e4639281f8 Handle 'editor:scroll-to-cursor' command
Add Editor::scrollToCursorPosition in the model layer
2014-04-22 17:10:23 -06:00
Nathan Sobo f53d489abb Add DisplayBuffer::scrollToScreen/BufferPosition
Also add delegators in Editor and ReactEditorView
2014-04-22 17:10:23 -06:00
Nathan Sobo 628c2f82bd Add scrollTop/scrollLeft shims to ReactEditorView 2014-04-22 17:10:23 -06:00
Nathan Sobo df8a6437a5 Set appended view to 'position: absolute' in ::appendToLinesView 2014-04-22 17:10:22 -06:00
Nathan Sobo 1f768a21f0 Update absolute position of lines and line numbers when text changes
When lines are inserted or removed, we need to manually shift the
on-screen lines since everything is absolutely positioned now.
2014-04-22 17:10:22 -06:00
Nathan Sobo b13385b281 Subscribe to focus events with DOM api to prevent bubbling behavior
Using React's onFocus property, focus events seemed to bubble when
editors inside the editor were focused, as is the case with the
autocomplete menu.
2014-04-22 17:10:22 -06:00
Nathan Sobo 68d74e7de0 Put the hidden input component on its own layer
This avoids combining its repaint with the scrollbar's cursor position
when the cursor moves.
2014-04-22 17:10:22 -06:00
Nathan Sobo c730e3c67e Ensure selections span the entire screen, even when lines are short
Also, pass scrollHeight and scrollWidth as props to child components
instead of calling the method to compute them in multiple components.
2014-04-22 17:10:22 -06:00
Nathan Sobo 22496ceeb1 WIP: Minimize paint when scrolling and composite lines with the GPU 2014-04-22 17:10:22 -06:00
Nathan Sobo a03f2f46ee Don't assume tokens match text nodes when measuring character widths 2014-04-22 17:10:22 -06:00
Nathan Sobo afec8f1ca0 Account for height of hidden input when positioning it 2014-04-22 17:10:22 -06:00
Nathan Sobo 43e6fb73f1 Focus react editor on attachment if it had focus previously 2014-04-22 17:10:22 -06:00
Nathan Sobo a271e52a4e Never assign a 0 height or width when measuring editor scroll view 2014-04-22 17:10:22 -06:00
Nathan Sobo 274ca33959 Don't measure height and width unless component is mounted
Since we measure in requestAnimationFrame, it's possible to request
measurement prior to be unmounted and have it occur afterward.
2014-04-22 17:10:22 -06:00
Nathan Sobo 10d6ec156f Unsubscribe EditorComponent before unmounting 2014-04-22 17:10:22 -06:00
Nathan Sobo 4e27e765d0 Measure width and height when window size changes
Since overflowchanged events are paused for a bit after updates to
prevent thrashing, this ensures the editor is still updated promptly
when resizing.
2014-04-22 17:10:22 -06:00
Nathan Sobo 168cda4f75 Pause measurement on overflowchanged during updates
Content updates trigger overflowchanged, but we're mainly using it to
detect when the editor component has been resized. Pausing measurement
during content updates makes them faster.
2014-04-22 17:10:21 -06:00
Nathan Sobo fdccc0bcc2 Measure DOM dimensions before rendering elements that depend on them
This commit breaks the initial render of the editor component into two
stages.

The first stage just renders the shell of the editor so the height,
width, line height, and default character width can be measured. Nothing
that depends on these values is rendered on the first render pass.

Once the editor component is mounted, all these values are measured and
we force another update, which fills in the lines, line numbers,
selections, etc.

We also refrain from assigning an explicit height and width on the
model if these values aren't explicitly styled in the DOM, and just
assume the editor will stretch to accommodate its contents.
2014-04-22 17:10:21 -06:00
Nathan Sobo d566726b9f Use negative z-indices so attached views are visible in react editor 2014-04-22 17:10:21 -06:00
Nathan Sobo e9f2a536ed Add more shims to ReactEditorView 2014-04-22 17:10:21 -06:00
Nathan Sobo 2532527a6a Add editor-colors class to EditorComponent 2014-04-22 17:10:21 -06:00
Nathan Sobo f10076c87d Prevent activation events from bubbling
The react editor is wrapped in another div with the class of .editor for
backward compatibility. This prevents activation events registered on
the .editor selector from being triggered twice.
2014-04-22 17:10:21 -06:00
Nathan Sobo 083f65ed5d Remove envify dependency 2014-04-22 17:10:21 -06:00
Nathan Sobo f59a8f1e68 Return function arg's result from Editor::batchUpdates 2014-04-22 17:09:45 -06:00
Nathan Sobo bef554709f Emit 'cursor:moved' event to update cursor position in status bar
Emitting the event *before* update, rather than after. This is because
we read from the DOM after update to measure new characters, which
forces layout, so emitting the event after measuring forces another
layout when the position is updated.
2014-04-22 17:09:45 -06:00
Nathan Sobo e5379515b9 Transfer focus to ReactComponent when wrapper view is focused 2014-04-22 17:09:45 -06:00
Nathan Sobo a0ff6f5325 Handle 'autoscroll' option in model when setting selected buffer range 2014-04-22 17:09:45 -06:00
Nathan Sobo dd4b6a6d28 Don't render empty selections 2014-04-22 17:09:45 -06:00
Nathan Sobo 51ee591282 Don't render cursors for non-empty selections 2014-04-22 17:09:45 -06:00
Nathan Sobo 19a5269a5f Remove metaprogrammed method delegators 2014-04-22 17:09:45 -06:00
Nathan Sobo 9b6fa967be Handle the editor:consolidate-selections command in the React editor 2014-04-22 17:09:45 -06:00
Nathan Sobo 201e00aa83 Don't measure new lines when scrolling with the mousewheel
It impacts scrolling performance. We can measure when scrolling comes
to a halt.
2014-04-22 17:09:44 -06:00
Nathan Sobo f02d956362 Preserve the only the target screen row when scrolling via mousewheel
When the target of a mousewheel event is removed, it breaks velocity
scrolling.

Previously, we were preserving the entire screen range when scrolling
with the mouse wheel, which caused a lot of DOM nodes to accumulate. Now
we only preserve the individual line and line number associated with the
target of the mousewheel event, moving them just off screen below all
the on-screen lines and line numbers. This keeps the number of DOM nodes
limited while retaining velocity effects.
2014-04-22 17:09:44 -06:00
Nathan Sobo 798739f837 Use beforeRemove instead of non-existent beforeDetach 2014-04-22 17:09:44 -06:00
Nathan Sobo 216d561c79 Delay creating range and node iterator until we actually need to measure 2014-04-22 17:09:44 -06:00
Nathan Sobo 6607f99c6c Use padding-top/bottom rather than spacer divs in lines and gutter
It creates a simpler DOM structure.
2014-04-22 17:09:44 -06:00
Nathan Sobo 3a42346e5e Pause cursor blink as part of the overall editor update
This ensures we don't perform two updates of the cursors component when
cursors move as part of a larger change, such as typing text.
2014-04-22 17:09:44 -06:00
Nathan Sobo ae9f79bfc4 Only add indent guide to trailing whitespace on whitespace-only lines 2014-04-22 17:09:44 -06:00
Nathan Sobo 5a9a3c62e1 Implement shouldComponentUpdate for LinesComponent
We accumulate pending changes and pass them to the lines and the gutter
to help them determine whether to update. The lines only update if the
visible row range changed or if there was a change in the visible row
range.
2014-04-22 17:09:44 -06:00
Nathan Sobo d678f367db Clear cursor blink interval when editor component unmounts 2014-04-22 17:09:44 -06:00
Nathan Sobo febfb120c8 Fix typo 2014-04-22 17:09:44 -06:00
Nathan Sobo addbe80e8a Update the gutter if the scrollTop has changed 2014-04-22 17:09:44 -06:00
Nathan Sobo b96abfffb7 Add more displayNames 2014-04-22 17:09:44 -06:00
Nathan Sobo a6f2e926fe Upgrade to underscore-plus@1.2.1 for optimized isEqualForProperties 2014-04-22 17:09:44 -06:00
Nathan Sobo 550a4ce906 Use isEqualForProperties in LinesComponent to decide when to re-measure 2014-04-22 17:09:43 -06:00
Nathan Sobo 1a56b487a1 Stop propagation of input events to prevent react from doing extra work
React seems to be handling these events when they bubble to the root of
the document. We want to avoid wasting time on this.
2014-04-22 17:09:43 -06:00
Nathan Sobo 4fa9c64c2b Drop batchedUpdates on input since we're batching in the model anyway 2014-04-22 17:09:43 -06:00
Nathan Sobo 56e5fb7a63 Set process.env.NODE_ENV to 'production' to speed up React 2014-04-22 17:09:43 -06:00
Nathan Sobo efa72bcb1c Implement shouldComponentUpdate for GutterComponent
Only update the gutter when the visible row range has changed or if
a screen lines change has occurred within the visible row range.
2014-04-22 17:09:43 -06:00
Nathan Sobo 033db8997b Batch updates when moving cursors
This ensures that updates associated with autoscroll and cursor movement
get combined.
2014-04-22 17:09:43 -06:00
Nathan Sobo 64a487eebb Implement shouldComponentUpdate for ScrollbarComponent
It checks that the incoming scrollTop/Left and scrollHeight/Width differ
from their current values. The scrollTop/Left value are updated in
the component properties to always reflect the state of the DOM when
scrolling or when assigning a new value.
2014-04-22 17:09:43 -06:00
Nathan Sobo ddc677fb30 Batch multiple view updates with Editor::batchUpdates 2014-04-22 17:09:43 -06:00
Nathan Sobo fe6a007774 Call requestUpdate instead of forceUpdate so we can track all updates 2014-04-22 17:09:43 -06:00
Nathan Sobo 48d90e3dfc Funnel cursor and selection updates through EditorComponent 2014-04-22 17:09:43 -06:00
Nathan Sobo f457b41a81 Assign a key to cursor and selection components 2014-04-22 17:09:43 -06:00
Nathan Sobo 93388c2048 Make Cursor and Selection models for automatic id assignment 2014-04-22 17:09:43 -06:00
Nathan Sobo 66f3f2d883 Add displayName to components 2014-04-22 17:09:42 -06:00
Nathan Sobo 3657dc0bf4 💄 2014-04-22 17:09:42 -06:00
Nathan Sobo 274288161d Make line number components immutable 2014-04-22 17:09:42 -06:00
Nathan Sobo 0d03e388f1 💄 spec description 2014-04-22 17:09:42 -06:00
Nathan Sobo 507106d35b 💄 method order 2014-04-22 17:09:42 -06:00
Nathan Sobo eeba559ec7 Add a SelectionsComponent containing all selections 2014-04-22 17:09:42 -06:00
Nathan Sobo 14bfa90004 Extract a CursorsComponent containing all cursors 2014-04-22 17:09:42 -06:00
Nathan Sobo 0ec6cbe141 💄 method order 2014-04-22 17:09:42 -06:00
Nathan Sobo e952ab2e02 Extract a LinesComponent 2014-04-22 17:09:42 -06:00
Nathan Sobo 5c2eb053d8 Extract an EditorScrollView component 2014-04-22 17:09:42 -06:00
Nathan Sobo aee552476a Call onScroll with the current scrollTop/Left in ScrollbarComponent 2014-04-22 17:09:42 -06:00
Nathan Sobo 355abef2cf Manage update of scrollbar scroll positions in ScrollbarComponent 2014-04-22 17:09:42 -06:00
Nathan Sobo cec62c56a6 Extract a ScrollbarComponent 2014-04-22 17:09:41 -06:00
Nathan Sobo 35ea4e6de4 Extract gutter to its own component 2014-04-22 17:09:41 -06:00
Nathan Sobo 8c266957f1 Isolate CSS changes to a single selector 2014-04-22 17:09:41 -06:00
Nathan Sobo f1f93f2f70 Spy on setInterval explicitly when needed in EditorComponent spec 2014-04-22 17:09:41 -06:00
Nathan Sobo de773e4f75 Revert "Remove setInterval spy. It's now spied in the spec helper w/ setTimeout"
This reverts commit 930f1d7f018bb9949b0ee0e4ca7330a8a4ce0ec7.

I actually don't want to globally spy on setInterval because it interferes with
expected behaviors and eventually I'd like both of these to be opt-in.
2014-04-22 17:09:41 -06:00
Nathan Sobo 205e10fd09 Fix undefined variable references rendering lines 2014-04-22 17:09:41 -06:00
Nathan Sobo ca4dd5a29a Explicitly disable use of react editor in specs 2014-04-22 17:09:41 -06:00
Nathan Sobo 2517765821 Rename 'core.useNewEditor' to 'core.useReactEditor' and default to false 2014-04-22 17:09:41 -06:00
Nathan Sobo 4b9871fa13 Enable advanced scroll management only when editor is used by react view
This preserves the original behavior of the editor model with respect
to scroll position and autoscroll unless it's being used by the react
component, which flips the ::manageScrollPosition flag to true.
2014-04-22 17:09:41 -06:00
Nathan Sobo 28dd7d4acd Treat all whitespace lines as not having leading whitespace
Instead it's treated as all trailing whitespace, as it was originally.
2014-04-22 17:09:41 -06:00
Nathan Sobo e3eb51c135 Don't expect trailing whitespace invisibles on soft-wrapped lines
Now that trailing whitespace status of tokens is assigned at
construction time, we no longer render invisibles at the end of
soft-wrapped lines. Pretty sure this is not a behavior we wanted anyway.
2014-04-22 17:09:41 -06:00
Nathan Sobo 9ec38ddb0d Remove setInterval spy. It's now spied in the spec helper w/ setTimeout 2014-04-22 17:09:41 -06:00
Nathan Sobo 7a4dc0b9a4 Eliminate duplicate key to pass coffeelint 2014-04-22 17:09:40 -06:00
Nathan Sobo 6b4ce5f205 Add shims to get git-diff-view working 2014-04-22 17:09:40 -06:00
Nathan Sobo 9a3f8022ad Add shims to get bracket matcher working 2014-04-22 17:09:40 -06:00
Nathan Sobo a2a625a7bb Add ReactEditorView::getPane for backward-compatibility 2014-04-22 17:09:40 -06:00
Nathan Sobo 495b1571ca Add 'editor' class to ReactEditorView wrapper for backward compatibility 2014-04-22 17:09:40 -06:00
Nathan Sobo c862ccbc56 Add command listeners to SpacePen wrapper for backward compatibility
This is the only way to integrate with the command palette currently.
2014-04-22 17:09:40 -06:00
Nathan Sobo 59709a92ba Include SpacePen wrapper view in spec
During the transition to React, it will be easier if the EditorComponent
assumes it's rendered inside the ReactEditorView. This will make it
easier to test compatibility with existing editor APIs.
2014-04-22 17:09:40 -06:00
Nathan Sobo 022f5ca219 Replace previous character when inserting accented characters 2014-04-22 17:09:40 -06:00
Nathan Sobo 96ebb9bf03 Correctly position cursor on mousedown when editor is scrolled left 2014-04-22 17:09:40 -06:00
Nathan Sobo 95b24fb933 Position the hidden input on the most recent cursor when in view
We won't position the hidden input out of the scroll view's bounds to
prevent Chromium's autoscrolling behavior.
2014-04-22 17:09:40 -06:00
Nathan Sobo 9bdc78df2e Correctly render lines containing only whitespace 2014-04-22 17:09:40 -06:00
David Graham & Nathan Sobo 241731f9c8 Render indent guides on empty lines 2014-04-22 17:09:39 -06:00
David Graham & Nathan Sobo 6997adece9 Associate TokenizedLines with an ::indentLevel
This can be used to render the appropriate number of indent guide spans
for empty lines.
2014-04-22 17:09:39 -06:00
David Graham & Nathan Sobo d0a917ed14 Prevent scrollLeft/scrollTop from going out of bounds 2014-04-22 17:09:39 -06:00
David Graham & Nathan Sobo 7fc2e0b540 Wire up the editor.showIndentGuide setting 2014-04-22 17:09:39 -06:00
David Graham & Nathan Sobo 1c48f60e42 Render indent guide for react editors on non-empty lines 2014-04-22 17:09:39 -06:00
David Graham & Nathan Sobo 6b10fcc2f8 Rely on token's knowledge of its own leading/trailing whitespace status
Previously, we were determining this at render time. But its baked into
the state of tokens when TokenizedLines are constructed now so we no
longer need to compute it when rendering.
2014-04-22 17:09:39 -06:00
David Graham & Nathan Sobo cf27826156 Mark tokens on whitespace-only lines as having leading whitespace
This makes it easy to decide to render the indent guide for a token. If
the token has leading whitespace, we can render it.
2014-04-22 17:09:39 -06:00
David Graham & Nathan Sobo 5e38add177 Only mark trailing whitespace on the last segment of a soft-wrapped line 2014-04-22 17:09:39 -06:00
David Graham & Nathan Sobo b4af0a79d0 Mark tokens with leading/trailing whitespace when building TokenizedLine 2014-04-22 17:09:39 -06:00
David Graham & Nathan Sobo 616b9e4b7d 💄 Rename breakOutLeadingWhitespace to breakOutLeadingSoftTabs 2014-04-22 17:09:39 -06:00
David Graham & Nathan Sobo 985662b8f0 Only scroll in one direction a time with the mousewheel 2014-04-22 17:09:39 -06:00
David Graham & Nathan Sobo cfdea7e73f Update the scrollLeft of the model when the horizontal scrollbar changes 2014-04-22 17:09:39 -06:00
David Graham & Nathan Sobo 48135a1e8d Update the horizontal scrollbar when scrollLeft changes in the model 2014-04-22 17:09:38 -06:00
Nathan Sobo 81233a696b Set default horizontalScrollMargin 2014-04-22 17:09:38 -06:00
Nathan Sobo 84bb624b5b Set x-transform of .scroll-view-content based on the model's scrollLeft 2014-04-22 17:09:38 -06:00
Nathan Sobo 171631d20f Autoscroll cursors horizontally at the model layer
Still need to respect the horizontal scroll position in the editor view
2014-04-22 17:09:38 -06:00
Nathan Sobo 486a7937b5 Render • instead of line number for soft-wrapped lines 2014-04-22 17:09:38 -06:00
Nathan Sobo 1162af61ed Render a basic gutter 2014-04-22 17:09:38 -06:00
Nathan Sobo a931aaff53 Remove temporary cursor visibility styling 2014-04-22 17:09:38 -06:00
Nathan Sobo 0fd8c5441c 💄 spec organization 2014-04-22 17:09:38 -06:00
Nathan Sobo f5551929d8 Account for half-visible lines in DisplayBuffer::getVisibleRowRange
We need to add 1 to the editor's height in lines, because it's possible
to have *partially visible* lines at the top and the bottom.
2014-04-22 17:09:38 -06:00
Nathan Sobo 4a501a7c31 Fix incorrect triple-click spec 2014-04-22 17:09:38 -06:00
Nathan Sobo 44413912bc Assign fontSize based on editor.fontSize config key 2014-04-22 17:09:38 -06:00
Nathan Sobo d0c61eb2be Pause cursor blinking when the cursor moves 2014-04-22 17:09:38 -06:00
Nathan Sobo 5c9a5cdc85 Emit 'cursors-moved' from editor when one or more cursors move 2014-04-22 17:09:37 -06:00
Nathan Sobo 2b0ef68255 Blink cursors always. Still need to pause blinking when moving. 2014-04-22 17:09:37 -06:00
Nathan Sobo f60f9b9f4f Add 'is-focused' class to editor when hidden input is focused 2014-04-22 17:09:37 -06:00
Nathan Sobo 4f10500102 Select lines on triple-click 2014-04-22 17:09:37 -06:00
Nathan Sobo 096afcf6f3 Finalize selections on mouseup 2014-04-22 17:09:37 -06:00
Nathan Sobo 2204571ef5 Select words on double-click 2014-04-22 17:09:37 -06:00
Nathan Sobo cbad8a56ec Don't start the animation loop until the mouse starts dragging
Previously, the animation loop would run multiple times prior to the
the mouseup event on click. We only want to select to the current mouse
position if the mouse is actually dragged.
2014-04-22 17:09:37 -06:00
Nathan Sobo c4be3069f7 Select on mouse drag 2014-04-22 17:09:37 -06:00
Nathan Sobo accee294dc Test against real mousedown events dispatched on the .lines DOM node 2014-04-22 17:09:37 -06:00
Nathan Sobo 1239ab540f 💄 spec descriptions 2014-04-22 17:09:37 -06:00
Nathan Sobo 5a0d7e716b When cmd-clicking, add a new cursor at the nearest screen position 2014-04-22 17:09:37 -06:00
Nathan Sobo af9355e4e6 Add Editor::getSelectedScreenRanges 2014-04-22 17:09:37 -06:00
Nathan Sobo 7738e74df0 When shift-clicking, select to the clicked position 2014-04-22 17:09:36 -06:00
Nathan Sobo 3a433f734c Move the cursor on single click 2014-04-22 17:09:36 -06:00
Nathan Sobo b0ad5e2f69 💄 2014-04-22 17:09:36 -06:00
Nathan Sobo 0c960552f0 Batch updates on input events 2014-04-22 17:09:36 -06:00
Nathan Sobo 8772e96935 Temporarily remove '.editor' class from react editor wrapper
This will prevent warnings from packages during testing.
2014-04-22 17:09:36 -06:00
Nathan Sobo e24196c0ef Require React directly rather than via reactionary
Reactionary is just a tiny helper library that can rely on the react
installed by the requiring application instead.
2014-04-22 17:09:36 -06:00
Nathan Sobo b879221a96 💄 Clarify variable name 2014-04-22 17:09:05 -06:00
Nathan Sobo 97a353b31a Measure each line with a fresh range
Recycling the range leads to strange timing-related measurement errors
in certain cases.
2014-04-22 17:09:05 -06:00
Nathan Sobo 57e2cf80f4 💄 Reorganize spec 2014-04-22 17:09:05 -06:00
Nathan Sobo 669586c11b 💄 2014-04-22 17:09:05 -06:00
Nathan Sobo 5b79bb7f66 Wait longer to clear preserved lines after mousewheel events 2014-04-22 17:09:05 -06:00
Nathan Sobo fd2ed9a1bc Prevent scroll event feedback loops after scrolling via the model layer
When scrolling via the model layer, such as happens on autoscroll due to
moving the cursor, we update the scroll position of the fake vertical
scrollbar manually. When we receive the scroll event that results from
this, we want to do nothing. The best way to determine whether we're
getting a "real" scroll event from the user or feedback from setting
the scrollTop ourselves is to compare the scrollTop to what's in the
model. If the values are equal, there's no need to request an animation
frame to assign it. This improves performance.
2014-04-22 17:09:04 -06:00
Nathan Sobo 95bf08dfa0 Eliminate overlayer by preserving lines during mousewheel events
Previously, the overlayer served as a permanent target for mousewheel
events that would never be removed by scrolling. This is because the
velocity scrolling effect on a trackpad is implemented by repeating
events on the original mousewheel event target. If this target is
removed, the events stop repeating and the velocity effect is ruined.
Now we refrain from removing any lines until mousewheel events stop
flowing.
2014-04-22 17:09:04 -06:00
Nathan Sobo 3d3b72a954 Render selections 2014-04-22 17:09:04 -06:00
Nathan Sobo 724babdcb6 Only update vertical scrollbar's scrollTop if it has changed 2014-04-22 17:09:04 -06:00
Nathan Sobo bad2cebd6e Add Editor::setSelectedScreenRange 2014-04-22 17:09:04 -06:00
Nathan Sobo 565b611c18 Do a better job imitating the old SpacePen-based editor 2014-04-22 17:09:04 -06:00
Nathan Sobo 1b8f23722b Correctly close scope spans when rendering line HTML 2014-04-22 17:09:04 -06:00
Nathan Sobo ab02d5f25f Update the vertical scroll bar when scrollTop changes in the model 2014-04-22 17:09:04 -06:00
Nathan Sobo e472d7b038 Add autoscrolling with react editor view
Its implemented in the model to restrict touching of the DOM.
2014-04-22 17:09:04 -06:00
Nathan Sobo ba83b0ede0 Update height of DisplayBuffer from editor component on overflow changed 2014-04-22 17:09:04 -06:00
Nathan Sobo 96e6ddac2e Prevent out-of-bounds scrollTop assignment on DisplayBuffer 2014-04-22 17:09:04 -06:00
Nathan Sobo 08bd03b706 Opt in to editor view only when core.useNewEditor is true 2014-04-22 17:09:04 -06:00
Nathan Sobo 2f42f23ec6 Revert changes to editor-view 2014-04-22 17:09:03 -06:00
Nathan Sobo 5a8ca1ae66 Move screen-related properties to DisplayBuffer
Scroll positions, height, width, line height. We force update when one
of these observed properties changes.
2014-04-22 17:09:03 -06:00
Nathan Sobo 9898cbc52e Remove space-pencil dependency 2014-04-22 17:09:03 -06:00
Nathan Sobo 53cc5c9856 Base cursor x position on char widths stored in DisplayBuffer
Whenever new lines are added to the screen, we measure and store any
unseen scope/character combinations in the DisplayBuffer.
2014-04-22 17:09:03 -06:00
Nathan Sobo 148a9f0248 Add DisplayBuffer::pixelPositionForScreenPosition
This bakes character width tracking into display buffer directly, which
moves us toward a world where all rendering decisions can be made in the
model to strictly control DOM reads.
2014-04-22 17:09:03 -06:00
Nathan Sobo 48e2302ccb Handle almost all editor commands in EditorComponent 2014-04-22 17:09:03 -06:00
Nathan Sobo 6327094696 Transfer focus from editor component to its hidden input 2014-04-22 17:09:03 -06:00
Nathan Sobo c4fdb54650 Update editor component when a visible selection is removed 2014-04-22 17:09:03 -06:00
Nathan Sobo a55c329226 💄 2014-04-22 17:09:03 -06:00
Nathan Sobo e365e51a2b Render all visible cursors 2014-04-22 17:09:03 -06:00
Nathan Sobo c44fd62eb1 Update cursor view when selection screen position changes 2014-04-22 17:09:03 -06:00
Nathan Sobo 9c2d321327 Break out selection, cursor, and input components 2014-04-22 17:09:02 -06:00
Nathan Sobo 70e5880b1d Start on cursor rendering 2014-04-22 17:09:02 -06:00
Nathan Sobo 61d9ff4ba4 Put the hidden input in the overlayer
The overlayer is absolutely positioned to exactly fill the scroll-view.
If we can retain this strategy and never give the input a position that
exceeds the bounds of the overlayer, we can guarantee that it never
forces the scroll position of the scroll view to change when it is
focused due to the browsers default behavior.
2014-04-22 17:09:02 -06:00
Nathan Sobo e4c1bf10f5 Handle basic input 2014-04-22 17:09:02 -06:00
Nathan Sobo c2858fcae2 Use overflow: hidden for editor 2014-04-22 17:09:02 -06:00
Nathan Sobo fddd411279 Use className instead of class
Might as well go with the flow
2014-04-22 17:09:02 -06:00
Nathan Sobo 2dda577d7c Improve TokenizedLine::getScopeTree specs and fix bug 2014-04-22 17:09:02 -06:00
Nathan Sobo 958bc638d7 Improve scrolling performance 2014-04-22 17:09:02 -06:00
Nathan Sobo 33ed403818 Update editor with tokenized lines when it appears on screen. 2014-04-22 17:09:02 -06:00
Nathan Sobo 3c69fd2d49 Handle mouse wheel and make some tweaks to improve scroll performance 2014-04-22 17:09:02 -06:00
Nathan Sobo a134a60ce8 Render the entire editor with React. Handle vertical scrolling.
The space-pen view is now a simple wrapper around the entire React
component to integrate it cleanly into our existing system. React
components can't adopt existing DOM nodes, otherwise I would just have
the react component take over the entire view instead of wrapping.
2014-04-22 17:09:02 -06:00
Nathan Sobo 9c49a2d970 Use reactionary helper for creating virtual DOM elements 2014-04-22 17:09:01 -06:00
Nathan Sobo 8cd9160ed5 Add space-pencil dependency 2014-04-22 17:09:01 -06:00
Nathan Sobo 8ad13d3045 Add a real spec for visible line rendering in the react editor view 2014-04-22 17:09:01 -06:00
Nathan Sobo cc8ba2d679 Update the rendered lines when the screen lines change 2014-04-22 17:09:01 -06:00
Nathan Sobo da36d5f40f Start experimenting with an EditorView that renders content with React 2014-04-22 17:09:01 -06:00
Corey Johnson 3bd7bfcbf1 Merge remote-tracking branch 'origin/master' into cj-add-deprecation-warning-to-specs 2014-04-22 16:06:04 -07:00
Kevin Sawicki 9904a9a197 Upgrade to pathwatcher 1.2 2014-04-22 14:40:13 -07:00
Corey Johnson 3e94c0be22 Remove deprecated methods from window spec 2014-04-22 14:19:13 -07:00
Corey Johnson db0cce6234 Remove focused spec 2014-04-22 14:19:01 -07:00
Corey Johnson f3d4cbbd8f Remove unnecessary fat arrows 2014-04-22 14:15:56 -07:00
Corey Johnson 81df4ed238 Change Workspace::reopenItemSync to use promises 2014-04-22 14:15:07 -07:00
Corey Johnson 7b756ec3f3 Remove calls to openSync from the workspace-spec 2014-04-22 11:24:27 -07:00
Kevin Sawicki 7250a9e407 Upgrade to base16-tomorrow-dark-theme@0.15.0 2014-04-22 11:19:17 -07:00
Kevin Sawicki 1a02b2ec98 Upgrade to atom-light-syntax@0.17.0 2014-04-22 11:06:32 -07:00
Corey Johnson 0d95718d1f Remove focused spec 2014-04-22 11:04:14 -07:00
Corey Johnson 1da23e8d04 Remove deprecations from atom-spec 2014-04-22 11:01:21 -07:00
Corey Johnson 43792d019a Output deprecation message 2014-04-22 11:01:05 -07:00
Corey Johnson ec0b4a2dc6 Move deprecation output to its own function 2014-04-22 10:44:25 -07:00
Kevin Sawicki 94c860e936 Upgrade to language-sass@0.10.0 2014-04-22 10:43:11 -07:00
Kevin Sawicki 1aeb32eb81 Upgrade to first-mate 1.5.2
Refs atom/language-make#6
2014-04-22 10:27:20 -07:00
Corey Johnson 1083136dec Don't allow specs that call deprecated methods to pass 2014-04-22 10:11:52 -07:00
Corey Johnson e450e61248 Fix broken spec 2014-04-22 10:01:24 -07:00
Corey Johnson fd7951b2c6 Remove focused spec 2014-04-22 09:51:15 -07:00
Kevin Sawicki 743e79b659 Look at first character instead of indexOf call 2014-04-22 09:35:30 -07:00
Kevin Sawicki 3d10c3856b Replace all periods with a single space
Refs atom/language-make#6
2014-04-22 09:33:17 -07:00
Kevin Sawicki d5df83e872 Upgrade to language-sass@0.9.0 2014-04-21 10:40:28 -07:00
Kevin Sawicki 248948b217 Prepare 0.91.0 release 2014-04-21 09:44:01 -07:00
Kevin Sawicki 7d3553659a Update to apm 0.40.0 2014-04-21 09:32:53 -07:00
Corey Johnson 28dad3a01a Upgrade command-palette and deprecation-cop 2014-04-21 09:24:23 -07:00
Corey Johnson be872c2fdd Merge pull request #1868 from atom/cj-deprecation-cop
Add deprecation-cop dependency
2014-04-18 16:08:32 -07:00
Corey Johnson 526d87c355 Merge branch 'cj-remove-deprecated-calls' into cj-deprecation-cop 2014-04-18 15:57:28 -07:00
Corey Johnson cbeb0187da Merge remote-tracking branch 'origin/master' into cj-deprecation-cop 2014-04-18 15:56:40 -07:00
Kevin Sawicki 7c614c6c79 Upgrade to base16-tomorrow-dark-theme@0.14.0 2014-04-18 15:55:59 -07:00
Corey Johnson f4f0b4be72 Upgrade text-buffer and atom-keymap 2014-04-18 15:50:30 -07:00
Corey Johnson 3e27beeafa Update packages 2014-04-18 15:50:30 -07:00
Corey Johnson 4a6b70d261 Use Marker::get/setProperties 2014-04-18 15:50:30 -07:00
Corey Johnson 5917f71685 Use KeymapManager::findKeyBindings 2014-04-18 15:50:30 -07:00
Corey Johnson fb42c499b1 Use KeymapManager::handleKeyboardEvent 2014-04-18 15:50:30 -07:00
Corey Johnson 1583271e2f Use setTextInRange instead of change 2014-04-18 15:50:30 -07:00
Corey Johnson 020e22a13d Merge remote-tracking branch 'origin/master' into cj-deprecation-cop 2014-04-18 15:49:55 -07:00
Kevin Sawicki a37a7e0a76 Upgrade to language-javascript@0.24.0 2014-04-18 13:45:52 -07:00
Kevin Sawicki d1b4d0f9f2 Upgrade to language-javascript@0.23.0 2014-04-18 13:16:34 -07:00
Kevin Sawicki fb111dd0f4 Upgrade to language-css@0.16.0 2014-04-18 11:43:49 -07:00
Kevin Sawicki 1392deb29c Upgrade to language-css@0.15.0 2014-04-18 11:24:29 -07:00
Kevin Sawicki 2dafc5eaa1 Upgrade to language-less@0.8.0 2014-04-18 11:08:50 -07:00
Corey Johnson a407b0107a Remove deprecated call to keystroke 2014-04-18 10:43:27 -07:00
Corey Johnson 36c3c38047 Don't rename deprecated method 2014-04-18 10:43:27 -07:00
Corey Johnson e56317bd64 Use paneView as var name instead of pane 2014-04-18 10:43:27 -07:00
Corey Johnson da49751f24 Remove usage of PaneContainerView::getActivePaneView 2014-04-18 10:43:27 -07:00
Kevin Sawicki 762559d2b7 Upgrade to bracket-matcher@0.33.0 2014-04-18 10:02:10 -07:00
Kevin Sawicki 2a0070ef10 Upgrade to bracket-matcher@0.32.0 2014-04-18 09:45:44 -07:00
Kevin Sawicki 7c7de4436e Merge pull request #1879 from atom/ks-move-compile-cache-to-dot-atom
Move compile cache to ~/.atom/compile-cache
2014-04-17 18:54:30 -07:00
Kevin Sawicki 87afa50477 💄 Add space after comma 2014-04-17 18:35:54 -07:00
Kevin Sawicki 2e71e2fa4b Remove unneeded mkdir call 2014-04-17 18:34:59 -07:00
Kevin Sawicki b537ba8864 Use fs-plus isFileSync method 2014-04-17 18:34:10 -07:00
Kevin Sawicki c156119882 Store compiled coffee files with js extension 2014-04-17 18:32:22 -07:00
Kevin Sawicki fea958c8e4 Clean ~/.atom/compile-cache 2014-04-17 18:32:22 -07:00
Kevin Sawicki 8e0a695f7c Store less cache in ~/.atom/compile-cache 2014-04-17 18:32:22 -07:00
Kevin Sawicki 47f99cd74e Store coffee/cson cache in ~/.atom/compile-cache 2014-04-17 18:32:22 -07:00
Kevin Sawicki 0eb5fd4c3b Merge pull request #1878 from atom/ks-mutate-selected-text-public
Make Editor::mutateSelectedText public
2014-04-17 18:31:42 -07:00
Kevin Sawicki 0c01de350d 📝 Shorten and tweak comment 2014-04-17 18:23:40 -07:00
Kevin Sawicki 77641f138b Make Editor::mutateSelectedText public 2014-04-17 18:23:01 -07:00
probablycorey f24843a928 Upgrade grim and deprecation-cop 2014-04-17 17:59:12 -07:00
probablycorey 03ab77c60b Merge commit '690fc7180a9f1dc5dfc77f8b2b31e866ce79510c' into cj-deprecation-cop 2014-04-17 17:57:36 -07:00
Nathan Sobo ec0ec3bb16 Upgrade to text-buffer@2.0.3 to fix Array::map + parseInt gotcha 2014-04-17 16:38:18 -06:00
Kevin Sawicki 690fc7180a Defer requiring of $ in Package
This is needed in the case that the package manager is being used
in the browser process to open a URL.

Closes #1869
2014-04-17 13:53:00 -07:00
Kevin Sawicki 02553bf8e2 Upgrade to fs-plus 2.2.2
Refs #1877
2014-04-17 13:34:23 -07:00
Kevin Sawicki 81646532b4 Ignore non-string core.themes config entries
Previously exceptions would be raised downstream if invalid theme
names were returned from ThemeManager::getEnabledThemeNames

Closes #1877
2014-04-17 13:33:51 -07:00
Kevin Sawicki 1e7c80aebf Merge pull request #1876 from atom/ks-config-default-api
Add Config::getDefault API
2014-04-17 13:33:39 -07:00
Kevin Sawicki 27fe5b784c 📝 Use package instead of plugin in example 2014-04-17 13:24:34 -07:00
Kevin Sawicki 9b2901583e 📝 Clean up docs 2014-04-17 13:24:34 -07:00
Kevin Sawicki 408665d7d2 Add Config::isDefault(keyPath) 2014-04-17 13:24:34 -07:00
Kevin Sawicki 6ec58e1163 Rename value var to defaultValue 2014-04-17 13:24:34 -07:00
Kevin Sawicki 541ffa5057 💄 Combine specs 2014-04-17 13:24:34 -07:00
Kevin Sawicki 0ea683e0b5 💄 Move expect up one line 2014-04-17 13:24:34 -07:00
Kevin Sawicki f12004d27b Add object to default value spec 2014-04-17 13:24:34 -07:00
Kevin Sawicki 35d268fcf8 Use _.isEqual when comparing value to default 2014-04-17 13:24:34 -07:00
Kevin Sawicki 20c3ca21e3 Add Config::getDefault(keyPath) 2014-04-17 13:24:34 -07:00
Nathan Sobo 37d2e00f4e Upgrade to text-buffer@2.0.2 to fix next marker id when deserializing 2014-04-17 13:33:28 -06:00
Kevin Sawicki 5bf9bbe764 Merge pull request #1875 from atom/ks-context-menu-without-focus
Allow context menu to work without focus
2014-04-17 12:00:25 -07:00
Kevin Sawicki e37fc316fb Remove unneeded ?
AtomWindow always has a non-null browserWindow property
2014-04-17 11:42:57 -07:00
Kevin Sawicki 9128041c20 Include AtomWindow in command options
This ensures that all application commands can use it instead of relying
on the focused window.
2014-04-17 11:36:19 -07:00
Kevin Sawicki 020c5e795a Remove unneeded . 2014-04-17 11:24:53 -07:00
Kevin Sawicki be3a6bc6d0 Send context menu commands without focused window
The context menu always knows what window it is bound to so
start supporting running context menus on non-focused windows.

Previously these would either fail silently or log an error
if focusedWindow() returned null and the command wasn't guarding
against it.
2014-04-17 11:24:53 -07:00
Kevin Sawicki 142bb4b615 Upgrade to markdown-preview@0.64.0 2014-04-17 11:18:49 -07:00
Kevin Sawicki ddf7bb5303 Upgrade to settings-view@0.110.0 2014-04-16 17:55:05 -07:00
Kevin Sawicki 442342937f Upgrade to markdown-preview@0.63.0 2014-04-16 13:43:25 -07:00
Kevin Sawicki a967e52f68 Autoscroll when moving lines up/down
Closes #1829
2014-04-16 12:43:51 -07:00
Kevin Sawicki c475e89a3e Remove duplicate tilde
Closes #1866
2014-04-16 12:07:43 -07:00
Kevin Sawicki 58da88b71a Upgrade to apm v0.39.0 2014-04-16 10:55:50 -07:00
Kevin Sawicki 71328f21bd Upgrade to language-go@0.9.0 2014-04-16 10:03:30 -07:00
Kevin Sawicki a1b0f6c25d Upgrade to settings-view@0.109.0 2014-04-16 09:29:09 -07:00
Nathan Sobo fdccc2dae4 Prepare 0.90.0 release 2014-04-16 10:20:11 -06:00
Corey Johnson 1246f8ed20 Merge pull request #1871 from atom/cj-remove-deprecated-calls
Remove deprecated calls
2014-04-16 09:02:41 -07:00
Nathan Sobo fb56817895 Prepare 0.89.0 release 2014-04-16 09:58:38 -06:00
Nathan Sobo b6d8d5d100 Prepare 0.88.0 release 2014-04-16 09:56:24 -06:00
Corey Johnson 8eb23dbe5c Merge remote-tracking branch 'origin/master' into cj-remove-deprecated-calls
Conflicts:
	package.json
2014-04-16 08:54:50 -07:00
Corey Johnson b4c8cb4bf9 Use Workspace::getActivePaneItem 2014-04-15 15:31:56 -07:00
Corey Johnson 8988d55d25 Upgrade to find-and-replace@0.98.0 2014-04-15 15:27:24 -07:00
Corey Johnson 5824b127ed Update multiple packages 2014-04-15 15:23:25 -07:00
Corey Johnson d6ec73886f Add PaneContainer::getActivePane 2014-04-15 14:55:28 -07:00
Corey Johnson 411cf579f4 Add Workspace::getActivePaneItem 2014-04-15 14:35:31 -07:00
Corey Johnson ad0ed7e634 Don't use of deprecated methods internally 2014-04-15 14:07:07 -07:00
Corey Johnson 7c00e02b1a Deprecate PaneContainerView::getActivePane
Use PaneContainerView::getActivePaneView instead.
2014-04-15 14:04:20 -07:00
Corey Johnson e6040972d8 Update multiple packages. 2014-04-15 14:03:46 -07:00
Corey Johnson ac2f723aba Use PaneContainerViews::getPaneViews 2014-04-15 13:13:53 -07:00
Corey Johnson 326d1dce14 Upgrade to deprecation-cop@0.2.0 2014-04-15 11:29:47 -07:00
Corey Johnson c2f87fb73b Add deprecation-cop dependency 2014-04-14 14:59:20 -07:00
165 arquivos alterados com 8642 adições e 1778 exclusões
+6
Ver Arquivo
@@ -6,3 +6,9 @@ spec/fixtures/**/*.less text eol=lf
spec/fixtures/**/*.css text eol=lf
spec/fixtures/**/*.txt text eol=lf
spec/fixtures/dir/**/* text eol=lf
# Git 1.7 does not support **/* patterns
spec/fixtures/css.css text eol=lf
spec/fixtures/sample.js text eol=lf
spec/fixtures/sample.less text eol=lf
spec/fixtures/sample.txt text eol=lf
+1 -1
Ver Arquivo
@@ -1,6 +1,7 @@
*.swp
*~
.DS_Store
Thumbs.db
.project
.svn
.nvm-version
@@ -12,4 +13,3 @@ debug.log
docs/output
docs/includes
spec/fixtures/evil-files/
/apm
-3
Ver Arquivo
@@ -1,3 +0,0 @@
[submodule "vendor/apm"]
path = vendor/apm
url = https://github.com/atom/apm.git
-1
Ver Arquivo
@@ -1,2 +1 @@
ca =
cache = ~/.atom/.npm
+79 -47
Ver Arquivo
@@ -1,77 +1,109 @@
# :tada: Contributing to Atom :tada:
# Contributing to Atom
These are just guidelines, not rules, use your best judgement and feel free
to propose changes to this document in a pull request.
:+1::tada: First off, thanks for taking the time to contribute! :tada::+1:
## Issues
* Include screenshots and animated GIFs whenever possible, they are immensely
helpful.
* Include the behavior you expected to happen and other places you've seen
that behavior such as Emacs, vi, Xcode, etc.
* Check the Console app for stack traces to include if reporting a crash.
* Check the Dev tools (`alt-cmd-i`) for errors and stack traces to include.
The following is a set of guidelines for contributing to Atom and its packages,
which are hosted in the [Atom Organization](https://github.com/atom) on GitHub.
If you're unsure which package is causing your problem or if you're having an
issue with Atom core, please open an issue on the [main atom repository](https://github.com/atom/atom/issues).
These are just guidelines, not rules, use your best judgement and feel free to
propose changes to this document in a pull request.
## Submitting Issues
* Check the [debugging guide](https://atom.io/docs/latest/debugging) for tips
on debugging. You might be able to find the cause of the problem and fix
things yourself.
* Include the version of Atom you are using and the OS.
* Include screenshots and animated GIFs whenever possible; they are immensely
helpful.
* Include the behavior you expected and other places you've seen that behavior
such as Emacs, vi, Xcode, etc.
* Check the dev tools (`alt-cmd-i`) for errors to include. If the dev tools
are open _before_ the error is triggered, a full stack trace for the error
will be logged. If you can reproduce the error, use this approach to get the
full stack trace and include it in the issue.
* On Mac, check Console.app for stack traces to include if reporting a crash.
* Perform a cursory search to see if a similar issue has already been submitted.
### Package Repositories
This is the repository for the core Atom editor only. Atom comes bundled with
many packages and themes that are stored in other repos under the
[atom organization](https://github.com/atom) such as [tabs](https://github.com/atom/tabs),
[Atom organization](https://github.com/atom) such as
[tabs](https://github.com/atom/tabs),
[find-and-replace](https://github.com/atom/find-and-replace),
[language-javascript](https://github.com/atom/language-javascript),
and [atom-light-ui](http://github.com/atom/atom-light-ui).
[language-javascript](https://github.com/atom/language-javascript), and
[atom-light-ui](http://github.com/atom/atom-light-ui).
If you think you know which package is causing the issue you are reporting, feel
free to open up the issue in that specific repository instead. When in doubt
just open the issue here but be aware that it may get closed here and reopened
in the proper package's repository.
For more information on how to work with Atom's official packages, see
[Contributing to Atom Packages](https://atom.io/docs/latest/contributing-to-packages.html)
## Pull Requests
* Include screenshots and animated GIFs whenever possible.
* Follow the [CoffeeScript](#coffeescript-styleguide),
[JavaScript](https://github.com/styleguide/javascript),
and [CSS](https://github.com/styleguide/css) styleguides
* Include thoughtfully worded [Jasmine](http://pivotal.github.com/jasmine)
specs
* Avoid placing files in `vendor`. 3rd-party packages should be added as a
`package.json` dependency.
* Files end with a newline.
* Requires should be in the following order:
* Include screenshots and animated GIFs in your pull request whenever possible.
* Follow the [CoffeeScript](#coffeescript-styleguide),
[JavaScript](https://github.com/styleguide/javascript),
and [CSS](https://github.com/styleguide/css) styleguides.
* Include thoughtfully-worded, well-structured
[Jasmine](http://jasmine.github.io/) specs.
* Document new code based on the
[Documentation Styleguide](#documentation-styleguide)
* End files with a newline.
* Place requires in the following order:
* Built in Node Modules (such as `path`)
* Built in Atom and Atom Shell Modules (such as `atom`, `shell`)
* Local Modules (using relative paths)
* Class variables and methods should be in the following order:
* Class methods (methods starting with a `@`)
* Instance methods
* Beware of platform differences
* Place class properties in the following order:
* Class methods and properties (methods starting with a `@`)
* Instance methods and properties
* Avoid platform-dependent code:
* Use `require('atom').fs.getHomeDirectory()` to get the home directory.
* Use `path.join()` to concatenate filenames.
* Temporary directory is not `/tmp` on Windows, use `os.tmpdir()` when
possible
* Use `os.tmpdir()` rather than `/tmp` when you need to reference the
temporary directory.
## Git Commit Messages
* Use the present tense
* Reference issues and pull requests liberally
* Consider starting the commit message with an applicable emoji:
* :lipstick: when improving the format/structure of the code
* :racehorse: when improving performance
* :non-potable_water: when plugging memory leaks
* :memo: when writing docs
* :penguin: when fixing something on Linux
* Use the present tense ("Add feature" not "Added feature")
* Use the imperative mood ("Move cursor to..." not "Moves cursor to...")
* Limit the first line to 72 characters or less
* Reference issues and pull requests liberally
* Consider starting the commit message with an applicable emoji:
* :lipstick: `:lipstick:` when improving the format/structure of the code
* :racehorse: `:racehorse:` when improving performance
* :non-potable_water: `:non-potable_water:` when plugging memory leaks
* :memo: `:memo:` when writing docs
* :penguin: `:penguin:` when fixing something on Linux
* :apple: `:apple:` when fixing something on Mac OS
* :checkered_flag: `:checkered_flag:` when fixing something on Windows
* :bug: `:bug:` when fixing a bug
* :fire: `:fire:` when removing code or files
* :green_heart: `:green_heart:` when fixing the CI build
* :white_check_mark: `:white_check_mark:` when adding tests
* :lock: `:lock:` when dealing with security
## CoffeeScript Styleguide
* Set parameter defaults without spaces around the equal sign
* `clear = (count=1) ->` instead of `clear = (count = 1) ->`
* `clear = (count=1) ->` instead of `clear = (count = 1) ->`
* Use parentheses if it improves code clarity.
* Prefer alphabetic keywords to symbolic keywords:
* `a is b` instead of `a == b`
* 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.
## Documentation Styleguide
* Use [TomDoc](http://tomdoc.org).
* Use [Markdown](https://daringfireball.net/projects/markdown).
* Reference classes with `{ClassName}`.
* Reference instance methods with `{ClassName::methodName}`.
* Reference class methods with `{ClassName.methodName}`.
* Delegate to comments elsewhere with `{Delegates to: ClassName.methodName}`
style notation.
* Reference methods and classes in markdown with the custom `{}` notation:
* Reference classes with `{ClassName}`
* Reference instance methods with `{ClassName::methodName}`
* Reference class methods with `{ClassName.methodName}`
* Delegate to comments elsewhere with `{Delegates to: ClassName.methodName}`
style notation.
### Example
-1
Ver Arquivo
@@ -1 +0,0 @@
Copyright 2014 GitHub, Inc.
+20
Ver Arquivo
@@ -0,0 +1,20 @@
Copyright (c) 2014 GitHub Inc.
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+9 -5
Ver Arquivo
@@ -1,8 +1,8 @@
# Atom — The hackable editor
![Atom](https://cloud.githubusercontent.com/assets/72919/2874231/3af1db48-d3dd-11e3-98dc-6066f8bc766f.png)
![Atom](http://i.imgur.com/OrTvUAD.png)
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.
Check out our [guides and API documentation](https://atom.io/docs/latest).
Visit [atom.io](https://atom.io) to learn more.
## Installing
@@ -12,6 +12,10 @@ Atom will automatically update when a new release is available.
## Building
Follow the instructions in the [build docs][building].
* [Linux](docs/build-instructions/linux.md)
* [OS X](docs/build-instructions/os-x.md)
* [FreeBSD](docs/build-instructions/freebsd.md)
* [Windows](docs/build-instructions/windows.md)
[building]: https://github.com/atom/atom/blob/master/docs/building-atom.md
## Developing
Check out the [guides](https://atom.io/docs/latest) and the [API reference](https://atom.io/docs/api).
+2
Ver Arquivo
@@ -0,0 +1,2 @@
This folder is where [apm](https://github.com/atom/apm) is installed to so that
it is bundled with Atom.
+11
Ver Arquivo
@@ -0,0 +1,11 @@
{
"name": "atom-bundled-apm",
"description": "Atom's bundled APM",
"repository": {
"type": "git",
"url": "https://github.com/atom/atom.git"
},
"dependencies": {
"atom-package-manager": "0.69.0"
}
}
+17 -9
Ver Arquivo
@@ -1,17 +1,17 @@
#!/bin/bash
if [ "`uname`" == 'Darwin' ]; then
if [ "$(uname)" == 'Darwin' ]; then
OS='Mac'
elif [ "`expr substr $(uname -s) 1 5`" == 'Linux' ]; then
elif [ "$(expr substr $(uname -s) 1 5)" == 'Linux' ]; then
OS='Linux'
elif [ "`expr substr $(uname -s) 1 10`" == 'MINGW32_NT' ]; then
elif [ "$(expr substr $(uname -s) 1 10)" == 'MINGW32_NT' ]; then
OS='Cygwin'
else
echo "Your platform (`uname -a`) is not supported."
echo "Your platform ($(uname -a)) is not supported."
exit 1
fi
while getopts ":wtfvhs-:" opt; do
while getopts ":wtfvh-:" opt; do
case "$opt" in
-)
case "${OPTARG}" in
@@ -66,17 +66,25 @@ if [ $OS == 'Mac' ]; then
open -a "$ATOM_PATH/$ATOM_APP_NAME" -n --args --executed-from="$(pwd)" --pid=$$ "$@"
fi
elif [ $OS == 'Linux' ]; then
SCRIPT=`readlink -f "$0"`
USR_DIRECTORY=`readlink -f $(dirname $SCRIPT)/..`
SCRIPT=$(readlink -f "$0")
USR_DIRECTORY=$(readlink -f $(dirname $SCRIPT)/..)
ATOM_PATH="$USR_DIRECTORY/share/atom/atom"
[ -x "$ATOM_PATH" ] || ATOM_PATH='/tmp/atom-build/Atom/atom'
: ${TMPDIR:=/tmp}
[ -x "$ATOM_PATH" ] || ATOM_PATH="$TMPDIR/atom-build/Atom/atom"
if [ $EXPECT_OUTPUT ]; then
"$ATOM_PATH" --executed-from="$(pwd)" --pid=$$ "$@"
exit $?
else
nohup "$ATOM_PATH" --executed-from="$(pwd)" --pid=$$ "$@" > /dev/null 2>&1 &
(
nohup "$ATOM_PATH" --executed-from="$(pwd)" --pid=$$ "$@" > "$TMPDIR/atom-nohup.out" 2>&1
if [ $? -ne 0 ]; then
cat "$TMPDIR/atom-nohup.out"
exit $?
fi
) &
fi
fi
+6 -18
Ver Arquivo
@@ -36,35 +36,23 @@ module.exports = (grunt) ->
grunt.log.write = (args...) -> grunt.log
[major, minor, patch] = packageJson.version.split('.')
tmpDir = os.tmpdir()
appName = if process.platform is 'darwin' then 'Atom.app' else 'Atom'
buildDir = grunt.option('build-dir') ? path.join(tmpDir, 'atom-build')
atomShellDownloadDir = path.join(os.tmpdir(), 'atom-cached-atom-shells')
symbolsDir = path.join(buildDir, 'Atom.breakpad.syms')
shellAppDir = path.join(buildDir, appName)
if process.platform is 'win32'
appName = 'Atom'
tmpDir = os.tmpdir()
buildDir = grunt.option('build-dir') ? path.join(tmpDir, 'atom-build')
symbolsDir = path.join(buildDir, 'Atom.breakpad.syms')
shellAppDir = path.join(buildDir, appName)
contentsDir = shellAppDir
appDir = path.join(shellAppDir, 'resources', 'app')
atomShellDownloadDir = path.join(os.tmpdir(), 'atom-cached-atom-shells')
installDir = path.join(process.env.ProgramFiles, appName)
else if process.platform is 'darwin'
appName = 'Atom.app'
tmpDir = '/tmp'
buildDir = grunt.option('build-dir') ? path.join(tmpDir, 'atom-build')
symbolsDir = path.join(buildDir, 'Atom.breakpad.syms')
shellAppDir = path.join(buildDir, appName)
contentsDir = path.join(shellAppDir, 'Contents')
appDir = path.join(contentsDir, 'Resources', 'app')
atomShellDownloadDir = '/tmp/atom-cached-atom-shells'
installDir = path.join('/Applications', appName)
else
appName = 'Atom'
tmpDir = '/tmp'
buildDir = grunt.option('build-dir') ? path.join(tmpDir, 'atom-build')
symbolsDir = path.join(buildDir, 'Atom.breakpad.syms')
shellAppDir = path.join(buildDir, appName)
contentsDir = shellAppDir
appDir = path.join(shellAppDir, 'resources', 'app')
atomShellDownloadDir = '/tmp/atom-cached-atom-shells'
installDir = process.env.INSTALL_PREFIX ? '/usr/local'
coffeeConfig =
+4 -2
Ver Arquivo
@@ -18,7 +18,7 @@
"grunt-contrib-coffee": "~0.9.0",
"grunt-contrib-less": "~0.8.0",
"grunt-cson": "0.8.0",
"grunt-download-atom-shell": "git+https://atom-bot:467bac80a0017b96fb5be5cfc686f5e0cc607b10@github.com/atom/grunt-download-atom-shell#v0.6.1",
"grunt-download-atom-shell": "~0.8.0",
"grunt-lesslint": "0.13.0",
"grunt-markdown": "~0.4.0",
"grunt-peg": "~1.1.0",
@@ -26,7 +26,9 @@
"harmony-collections": "~0.3.8",
"json-front-matter": "~0.1.3",
"legal-eagle": "~0.4.0",
"minidump": "0.5.x",
"minidump": "~0.7",
"read-package-json": "1.1.8",
"normalize-package-data": "0.2.12",
"rcedit": "~0.1.2",
"request": "~2.27.0",
"rimraf": "~2.2.2",
+13 -2
Ver Arquivo
@@ -1,5 +1,6 @@
fs = require 'fs'
path = require 'path'
_ = require 'underscore-plus'
module.exports = (grunt) ->
{cp, isAtomPackage, mkdir, rm} = require('./task-helpers')(grunt)
@@ -48,16 +49,22 @@ module.exports = (grunt) ->
path.join('bootstrap', 'docs')
path.join('bootstrap', 'examples')
path.join('pegjs', 'examples')
# Add .* to avoid matching hunspell_dictionaries.
path.join('spellchecker', 'vendor', 'hunspell', '.*')
path.join('plist', 'tests')
path.join('xmldom', 'test')
path.join('jasmine-reporters', 'ext')
path.join('build', 'Release', 'obj.target')
path.join('build', 'Release', 'obj')
path.join('build', 'Release', '.deps')
path.join('vendor', 'apm')
path.join('resources', 'mac')
path.join('resources', 'win')
]
ignoredPaths = ignoredPaths.map (ignoredPath) -> _.escapeRegExp(ignoredPath)
# Add .* to avoid matching hunspell_dictionaries.
ignoredPaths.push "#{_.escapeRegExp(path.join('spellchecker', 'vendor', 'hunspell') + path.sep)}.*"
ignoredPaths.push "#{_.escapeRegExp(path.join('build', 'Release') + path.sep)}.*\\.pdb"
# Hunspell dictionaries are only not needed on OS X.
if process.platform is 'darwin'
ignoredPaths.push path.join('spellchecker', 'vendor', 'hunspell_dictionaries')
@@ -79,6 +86,10 @@ module.exports = (grunt) ->
unless /.+\.plist/.test(sourcePath)
grunt.file.copy(sourcePath, path.resolve(appDir, '..', subDirectory, filename))
if process.platform is 'win32'
cp path.join('resources', 'win', 'msvcp100.dll'), path.join(shellAppDir, 'msvcp100.dll')
cp path.join('resources', 'win', 'msvcr100.dll'), path.join(shellAppDir, 'msvcr100.dll')
dependencies = ['compile', "generate-license:save"]
dependencies.push('copy-info-plist') if process.platform is 'darwin'
dependencies.push('set-exe-icon') if process.platform is 'win32'
+1 -1
Ver Arquivo
@@ -5,7 +5,7 @@ module.exports = (grunt) ->
{rm} = require('./task-helpers')(grunt)
grunt.registerTask 'partial-clean', 'Delete some of the build files', ->
tmpdir = if process.platform is 'win32' then os.tmpdir() else '/tmp'
tmpdir = os.tmpdir()
rm grunt.config.get('atom.buildDir')
rm require('../src/coffee-cache').cacheDir
+2
Ver Arquivo
@@ -2,6 +2,8 @@ module.exports = (grunt) ->
{spawn} = require('./task-helpers')(grunt)
grunt.registerTask 'codesign', 'Codesign the app', ->
return unless process.platform is 'darwin'
done = @async()
if process.env.XCODE_KEYCHAIN
+1 -1
Ver Arquivo
@@ -143,7 +143,7 @@ downloadFileFromRepo = ({repo, file}, callback) ->
downloadIncludes = (callback) ->
includes = [
{repo: 'atom-keymap', file: 'src/keymap.coffee'}
{repo: 'atom-keymap', file: 'src/keymap-manager.coffee'}
{repo: 'atom-keymap', file: 'src/key-binding.coffee'}
{repo: 'first-mate', file: 'src/grammar.coffee'}
{repo: 'first-mate', file: 'src/grammar-registry.coffee'}
+2 -2
Ver Arquivo
@@ -17,7 +17,7 @@ module.exports = (grunt) ->
licenseText = getLicenseText(dependencyLicenses)
if mode is 'save'
targetPath = path.join(grunt.config.get('atom.appDir'), 'LICENSE')
targetPath = path.join(grunt.config.get('atom.appDir'), 'LICENSE.md')
fs.writeFileSync(targetPath, licenseText)
else
console.log licenseText
@@ -26,7 +26,7 @@ module.exports = (grunt) ->
getLicenseText = (dependencyLicenses) ->
{keys} = require 'underscore-plus'
text = """
Copyright 2014 GitHub, Inc.
#{fs.readFileSync('LICENSE.md', 'utf8')}
This application bundles the following third-party packages in accordance
with the following licenses:\n\n
+17
Ver Arquivo
@@ -1,8 +1,14 @@
fs = require 'fs'
path = require 'path'
_ = require 'underscore-plus'
fs = require 'fs-plus'
runas = null
fillTemplate = (filePath, data) ->
template = _.template(String(fs.readFileSync(filePath + '.in')))
filled = template(data)
fs.writeFileSync(filePath, filled)
module.exports = (grunt) ->
{cp, mkdir, rm} = require('./task-helpers')(grunt)
@@ -25,12 +31,23 @@ module.exports = (grunt) ->
binDir = path.join(installDir, 'bin')
shareDir = path.join(installDir, 'share', 'atom')
iconName = path.join(shareDir,'resources','app','resources','atom.png')
desktopFile = path.join('resources', 'linux', 'Atom.desktop')
mkdir binDir
cp 'atom.sh', path.join(binDir, 'atom')
rm shareDir
mkdir path.dirname(shareDir)
cp shellAppDir, shareDir
# Create Atom.desktop if installation in '/usr/local'
applicationsDir = path.join('/usr','share','applications')
tmpDir = if process.env.TMPDIR? then process.env.TMPDIR else '/tmp'
if installDir.indexOf(tmpDir) isnt 0 and fs.isDirectorySync(applicationsDir)
{description} = grunt.file.readJSON('package.json')
fillTemplate(desktopFile, {description, installDir, iconName})
cp desktopFile, path.join(applicationsDir,'Atom.desktop')
# Create relative symbol link for apm.
process.chdir(binDir)
rm('apm')
+11 -3
Ver Arquivo
@@ -13,11 +13,19 @@ module.exports = (grunt) ->
grunt.registerTask 'mkdeb', 'Create debian package', ->
done = @async()
if process.arch is 'ia32'
arch = 'i386'
else if process.arch is 'x64'
arch = 'amd64'
else
return done("Unsupported arch #{process.arch}")
{name, version, description} = grunt.file.readJSON('package.json')
section = 'devel'
arch = 'amd64'
maintainer = 'GitHub <atom@github.com>'
data = {name, version, description, section, arch, maintainer}
installDir = '/usr'
iconName = 'atom'
data = {name, version, description, section, arch, maintainer, installDir, iconName}
control = path.join('resources', 'linux', 'debian', 'control')
fillTemplate(control, data)
@@ -27,5 +35,5 @@ module.exports = (grunt) ->
buildDir = grunt.config.get('atom.buildDir')
cmd = path.join('script', 'mkdeb')
args = [version, control, desktop, icon, buildDir]
args = [version, arch, control, desktop, icon, buildDir]
spawn({cmd, args}, done)
+22 -83
Ver Arquivo
@@ -8,11 +8,17 @@ GitHub = require 'github-releases'
request = require 'request'
grunt = null
maxReleases = 10
assets = [
{assetName: 'atom-mac.zip', sourceName: 'Atom.app'}
{assetName: 'atom-mac-symbols.zip', sourceName: 'Atom.breakpad.syms'}
]
if process.platform is 'darwin'
assets = [
{assetName: 'atom-mac.zip', sourceName: 'Atom.app'}
{assetName: 'atom-mac-symbols.zip', sourceName: 'Atom.breakpad.syms'}
]
else
assets = [
{assetName: 'atom-windows.zip', sourceName: 'Atom'}
]
commitSha = process.env.JANKY_SHA1
token = process.env.ATOM_ACCESS_TOKEN
defaultHeaders =
@@ -23,27 +29,19 @@ module.exports = (gruntObject) ->
grunt = gruntObject
grunt.registerTask 'publish-build', 'Publish the built app', ->
return unless process.platform is 'darwin'
return if process.env.JANKY_SHA1 and process.env.JANKY_BRANCH isnt 'master'
done = @async()
buildDir = grunt.config.get('atom.buildDir')
createBuildRelease (error, release) ->
zipApps buildDir, assets, (error) ->
return done(error) if error?
zipApps buildDir, assets, (error) ->
getAtomDraftRelease (error, release) ->
return done(error) if error?
uploadAssets release, buildDir, assets, (error) ->
assetNames = (asset.assetName for asset in assets)
deleteExistingAssets release, assetNames, (error) ->
return done(error) if error?
publishRelease release, (error) ->
return done(error) if error?
getAtomDraftRelease (error, release) ->
return done(error) if error?
assetNames = (asset.assetName for asset in assets)
deleteExistingAssets release, assetNames, (error) ->
return done(error) if error?
uploadAssets(release, buildDir, assets, done)
uploadAssets(release, buildDir, assets, done)
logError = (message, error, details) ->
grunt.log.error(message)
@@ -52,10 +50,13 @@ logError = (message, error, details) ->
zipApps = (buildDir, assets, callback) ->
zip = (directory, sourceName, assetName, callback) ->
if process.platform is 'win32'
zipCommand = "C:/psmodules/7z.exe a -r #{assetName} #{sourceName}"
else
zipCommand = "zip -r --symlinks #{assetName} #{sourceName}"
options = {cwd: directory, maxBuffer: Infinity}
child_process.exec "zip -r --symlinks #{assetName} #{sourceName}", options, (error, stdout, stderr) ->
if error?
logError("Zipping #{sourceName} failed", error, stderr)
child_process.exec zipCommand, options, (error, stdout, stderr) ->
logError("Zipping #{sourceName} failed", error, stderr) if error?
callback(error)
tasks = []
@@ -64,25 +65,6 @@ zipApps = (buildDir, assets, callback) ->
tasks.push(zip.bind(this, buildDir, sourceName, assetName))
async.parallel(tasks, callback)
getRelease = (callback) ->
options =
uri: 'https://api.github.com/repos/atom/atom-master-builds/releases'
method: 'GET'
headers: defaultHeaders
json: true
request options, (error, response, releases=[]) ->
if error? or response.statusCode isnt 200
logError('Fetching releases failed', error, releases)
callback(error ? new Error(response.statusCode))
else
if releases.length > maxReleases
deleteRelease(release) for release in releases[maxReleases..]
for release in releases when release.name is commitSha
callback(null, release)
return
callback()
getAtomDraftRelease = (callback) ->
atomRepo = new GitHub({repo: 'atom/atom', token})
atomRepo.getReleases (error, releases=[]) ->
@@ -125,35 +107,6 @@ deleteExistingAssets = (release, assetNames, callback) ->
tasks.push(deleteAsset.bind(this, asset.url))
async.parallel(tasks, callback)
createBuildRelease = (callback) ->
getRelease (error, release) ->
if error?
callback(error)
return
if release?
deleteExistingAssets release, (error) ->
callback(error, release)
return
options =
uri: 'https://api.github.com/repos/atom/atom-master-builds/releases'
method: 'POST'
headers: defaultHeaders
json:
tag_name: "v#{commitSha}"
target_commitish: 'master'
name: commitSha
body: "Build of [atom@#{commitSha.substring(0, 7)}](https://github.com/atom/atom/commits/#{commitSha})"
draft: true
prerelease: true
request options, (error, response, release={}) ->
if error? or response.statusCode isnt 201
logError('Creating release failed', error, release)
callback(error ? new Error(response.statusCode))
else
callback(null, release)
uploadAssets = (release, buildDir, assets, callback) ->
upload = (release, assetName, assetPath, callback) ->
options =
@@ -178,17 +131,3 @@ uploadAssets = (release, buildDir, assets, callback) ->
assetPath = path.join(buildDir, assetName)
tasks.push(upload.bind(this, release, assetName, assetPath))
async.parallel(tasks, callback)
publishRelease = (release, callback) ->
options =
uri: release.url
method: 'POST'
headers: defaultHeaders
json:
draft: false
request options, (error, response, body={}) ->
if error? or response.statusCode isnt 200
logError('Creating release failed', error, body)
callback(error ? new Error(response.statusCode))
else
callback()
-108
Ver Arquivo
@@ -1,108 +0,0 @@
async = require 'async'
request = require 'request'
# Configure and publish all packages in package.json to atom.io
#
# This task should be run whenever you want to be sure that atom.io contains
# all the packages and versions referenced in Atom's package.json file.
module.exports = (grunt) ->
{spawn} = require('./task-helpers')(grunt)
baseUrl = "https://atom.io/api/packages"
packageExists = (packageName, token, callback) ->
requestSettings =
url: "#{baseUrl}/#{packageName}"
json: true
headers:
authorization: token
request.get requestSettings, (error, response, body={}) ->
if error?
callback(error)
else
callback(null, response.statusCode is 404)
createPackage = (packageName, token, callback) ->
requestSettings =
url: baseUrl
json: true
headers:
authorization: token
method: 'POST'
body:
repository: "atom/#{packageName}"
request.get requestSettings, (error, response, body={}) ->
if error?
callback(error)
else if response.statusCode isnt 201
message = body.message ? body.error ? body
callback(new Error("Creating package failed: #{message}"))
else
callback()
createPackageVersion = (packageName, tag, token, callback) ->
requestSettings =
url: "#{baseUrl}/#{packageName}/versions"
json: true
method: 'POST'
headers:
authorization: token
body:
tag: tag
request.get requestSettings, (error, response, body={}) ->
if error?
callback(error)
else if response.statusCode isnt 201
message = body.message ? body.error ? body
if message is 'Version exists'
callback()
else
callback(new Error("Creating new version failed: #{message}"))
else
callback()
getToken = (callback) ->
if token = process.env.ATOM_ACCESS_TOKEN
callback(null, token)
else
spawn {cmd: 'security', args: ['-q', 'find-generic-password', '-ws', 'GitHub API Token']}, (error, result, code) ->
token = result.toString() unless error?
callback(error, token)
grunt.registerTask 'publish-packages', 'Publish all bundled packages', ->
done = @async()
getToken (error, token) ->
unless token
grunt.log.error('Token not found in keychain or ATOM_ACCESS_TOKEN environment variable')
done(false)
{packageDependencies} = grunt.file.readJSON('package.json') ? {}
tasks = []
for name, version of packageDependencies
do (name, version) ->
tasks.push (callback) ->
grunt.verbose.writeln("Publishing #{name}@#{version}")
tag = "v#{version}"
packageExists name, token, (error, exists) ->
if error?
callback(error)
return
if exists
createPackage name, token, (error) ->
if error?
callback(error)
else
createPackageVersion(name, tag, token, callback)
else
createPackageVersion(name, tag, token, callback)
async.waterfall tasks, (error) ->
if error?
grunt.log.error(error.message)
done(false)
else
done()
+7 -3
Ver Arquivo
@@ -5,14 +5,18 @@ module.exports = (grunt) ->
{spawn} = require('./task-helpers')(grunt)
getVersion = (callback) ->
if process.env.JANKY_SHA1 and process.env.JANKY_BRANCH is 'master'
{version} = require(path.join(grunt.config.get('atom.appDir'), 'package.json'))
onBuildMachine = process.env.JANKY_SHA1 and process.env.JANKY_BRANCH is 'master'
inRepository = fs.existsSync(path.resolve(__dirname, '..', '..', '.git'))
{version} = require(path.join(grunt.config.get('atom.appDir'), 'package.json'))
if onBuildMachine or not inRepository
callback(null, version)
else
cmd = 'git'
args = ['rev-parse', '--short', 'HEAD']
spawn {cmd, args}, (error, {stdout}={}, code) ->
callback(error, stdout?.trim?())
commitHash = stdout?.trim?()
combinedVersion = "#{version}-#{commitHash}"
callback(error, combinedVersion)
grunt.registerTask 'set-version', 'Set the version in the plist and package.json', ->
done = @async()
+4 -8
Ver Arquivo
@@ -39,7 +39,8 @@ module.exports = (grunt) ->
grunt.verbose.writeln "Launching #{path.basename(packagePath)} specs."
spawn options, (error, results, code) ->
if process.platform is 'win32'
process.stderr.write(fs.readFileSync(path.join(packagePath, 'ci.log')))
if error
process.stderr.write(fs.readFileSync(path.join(packagePath, 'ci.log')))
fs.unlinkSync(path.join(packagePath, 'ci.log'))
failedPackages.push path.basename(packagePath) if error
@@ -77,7 +78,7 @@ module.exports = (grunt) ->
spawn options, (error, results, code) ->
if process.platform is 'win32'
process.stderr.write(fs.readFileSync('ci.log'))
process.stderr.write(fs.readFileSync('ci.log')) if error
fs.unlinkSync('ci.log')
else
# TODO: Restore concurrency on Windows
@@ -104,9 +105,4 @@ module.exports = (grunt) ->
failures.push "atom core" if coreSpecFailed
grunt.log.error("[Error]".red + " #{failures.join(', ')} spec(s) failed") if failures.length > 0
# TODO: Mark the build as green on Windows until specs pass.
if process.platform is 'darwin'
done(!coreSpecFailed and failedPackages.length == 0)
else if process.platform is 'win32'
done(true)
done(!coreSpecFailed and failedPackages.length == 0)
+1 -1
Ver Arquivo
@@ -1,6 +1,6 @@
# Welcome to the Atom API Documentation
![Atom](http://i.imgur.com/OrTvUAD.png)
![Atom](https://cloud.githubusercontent.com/assets/72919/2874231/3af1db48-d3dd-11e3-98dc-6066f8bc766f.png)
## FAQ
+13 -3
Ver Arquivo
@@ -10,8 +10,8 @@ keystrokes pass through elements with the class `.editor`:
```coffee
'.editor':
'cmd-delete': 'editor:backspace-to-beginning-of-line'
'alt-backspace': 'editor:backspace-to-beginning-of-word'
'cmd-delete': 'editor:delete-to-beginning-of-line'
'alt-backspace': 'editor:delete-to-beginning-of-word'
'ctrl-A': 'editor:select-to-first-character-of-line'
'ctrl-shift-e': 'editor:select-to-end-of-line'
'cmd-left': 'editor:move-to-first-character-of-line'
@@ -24,7 +24,7 @@ keystrokes pass through elements with the class `.editor`:
Beneath the first selector are several bindings, mapping specific *keystroke
patterns* to *commands*. When an element with the `.editor` class is focused and
`cmd-delete` is pressed, an custom DOM event called
`editor:backspace-to-beginning-of-line` is emitted on the `.editor` element.
`editor:delete-to-beginning-of-line` is emitted on the `.editor` element.
The second selector group also targets editors, but only if they don't have the
`.mini` class. In this example, the commands for code folding don't really make
@@ -91,6 +91,16 @@ the current keystroke sequence and continue searching from its parent. If you
want to remove a binding from a keymap you don't control, such as keymaps in
Atom core or in packages, use the `unset!` directive.
For example, the following code removes the keybinding for `a` in the Tree View,
which is normally used to trigger the `tree-view:add-file` command:
```coffee
'.tree-view':
'a': 'unset!'
```
![](https://cloud.githubusercontent.com/assets/38924/3174771/e7f6ce64-ebf4-11e3-922d-f280bffb3fc5.png)
## Forcing Chromium's Native Keystroke Handling
If you want to force the native browser behavior for a given keystroke, use the
+24
Ver Arquivo
@@ -0,0 +1,24 @@
## Developing Node Modules
Atom contains a number of packages that are Node modules instead of Atom packages. If you want to
make changes to the Node modules, for instance `atom-keymap`, you have to link them into the
development environment differently than you would a normal Atom package.
### Linking a Node Module Into Your Atom Dev Environment
Here are the steps to run a local version of a node module *not an apm* within Atom. We're using
`atom-keymap` as an example:
```bash
$ git clone https://github.com/atom/atom-keymap.git
$ cd atom-keymap
$ npm install
$ npm link
$ apm rebuild # This is the special step, it makes the npm work with Atom's version of Node
$ cd WHERE-YOU-CLONED-ATOM
$ npm link atom-keymap
$ atom # Should work!
```
After this, you'll have to `npm install` and `apm rebuild` when you make a change to the node
module's code.
+216
Ver Arquivo
@@ -0,0 +1,216 @@
## Atom.io package and update API
This guide describes the web API used by [apm](https://github.com/atom/apm) and
Atom. The vast majority of use cases are met by the `apm` command-line tool,
which does other useful things like incrementing your version in `package.json`
and making sure you have pushed your git tag. In fact, Atom itself shells out to
`apm` rather than hitting the API directly. If you're curious about how Atom
uses `apm`, see the [PackageManager class](https://github.com/atom/settings-view/blob/master/lib/package-manager.coffee)
in the `settings-view` package.
### Authorization
For calls to the API that require authentication, provide a valid token from your
[Atom.io account page](https://atom.io/account) in the `Authorization` header.
### Media type
All requests that take parameters require `application/json`.
## Resources
### Packages
#### GET /api/packages
Returns a list of all packages in the following format:
```json
[
{
"releases": {
"latest": "0.6.0"
},
"name": "thedaniel-test-package",
"repository": {
"type": "git",
"url": "https://github.com/thedaniel/test-package"
}
},
...
]
```
#### GET /api/packages/:package_name
Returns package details and versions for a single package
Parameters:
- **engine** (optional) - Only show packages with versions compatible with this
Atom version. Must be valid [SemVer](http://semver.org).
Returns:
```json
{
"releases": {
"latest": "0.6.0"
},
"name": "thedaniel-test-package",
"repository": {
"type": "git",
"url": "https://github.com/thedaniel/test-package"
},
"versions": [
(see single version output below)
...,
]
}
```
#### POST /api/packages
Create a new package; requires authentication.
The name and version will be fetched from the `package.json`
file in the specified repository. The authenticating user *must* have access
to the indicated repository.
When a package is created, a release hook is registered with GitHub for package
version creation.
Parameters:
- **repository** - String. The repository containing the plugin, in the form "owner/repo"
Returns:
- **201** - Successfully created, returns created package.
- **400** - Repository is inaccessible, nonexistent, not an atom package. Possible
error messages include:
- That repo does not exist, isn't an atom package, or atombot does not have access
- The package.json at owner/repo isn't valid
- **409** - A package by that name already exists
#### DELETE /api/packages/:package_name
Delete a package; requires authentication.
Returns:
- **204** - Success
- **400** - Repository is inaccessible
- **401** - Unauthorized
### Package Versions
#### GET /api/packages/:package_name/versions/:version_name
Returns `package.json` with `dist` key added for e.g. tarball download:
```json
{
"bugs": {
"url": "https://github.com/thedaniel/test-package/issues"
},
"dependencies": {
"async": "~0.2.6",
"pegjs": "~0.7.0",
"season": "~0.13.0"
},
"description": "Expand snippets matching the current prefix with `tab`.",
"dist": {
"tarball": "https://codeload.github.com/..."
},
"engines": {
"atom": "*"
},
"main": "./lib/snippets",
"name": "thedaniel-test-package",
"publishConfig": {
"registry": "https://...",
},
"repository": {
"type": "git",
"url": "https://github.com/thedaniel/test-package.git"
},
"version": "0.6.0"
}
```
### Creating a new package version
#### POST /api/packages/:package_name/versions
Creates a new package version from a git tag; requires authentication.
#### Parameters
- **tag** - A git tag for the version you'd like to create. It's important to note
that the version name will not be taken from the tag, but from the `version`
key in the `package.json` file at that ref. The authenticating user *must* have
access to the package repository.
#### Returns
- **201** - Successfully created. Returns created version.
- **400** - Git tag not found / Repository inaccessible
- **409** - Version exists
### Delete a version
#### DELETE /api/packages/:package_name/versions/:version_name
Deletes a package version; requires authentication.
Note that a version cannot be republished with a different tag if it is deleted.
If you need to delete the latest version of a package for e.g. security reasons,
you'll need to increment the version when republishing.
Returns 204 No Content
### Stars
#### GET /api/users/:login/stars
List a user's starred packages.
Return value is similar to **GET /api/packages**
#### GET /api/stars
List the authenticated user's starred packages; requires authentication.
Return value is similar to **GET /api/packages**
#### POST /api/packages/:name/star
Star a package; requires authentication.
Returns a package.
#### DELETE /api/packages/:name/star
Unstar a package; requires authentication.
Returns 204 No Content.
### Atom updates
#### GET /api/updates
Atom update feed, following the format expected by [Squirrel](https://github.com/Squirrel/).
Returns:
```
{
"name": "0.96.0",
"notes": "[HTML release notes]"
"pub_date": "2014-05-19T15:52:06.000Z",
"url": "https://www.atom.io/api/updates/download"
}
```
+22
Ver Arquivo
@@ -0,0 +1,22 @@
# FreeBSD
FreeBSD -RELEASE 64-bit is the recommended platform.
## Requirements
* FreeBSD
* `pkg install node`
* `pkg install npm`
* `pkg install libgnome-keyring`
* `npm config set python /usr/local/bin/python2 -g` to ensure that gyp uses Python 2
## Instructions
```sh
git clone https://github.com/atom/atom
cd atom
script/build # Creates application at $TMPDIR/atom-build/Atom
sudo script/grunt install # Installs command to /usr/local/bin/atom
```
## Troubleshooting
+66
Ver Arquivo
@@ -0,0 +1,66 @@
# Linux
Ubuntu LTS 12.04 64-bit is the recommended platform.
## Requirements
* OS with 64-bit or 32-bit architecture
* C++ toolchain
* on Ubuntu/Debian: `sudo apt-get install build-essential`
* on Fedora: `sudo yum --assumeyes install make gcc gcc-c++ glibc-devel`
* [node.js](http://nodejs.org/download/) v0.10.x
* [Ubuntu/Debian/Mint instructions](https://github.com/joyent/node/wiki/Installing-Node.js-via-package-manager#ubuntu-mint-elementary-os)
* [Fedora instructions](https://github.com/joyent/node/wiki/Installing-Node.js-via-package-manager#fedora)
* [npm](http://www.npmjs.org/) v1.4.x
* `npm` comes with node.js so no explicit installation is needed here.
* You can check `npm` 1.4 or above is installed by running `npm -v`.
* libgnome-keyring-dev
* on Ubuntu/Debian: `sudo apt-get install libgnome-keyring-dev`
* on Fedora: `sudo yum --assumeyes install libgnome-keyring-devel`
* on other distributions refer to the manual on how to install packages
* `npm config set python /usr/bin/python2 -g` to ensure that gyp uses Python 2
* This command may require `sudo` depending on how you have
[configured npm](https://github.com/joyent/node/wiki/Installing-Node.js-via-package-manager#ubuntu-mint-elementary-os).
* Git
* on Ubuntu/Debian: `sudo apt-get install git`
* on Fedora: `sudo yum install git-core`
## Instructions
```sh
git clone https://github.com/atom/atom
cd atom
script/build # Creates application at $TMPDIR/atom-build/Atom
sudo script/grunt install # Installs command to /usr/local/bin/atom
script/grunt mkdeb # Generates a .deb package at $TMPDIR/atom-build
```
## Troubleshooting
### Exception: "TypeError: Unable to watch path"
If you get following error with a big traceback right after Atom starts:
```
TypeError: Unable to watch path
```
you have to increase number of watched files by inotify. For testing if
this is the reason for this error you can issue
```sh
sudo sysctl fs.inotify.max_user_watches=32768
```
and restart Atom. If Atom now works fine, you can make this setting permanent:
```sh
echo 32768 > /proc/sys/fs/inotify/max_user_watches
```
See also https://github.com/atom/atom/issues/2082.
### 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.
+20
Ver Arquivo
@@ -0,0 +1,20 @@
# OS X
## Requirements
* OS X 10.8 or later
* [node.js](http://nodejs.org/download/) v0.10.x
* Command Line Tools for [Xcode](https://developer.apple.com/xcode/downloads/) (run `xcode-select --install` to install)
## Instructions
```sh
git clone https://github.com/atom/atom.git
cd atom
script/build # Creates application at /Applications/Atom.app
```
## Troubleshooting
### OSX build error reports in atom/atom
* Use [this search](https://github.com/atom/atom/search?q=label%3Abuild-error+label%3Aos-x&type=Issues) to get a list of reports about build errors on OSX.
+66
Ver Arquivo
@@ -0,0 +1,66 @@
# Windows
## Requirements
### On Windows 7
* [Visual C++ 2010 Express](http://www.visualstudio.com/en-us/downloads/download-visual-studio-vs#DownloadFamilies_4)
* [Visual Studio 2010 Service Pack 1](http://www.microsoft.com/en-us/download/details.aspx?id=23691)
* [node.js](http://nodejs.org/download/) v0.10.x
* For 64-bit builds of node and native modules you **must** have the
[Windows 7 64-bit SDK](http://www.microsoft.com/en-us/download/details.aspx?id=8279).
You may also need the [compiler update for the Windows SDK 7.1](http://www.microsoft.com/en-us/download/details.aspx?id=4422)
* [Python](http://www.python.org/download/) v2.7.
* The python.exe must be available at `%SystemDrive%\Python27\python.exe`.
If it is installed elsewhere, you can create a symbolic link to the
directory containing the python.exe using:
`mklink /d %SystemDrive%\Python27 D:\elsewhere\Python27`
* [GitHub for Windows](http://windows.github.com/)
### On Windows 8
* [Visual Studio Express 2013 for Windows Desktop](http://www.visualstudio.com/en-us/downloads/download-visual-studio-vs#DownloadFamilies_2)
* [node.js](http://nodejs.org/download/) v0.10.x
* [Python](http://www.python.org/download/) v2.7.x (required by [node-gyp](https://github.com/TooTallNate/node-gyp))
* [GitHub for Windows](http://windows.github.com/)
## Instructions
```bat
# Use the `Git Shell` app which was installed by GitHub for Windows. Also Make
# sure you have logged into the GitHub for Windows GUI App.
cd C:\
git clone https://github.com/atom/atom/
cd atom
script/build # Creates application in the `Program Files` directory
```
## Why do I have to use GitHub for Windows?
You don't, You can use your existing Git! GitHub for Windows's Git Shell is just
easier to set up. You need to have Posix tools in your `%PATH%` (i.e. `grep`,
`sed`, et al.), which isn't the default configuration when you install Git. To
fix this, you probably need to fiddle with your system PATH.
## Troubleshooting
### Common Errors
* `node is not recognized`
* If you just installed node you need to restart your computer before node is
available on your Path.
* `script/build` outputs only the Node and Python versions before returning
* Try moving the repository to `C:\atom`. Most likely, the path is too long.
See [issue #2200](https://github.com/atom/atom/issues/2200).
* `error MSB4025: The project file could not be loaded. Invalid character in the given encoding.`
* These can occur because your home directory (`%USERPROFILE%`) has non-ASCII
characters in it. This is a bug in [gyp](https://code.google.com/p/gyp/)
which is used to build native node modules and there is no known workaround.
* https://github.com/TooTallNate/node-gyp/issues/297
* https://code.google.com/p/gyp/issues/detail?id=393
### Windows build error reports in atom/atom
* Use [this search](https://github.com/atom/atom/search?q=label%3Abuild-error+label%3Awindows&type=Issues) to get a list of reports about build errors on Windows.
+52
Ver Arquivo
@@ -0,0 +1,52 @@
# Contributing to Official Atom Packages
If you think you know which package is causing the issue you are reporting, feel
free to open up the issue in that specific repository instead. When in doubt
just open the issue here but be aware that it may get closed here and reopened
in the proper package's repository.
## Hacking on Packages
### Cloning
The first step is creating your own clone. You can of course do this manually
with git, or you can use the `apm develop` command to create a clone based on
the package's `repository` field in the `package.json`.
For example, if you want to make changes to the `tree-view` package, run the
following command:
```
> apm develop tree-view
Cloning https://github.com/atom/tree-view ✓
Installing modules ✓
~/.atom/dev/packages/tree-view -> ~/github/tree-view
```
This clones the `tree-view` repository to `~/github`. If you prefer a different
path, specify it via the `ATOM_REPOS_HOME` environment variable.
### Running in Development Mode
Editing a package in Atom is a bit of a circular experience: you're using Atom
to modify itself. What happens if you temporarily break something? You don't
want the version of Atom you're using to edit to become useless in the process.
For this reason, you'll only want to load packages in **development mode** while
you are working on them. You'll perform your editing in **stable mode**, only
switching to development mode to test your changes.
To open a development mode window, use the "Application: Open Dev" command,
which is normally bound to `cmd-shift-o`. You can also run dev mode from the
command line with `atom --dev`.
To load your package in development mode, create a symlink to it in
`~/.atom/dev/packages`. This occurs automatically when you clone the package
with `apm develop`. You can also run `apm link --dev` and `apm unlink --dev`
from the package directory to create and remove dev-mode symlinks.
### Installing Dependencies
Finally, you need to install the cloned package's dependencies by running
`apm install` within the package directory. This step is also performed
automatically the first time you run `apm develop`, but you'll want to keep
dependencies up to date by running `apm update` after pulling upstream changes.
-142
Ver Arquivo
@@ -1,142 +0,0 @@
# Contributing to Atom Packages
The following is a set of guidelines for contributing to Atom packages, which
are hosted in the [Atom Organization](https://github.com/atom) on GitHub. If
you're unsure which package is causing your problem or if you're having an issue
with Atom core, please use the feedback form in the application or email
[atom@github.com](mailto:atom@github.com).
## Submitting Issues
* Include screenshots and animated GIFs whenever possible; they are immensely
helpful.
* Include the behavior you expected and other places you've seen that behavior
such as Emacs, vi, Xcode, etc.
* Check the dev tools (`alt-cmd-i`) for errors and stack traces to include.
* Check Console.app for stack traces to include if reporting a crash.
* Perform a cursory search to see if a similar issue has already been submitted.
## Hacking on Packages
### Cloning
The first step is creating your own clone. You can of course do this manually
with git, or you can use the `apm develop` command to create a clone based on
the package's `repository` field in the `package.json`.
For example, if you want to make changes to the `tree-view` package, run the
following command:
```
> apm develop tree-view
Cloning https://github.com/atom/tree-view ✓
Installing modules ✓
~/.atom/dev/packages/tree-view -> ~/github/tree-view
```
This clones the `tree-view` repository to `~/github`. If you prefer a different
path, specify it via the `ATOM_REPOS_HOME` environment variable.
### Running in Development Mode
Editing a package in Atom is a bit of a circular experience: you're using Atom
to modify itself. What happens if you temporarily break something? You don't
want the version of Atom you're using to edit to become useless in the process.
For this reason, you'll only want to load packages in **development mode** while
you are working on them. You'll perform your editing in **stable mode**, only
switching to development mode to test your changes.
To open a development mode window, use the "Application: Open Dev" command,
which is normally bound to `cmd-shift-o`. You can also run dev mode from the
command line with `atom --dev`.
To load your package in development mode, create a symlink to it in
`~/.atom/dev/packages`. This occurs automatically when you clone the package
with `apm develop`. You can also run `apm link --dev` and `apm unlink --dev`
from the package directory to create and remove dev-mode symlinks.
### Installing Dependencies
Finally, you need to install the cloned package's dependencies by running
`apm install` within the package directory. This step is also performed
automatically the first time you run `apm develop`, but you'll want to keep
dependencies up to date by running `apm update` after pulling upstream changes.
## Submitting Pull Requests
### Code Guidelines
* Include screenshots and animated GIFs in your pull request whenever possible.
* Follow the [CoffeeScript](#coffeescript-styleguide),
[JavaScript](https://github.com/styleguide/javascript),
and [CSS](https://github.com/styleguide/css) styleguides.
* Include thoughtfully-worded, well-structured
[Jasmine](http://pivotal.github.com/jasmine) specs.
* Document new code based on the
[Documentation Styleguide](#documentation-styleguide)
* End files with a newline.
* Place requires in the following order:
* Built in Node Modules (such as `path`)
* Built in Atom and Atom Shell Modules (such as `atom`, `shell`)
* Local Modules (using relative paths)
* Place class properties in the following order:
* Class methods and properties (methods starting with a `@`)
* Instance methods and properties
* Avoid platform-dependent code:
* Use `require('atom').fs.getHomeDirectory()` to get the home directory.
* Use `path.join()` to concatenate filenames.
* Use `os.tmpdir()` rather than `/tmp` when you need to reference the
temporary directory.
### Commit Message Guidelines
* Use the present tense ("Add feature" not "Added feature")
* Use the imperative mood ("Move cursor to..." not "Moves cursor to...")
* Limit the first line to 72 characters or less
* Reference issues and pull requests liberally
* Consider starting the commit message with an applicable emoji:
* :lipstick: when improving the format/structure of the code
* :racehorse: when improving performance
* :non-potable_water: when plugging memory leaks
* :memo: when writing docs
* :bulb: Check out the [Emoji Cheat Sheet](http://www.emoji-cheat-sheet.com)
for more ideas.
## CoffeeScript Styleguide
* Use parentheses if it improves code clarity.
* Prefer alphabetic keywords to symbolic keywords:
* `a is b` instead of `a == b`
* Avoid spaces inside the curly-braces of hash literals:
* `{a: 1, b: 2}` instead of `{ a: 1, b: 2 }`
* Set parameter defaults without spaces around the equal sign:
* `clear = (count=1) ->` instead of `clear = (count = 1) ->`
* Include a single line of whitespace between methods.
## Documentation Styleguide
* Use [TomDoc](http://tomdoc.org).
* Use [Markdown](https://daringfireball.net/projects/markdown).
* Reference methods and classes in markdown with the custom `{}` notation:
* Reference classes with `{ClassName}`
* Reference instance methods with `{ClassName::methodName}`
* Reference class methods with `{ClassName.methodName}`
### Example
```coffee
# Public: Disable the package with the given name.
#
# This method emits multiple events:
#
# * `package-will-be-disabled` - before the package is disabled.
# * `package-disabled` - after the package is disabled.
#
# name - The {String} name of the package to disable.
# options - The {Object} with disable options (default: {}):
# :trackTime - `true` to track the amount of time disabling took.
# :ignoreErrors - `true` to catch and ignore errors thrown.
# callback - The {Function} to call after the package has been disabled.
#
# Returns `undefined`.
disablePackage: (name, options, callback) ->
```
Link simbólico
+1
Ver Arquivo
@@ -0,0 +1 @@
../CONTRIBUTING.md
+2 -2
Ver Arquivo
@@ -20,7 +20,7 @@ apm help init
You should see a message print out with details about the `apm init` command.
If you do not, launch Atom and run the _Atom > Install Shell Commmands_ menu
If you do not, launch Atom and run the _Atom > Install Shell Commands_ menu
to install the `apm` and `atom` commands.
### Convert the Package
@@ -49,4 +49,4 @@ the editor to see it in action!
[plist]: http://en.wikipedia.org/wiki/Property_list
[R]: http://en.wikipedia.org/wiki/R_(programming_language)
[TextMate]: http://macromates.com
[TextMateOrg]: https://github.com/textmate/r.tmbundle
[TextMateOrg]: https://github.com/textmate
+1 -1
Ver Arquivo
@@ -25,7 +25,7 @@ apm help init
You should see a message print out with details about the `apm init` command.
If you do not, launch Atom and run the _Atom > Install Shell Commmands_ menu
If you do not, launch Atom and run the _Atom > Install Shell Commands_ menu
to install the `apm` and `atom` commands.
You can now run `apm help init` to see all the options for initializing new
+14
Ver Arquivo
@@ -225,6 +225,20 @@ elements until reaching the top of the DOM tree.
In the example above, the `Add file` item will only appear when the focused item
or one of its parents has the `tree-view` class applied to it.
You can also add separators and submenus to your context menus. To add a
submenu, pass in another object instead of a command. To add a separator, use
`-` for the name and command of the item.
```coffeescript
'context-menu':
'.workspace':
'Inspect Element': 'core:inspect'
'-': '-'
'Text':
'Select All': 'core:select-all'
'Deleted Selected Text': 'core:delete'
```
## Snippets
An extension can supply language snippets in the _snippets_ directory which
+1 -1
Ver Arquivo
@@ -34,7 +34,7 @@ apm help install
You should see a message print out with details about the `apm install` command.
If you do not, launch Atom and run the _Atom > Install Shell Commmands_ menu
If you do not, launch Atom and run the _Atom > Install Shell Commands_ menu
to install the `apm` and `atom` commands.
You can also install packages by using the `apm install` command:
+107
Ver Arquivo
@@ -0,0 +1,107 @@
# Debugging
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 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)
* [Check for errors in the developer tools](#check-for-errors-in-the-developer-tools)
## Update to the latest version
You might be running into an issue which was already fixed in a more recent version of Atom than the one you're using.
If you're building Atom from source, pull down the latest version of master and [re-build][building atom].
If you're using released version, check which version of Atom you're using:
```shell
$ atom --version
0.99.0
```
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 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.
Open Atom's Settings View with `cmd-,` or the Atom > Preferences menu option.
![Settings View]
Check Atom's settings in the Settings pane, there's a description of each configuration option [here][customizing guide]. For example, if you want Atom to use hard tabs (real tabs) and not soft tabs (spaces), disable the "Soft Tabs" option.
Since Atom ships with a set of packages and you can install additional packages yourself, check the list of packages and their settings. For example, if you'd like to get rid of the vertical line in the middle of the editor, disable the [Wrap Guide package]. And if you don't like it when Atom strips trailing whitespace or ensures that there's a single trailing newline in the file, you can configure that in the [Whitespace packages'][whitespace package] settings.
![Package Settings]
## Check the keybindings
If a command is not executing when you hit a keystroke or the wrong command is executing, there might be an issue with the keybindings for that keystroke. Atom ships with the [Keybinding resolver][keybinding resolver package], a neat package which helps you understand which keybindings are executed.
Show the keybinding resolver with <code>cmd-.</code> or with "Key Binding Resolver: Show" from the Command palette. With the keybinding resolver shown, hit a keystroke:
![Keybinding Resolver]
The keybinding resolver shows you a list of keybindings that exist for the keystroke, where each item in the list has the following:
* the command for the keybinding,
* the CSS selector used to define the context in which the keybinding is valid, and
* the file in which the keybinding is defined.
Of all the keybinding that are listed (grey color), at most one keybinding is matched and executed (green color). If the command you wanted to trigger isn't listed, then a keybinding for that command hasn't been defined. More keybindings are provided by [packages] and you can [define your own keybindings][customizing keybindings].
If multiple keybindings are matched, Atom determines which keybinding will be executed based on the [specificity of the selectors and the order in which they were loaded][specificity and order]. If the command you wanted to trigger is listed in the Keybinding resolver, but wasn't the one that was executed, this is normally explained by one of two causes:
* the keystroke was not used in the context defined by the keybinding's selector. For example, you can't trigger the "Tree View: Add File" command if the Tree View is not focused, or
* there is another keybinding that took precedence. This often happens when you install a package which defines keybinding that conflict with existing keybindings. If the package's keybindings have selectors with higher specificity or were loaded later, they'll have priority over existing ones.
Atom loads core Atom keybindings and package keybindings first, and user-defined keybindings after last. Since user-defined keybindings are loaded last, you can use your `keymap.cson` file to tweak the keybindings and sort out problems like these. For example, you can remove keybindings with [the `unset!` directive][unset directive].
If you notice that a package's keybindings are taking precedence over core Atom keybindings, it might be a good idea to report the issue on the package's GitHub repository.
## Check if the problem shows up in safe mode
A large part of Atom's functionality comes from packages you can install. In some cases, these packages might be causing unexpected behavior, problems, or performance issues.
To determine if a package you installed is causing problems, start Atom from the terminal in safe mode:
```
$ atom --safe
```
This starts Atom, but does not load packages from `~/.atom/packages` or `~/.atom/dev/packages`. If you can no longer reproduce the problem in safe mode, it's likely it was caused by one of the packages.
To figure out which package is causing trouble, start Atom normally again and open Settings (`cmd-,`). Since Settings allow you to disable each installed package, you can disable packages one by one until you can no longer reproduce the issue. Restart (`cmd-q`) or reload (`cmd-ctrl-alt-l`) Atom after you disable each package to make sure it's completely gone.
When you find the problematic package, you can disable or uninstall the package, and consider creating an issue on the package's GitHub repository.
## Check your config files
You might have defined some custom functionality or styles in Atom's [Init script or Stylesheet]. In some situations, these personal hacks might be causing problems so try clearing those files and restarting Atom.
## Check for errors in the developer tools
When an error is thrown in Atom, the developer tools are automatically shown with the error logged in the Console tab. However, if the dev tools are open before the error is triggered, a full stack trace for the error will be logged:
![devtools error]
If you can reproduce the error, use this approach to get the full stack trace. The stack trace might point to a problem in your [Init script][init script or stylesheet] or a specific package you installed, which you can then disable and report an issue on its GitHub repository.
[submitting issues]: https://github.com/atom/atom/blob/master/CONTRIBUTING.md#submitting-issues
[building atom]: https://github.com/atom/atom#building
[atom releases]: https://github.com/atom/atom/releases
[customizing guide]: https://atom.io/docs/latest/customizing-atom#configuration-key-reference
[settings view]: https://f.cloud.github.com/assets/671378/2241795/ba4827d8-9ce4-11e3-93a8-6666ee100917.png
[package settings]: https://cloud.githubusercontent.com/assets/38924/3173588/7e5f6b0c-ebe8-11e3-9ec3-e8d140967e79.png
[wrap guide package]: https://atom.io/packages/wrap-guide
[whitespace package]: https://atom.io/packages/whitespace
[keybinding resolver package]: https://atom.io/packages/keybinding-resolver
[keybinding resolver]: https://f.cloud.github.com/assets/671378/2241702/5dd5a102-9cde-11e3-9e3f-1d999930492f.png
[customizing keybindings]: https://atom.io/docs/latest/customizing-atom#customizing-key-bindings
[packages]: https://atom.io/packages
[specificity and order]: https://atom.io/docs/latest/advanced/keymaps#specificity-and-cascade-order
[unset directive]: https://atom.io/docs/latest/advanced/keymaps#removing-bindings
[init script or stylesheet]: https://atom.io/docs/latest/customizing-atom#quick-personal-hacks
[devtools error]: https://cloud.githubusercontent.com/assets/38924/3177710/11b4e510-ec13-11e3-96db-a2e8a7891773.png
+3
Ver Arquivo
@@ -5,13 +5,16 @@
* [Creating a Package](creating-a-package.md)
* [Creating a Theme](creating-a-theme.md)
* [Publishing a Package](publishing-a-package.md)
* [Writing Specs](writing-specs.md)
* [Converting a TextMate Bundle](converting-a-text-mate-bundle.md)
* [Converting a TextMate Theme](converting-a-text-mate-theme.md)
* [Contributing](contributing.md)
* [Debugging](debugging.md)
### Advanced Topics
* [Configuration](advanced/configuration.md)
* [Developing Node Modules](advanced/node-modules.md)
* [Keymaps](advanced/keymaps.md)
* [Serialization](advanced/serialization.md)
* [View System](advanced/view-system.md)
+24 -7
Ver Arquivo
@@ -7,7 +7,7 @@ Publishing a package allows other people to install it and use it in Atom. It
is a great way to share what you've made and get feedback and contributions from
others.
This guide assumes your package's name is `my-package` and but you should pick a
This guide assumes your package's name is `my-package` but you should pick a
better name.
### Install apm
@@ -24,7 +24,7 @@ apm help publish
You should see a message print out with details about the `apm publish` command.
If you do not, launch Atom and run the _Atom > Install Shell Commmands_ menu
If you do not, launch Atom and run the _Atom > Install Shell Commands_ menu
to install the `apm` and `atom` commands.
### Prepare Your Package
@@ -42,7 +42,7 @@ If not, there are a few things you should check before publishing:
* Your package is in a Git repository that has been pushed to
[GitHub][github]. Follow [this guide][repo-guide] if your package isn't
already on GitHub.
### Publish Your Package
Before you publish a package it is a good idea to check ahead of time if
@@ -59,7 +59,7 @@ Now let's review what the `apm publish` command does:
3. Creates a new [Git tag][git-tag] for the version being published.
4. Pushes the tag and current branch up to GitHub.
5. Updates atom.io with the new version being published.
Now run the following commands to publish your package:
```sh
@@ -75,18 +75,34 @@ credentials are stored securely in your [keychain][keychain] once you login.
:tada: Your package is now published and available on atom.io. Head on over to
`http://atom.io/packages/my-package` to see your package's page.
With `apm publish`, you can bump the version and publish by using
```sh
apm publish <version-type>
```
where `<version-type>` can be `major`, `minor` and `patch`.
The `major` option to the publish command tells apm to increment the first
digit of the version before publishing so the published version will be `1.0.0`
and the Git tag created will be `v1.0.0`.
The `minor` option to the publish command tells apm to increment the second
digit of the version before publishing so the published version will be `0.1.0`
and the Git tag created will be `v0.1.0`.
In the future you can run `apm publish major` to publish the `1.0.0` version but
since this was the first version being published it is a good idead to start
with a minor release.
The `patch` option to the publish command tells apm to increment the third
digit of the version before publishing so the published version will be `0.0.1`
and the Git tag created will be `v0.0.1`.
Use `major` when you make a huge change, like a rewrite, or a large change to the functionality or interface.
Use `minor` when adding or removing a feature.
Use `patch` when you make a small change like a bug fix that does not add or remove features.
### Further Reading
* Check out [semantic versioning][semver] to learn more about versioning your
package releases.
* Consult the [Atom.io package API docs][apm-rest-api] to learn more about how
`apm` works.
[atomio]: https://atom.io
[github]: https://github.com
@@ -95,3 +111,4 @@ with a minor release.
[repo-guide]: http://guides.github.com/overviews/desktop
[semver]: http://semver.org
[your-first-package]: your-first-package.html
[apm-rest-api]: apm-rest-api.md
+61
Ver Arquivo
@@ -0,0 +1,61 @@
# Writing specs
Atom uses [Jasmine](http://jasmine.github.io/2.0/introduction.html) as its spec framework. Any new functionality should have specs to guard against regressions.
## Create a new spec
[Atom specs](https://github.com/atom/atom/tree/master/spec) and [package specs](https://github.com/atom/markdown-preview/tree/master/spec) are added to their respective `spec` directory. The example below creates a spec for Atom core.
0. Create a spec file
Spec files **must** end with `-spec` so add `sample-spec.coffee` to `atom/spec`.
0. Add one or more `describe` methods
The `describe` method takes two arguments, a description and a function. If the description explains a behavior it typically begins with `when` if it is more like a unit test it begins with the method name.
```coffee
describe "when a test is written", ->
# contents
```
or
```coffee
describe "Editor::moveUp", ->
# contents
```
0. Add one or more `it` method
The `it` method also takes two arguments, a description and a function. Try and make the description flow with the `it` method. For example, a description of `this should work` doesn't read well as `it this should work`. But a description of `should work` sounds great as `it should work`.
```coffee
describe "when a test is written", ->
it "has some expectations that should pass", ->
# Expectations
```
0. Add one or more expectations
The best way to learn about expectations is to read the [jasmine documentation](http://jasmine.github.io/2.0/introduction.html#section-Expectations) about them. Below is a simple example.
```coffee
describe "when a test is written", ->
it "has some expectations that should pass", ->
expect("apples").toEqual("apples")
expect("oranges").not.toEqual("apples")
```
## Running specs
Most of the time you'll want to run specs by triggering the `window:run-package-specs` command. This command is not only to run package specs, it is also for Atom core specs. This will run all the specs in the current project's spec directory. If you want to run the Atom core specs and **all** the default package specs trigger the `window:run-all-specs` command.
To run a limited subset of specs use the `fdescribe` or `fit` methods. You can use those to focus a single spec or several specs. In the example above, focusing an individual spec looks like this:
```coffee
describe "when a test is written", ->
fit "has some expectations that should pass", ->
expect("apples").toEqual("apples")
expect("oranges").not.toEqual("apples")
```
+4 -2
Ver Arquivo
@@ -21,7 +21,7 @@ To begin, press `cmd-shift-P` to bring up the [Command
Palette](https://github.com/atom/command-palette). Type "generate package" and
select the "Package Generator: Generate Package" command. Now we need to name
the package. Try to avoid naming your package with the *atom-* prefix, for
example we are going to call this package _ascii-art_.
example we are going to call this package _ascii-art_.
Atom will open a new window with the contents of our new _ascii-art_ package
displayed in the Tree View. Because this window is opened **after** the package
@@ -149,8 +149,10 @@ ASCII art professional!
* [Getting your project on GitHub guide](http://guides.github.com/overviews/desktop)
* [Writing specs](writing-specs.md) for your package
* [Creating a package guide](creating-a-package.html) for more information
on the mechanics of packages
* [Publishing a package guide](publish-a-package.html) for more information
* [Publishing a package guide](publishing-a-package.html) for more information
on publishing your package to [atom.io](https://atom.io)
+5
Ver Arquivo
@@ -0,0 +1,5 @@
storage
compile-cache
dev
.npm
.node-gyp
+2 -4
Ver Arquivo
@@ -1,9 +1,5 @@
'.editor':
# Platform Bindings
'alt-left': 'editor:move-to-beginning-of-word'
'alt-right': 'editor:move-to-end-of-word'
'alt-shift-left': 'editor:select-to-beginning-of-word'
'alt-shift-right': 'editor:select-to-end-of-word'
'home': 'editor:move-to-first-character-of-line'
'end': 'editor:move-to-end-of-screen-line'
'shift-home': 'editor:select-to-first-character-of-line'
@@ -16,6 +12,7 @@
# Sublime Parity
'tab': 'editor:indent'
'enter': 'editor:newline'
'num-enter': 'editor:newline'
'shift-tab': 'editor:outdent-selected-rows'
'ctrl-K': 'editor:delete-line'
@@ -30,6 +27,7 @@
'tab': 'core:focus-next'
'shift-tab': 'core:focus-previous'
'enter': 'native!'
'num-enter': 'native!'
'backspace': 'native!'
'shift-backspace': 'native!'
'delete': 'native!'
+16 -4
Ver Arquivo
@@ -21,6 +21,7 @@
'cmd-O': 'application:open-dev'
'cmd-alt-ctrl-s': 'application:run-all-specs'
'enter': 'core:confirm'
'num-enter': 'core:confirm'
'escape': 'core:cancel'
'up': 'core:move-up'
'down': 'core:move-down'
@@ -52,7 +53,10 @@
'shift-down': 'core:select-down'
'shift-left': 'core:select-left'
'shift-right': 'core:select-right'
'shift-pageup': 'core:select-page-up'
'shift-pagedown': 'core:select-page-down'
'delete': 'core:delete'
'shift-delete': 'core:delete'
'pageup': 'core:page-up'
'pagedown': 'core:page-down'
'backspace': 'core:backspace'
@@ -65,6 +69,8 @@
'cmd-}': 'pane:show-next-item'
'cmd-alt-left': 'pane:show-previous-item'
'cmd-alt-right': 'pane:show-next-item'
'ctrl-tab': 'pane:show-next-item'
'ctrl-shift-tab': 'pane:show-previous-item'
'cmd-=': 'window:increase-font-size'
'cmd-+': 'window:increase-font-size'
'cmd--': 'window:decrease-font-size'
@@ -94,17 +100,23 @@
'cmd-9': 'pane:show-item-9'
'.editor':
# Platform Bindings
'alt-left': 'editor:move-to-beginning-of-word'
'alt-right': 'editor:move-to-end-of-word'
'alt-shift-left': 'editor:select-to-beginning-of-word'
'alt-shift-right': 'editor:select-to-end-of-word'
# Apple Specific
'cmd-backspace': 'editor:backspace-to-beginning-of-line'
'cmd-shift-backspace': 'editor:backspace-to-beginning-of-line'
'cmd-delete': 'editor:backspace-to-beginning-of-line'
'cmd-backspace': 'editor:delete-to-beginning-of-line'
'cmd-shift-backspace': 'editor:delete-to-beginning-of-line'
'cmd-delete': 'editor:delete-to-beginning-of-line'
'ctrl-A': 'editor:select-to-first-character-of-line'
'ctrl-E': 'editor:select-to-end-of-line'
'cmd-left': 'editor:move-to-first-character-of-line'
'cmd-right': 'editor:move-to-end-of-screen-line'
'cmd-shift-left': 'editor:select-to-first-character-of-line'
'cmd-shift-right': 'editor:select-to-end-of-line'
'alt-backspace': 'editor:backspace-to-beginning-of-word'
'alt-backspace': 'editor:delete-to-beginning-of-word'
'alt-delete': 'editor:delete-to-end-of-word'
'ctrl-a': 'editor:move-to-beginning-of-line'
'ctrl-e': 'editor:move-to-end-of-line'
+1 -1
Ver Arquivo
@@ -3,5 +3,5 @@
'alt-F': 'editor:select-to-end-of-word'
'alt-b': 'editor:move-to-beginning-of-word'
'alt-B': 'editor:select-to-beginning-of-word'
'alt-h': 'editor:backspace-to-beginning-of-word'
'alt-h': 'editor:delete-to-beginning-of-word'
'alt-d': 'editor:delete-to-end-of-word'
+29 -4
Ver Arquivo
@@ -1,13 +1,14 @@
'body':
# Atom Specific
'enter': 'core:confirm'
'num-enter': 'core:confirm'
'escape': 'core:cancel'
'up': 'core:move-up'
'down': 'core:move-down'
'left': 'core:move-left'
'right': 'core:move-right'
'ctrl-alt-r': 'window:reload'
'ctrl-alt-i': 'window:toggle-dev-tools'
'ctrl-shift-i': 'window:toggle-dev-tools'
'ctrl-alt-p': 'window:run-package-specs'
'ctrl-alt-s': 'application:run-all-specs'
'ctrl-shift-o': 'application:open-dev'
@@ -28,14 +29,20 @@
'ctrl-x': 'core:cut'
'ctrl-c': 'core:copy'
'ctrl-v': 'core:paste'
'ctrl-insert': 'core:copy'
'shift-insert': 'core:paste'
'shift-up': 'core:select-up'
'shift-down': 'core:select-down'
'shift-left': 'core:select-left'
'shift-right': 'core:select-right'
'shift-pageup': 'core:select-page-up'
'shift-pagedown': 'core:select-page-down'
'delete': 'core:delete'
'shift-delete': 'core:delete'
'pageup': 'core:page-up'
'pagedown': 'core:page-down'
'backspace': 'core:backspace'
'shift-backspace': 'core:backspace'
'ctrl-tab': 'pane:show-next-item'
'ctrl-shift-tab': 'pane:show-previous-item'
'ctrl-shift-up': 'core:move-up'
@@ -58,14 +65,32 @@
'ctrl-k ctrl-down': 'window:focus-pane-below'
'ctrl-k ctrl-left': 'window:focus-pane-on-left'
'ctrl-k ctrl-right': 'window:focus-pane-on-right'
'alt-1': 'pane:show-item-1'
'alt-2': 'pane:show-item-2'
'alt-3': 'pane:show-item-3'
'alt-4': 'pane:show-item-4'
'alt-5': 'pane:show-item-5'
'alt-6': 'pane:show-item-6'
'alt-7': 'pane:show-item-7'
'alt-8': 'pane:show-item-8'
'alt-9': 'pane:show-item-9'
'.workspace .editor':
# Windows specific
'ctrl-delete': 'editor:backspace-to-beginning-of-word'
# Platform Bindings
'ctrl-left': 'editor:move-to-beginning-of-word'
'ctrl-right': 'editor:move-to-end-of-word'
'ctrl-shift-left': 'editor:select-to-beginning-of-word'
'ctrl-shift-right': 'editor:select-to-end-of-word'
'ctrl-backspace': 'editor:delete-to-beginning-of-word'
'ctrl-delete': 'editor:delete-to-end-of-word'
'ctrl-home': 'core:move-to-top'
'ctrl-end': 'core:move-to-bottom'
'ctrl-shift-home': 'core:select-to-top'
'ctrl-shift-end': 'core:select-to-bottom'
# Sublime Parity
'ctrl-a': 'core:select-all'
'ctrl-alt-p': 'editor:log-cursor-scope'
'ctrl-alt-shift-p': 'editor:log-cursor-scope'
'ctrl-k ctrl-u': 'editor:upper-case'
'ctrl-k ctrl-l': 'editor:lower-case'
+24 -3
Ver Arquivo
@@ -1,6 +1,11 @@
'body':
# Platform Bindings
'ctrl-pageup': 'pane:show-previous-item'
'ctrl-pagedown': 'pane:show-next-item'
# Atom Specific
'enter': 'core:confirm'
'num-enter': 'core:confirm'
'escape': 'core:cancel'
'up': 'core:move-up'
'down': 'core:move-down'
@@ -10,6 +15,7 @@
'ctrl-alt-i': 'window:toggle-dev-tools'
'ctrl-alt-p': 'window:run-package-specs'
'ctrl-alt-s': 'application:run-all-specs'
'F11': 'window:toggle-full-screen'
# Sublime Parity
'ctrl-N': 'application:new-window'
@@ -25,18 +31,26 @@
'ctrl-x': 'core:cut'
'ctrl-c': 'core:copy'
'ctrl-v': 'core:paste'
'ctrl-insert': 'core:copy'
'shift-insert': 'core:paste'
'shift-up': 'core:select-up'
'shift-down': 'core:select-down'
'shift-left': 'core:select-left'
'shift-right': 'core:select-right'
'shift-pageup': 'core:select-page-up'
'shift-pagedown': 'core:select-page-down'
'delete': 'core:delete'
'shift-delete': 'core:delete'
'pageup': 'core:page-up'
'pagedown': 'core:page-down'
'backspace': 'core:backspace'
'shift-backspace': 'core:backspace'
'ctrl-tab': 'pane:show-next-item'
'ctrl-shift-tab': 'pane:show-previous-item'
'ctrl-shift-up': 'core:move-up'
'ctrl-shift-down': 'core:move-down'
'ctrl-alt-up': 'editor:add-selection-above'
'ctrl-alt-down': 'editor:add-selection-below'
'ctrl-=': 'window:increase-font-size'
'ctrl-+': 'window:increase-font-size'
'ctrl--': 'window:decrease-font-size'
@@ -57,12 +71,19 @@
'ctrl-k ctrl-right': 'window:focus-pane-on-right'
'.workspace .editor':
# Windows specific
'ctrl-delete': 'editor:backspace-to-beginning-of-word'
# Platform Bindings
'ctrl-left': 'editor:move-to-beginning-of-word'
'ctrl-right': 'editor:move-to-end-of-word'
'ctrl-shift-left': 'editor:select-to-beginning-of-word'
'ctrl-shift-right': 'editor:select-to-end-of-word'
'ctrl-backspace': 'editor:delete-to-beginning-of-word'
'ctrl-delete': 'editor:delete-to-end-of-word'
'ctrl-home': 'core:move-to-top'
'ctrl-end': 'core:move-to-bottom'
# Sublime Parity
'ctrl-a': 'core:select-all'
'ctrl-alt-p': 'editor:log-cursor-scope'
'ctrl-alt-shift-p': 'editor:log-cursor-scope'
'ctrl-k ctrl-u': 'editor:upper-case'
'ctrl-k ctrl-l': 'editor:lower-case'
+21
Ver Arquivo
@@ -109,6 +109,7 @@
submenu: [
{ label: 'Add Selection Above', command: 'editor:add-selection-above' }
{ label: 'Add Selection Below', command: 'editor:add-selection-below' }
{ label: 'Single Selection', command: 'editor:consolidate-selections'}
{ label: 'Split into Lines', command: 'editor:split-selections-into-lines'}
{ type: 'separator' }
{ label: 'Select to Top', command: 'core:select-to-top' }
@@ -134,6 +135,25 @@
submenu: [
{ label: 'Reload', command: 'window:reload' }
{ label: 'Toggle Full Screen', command: 'window:toggle-full-screen' }
{
label: 'Panes'
submenu: [
{ label: 'Split Up', command: 'pane:split-up' }
{ label: 'Split Down', command: 'pane:split-down' }
{ label: 'Split Left', command: 'pane:split-left' }
{ label: 'Split Right', command: 'pane:split-right' }
{ type: 'separator' }
{ label: 'Focus Next Pane', command: 'window:focus-next-pane' }
{ label: 'Focus Previous Pane', command: 'window:focus-previous-pane' }
{ type: 'separator' }
{ label: 'Focus Pane Above', command: 'window:focus-pane-above' }
{ label: 'Focus Pane Below', command: 'window:focus-pane-below' }
{ label: 'Focus Pane On Left', command: 'window:focus-pane-on-left' }
{ label: 'Focus Pane On Right', command: 'window:focus-pane-on-right' }
{ type: 'separator' }
{ label: 'Close Pane', command: 'pane:close' }
]
}
{
label: 'Developer'
submenu: [
@@ -166,6 +186,7 @@
{
label: 'Help'
submenu: [
{ label: 'Terms of Use', command: 'application:open-terms-of-use' }
{ label: 'Documentation', command: 'application:open-documentation' }
{ type: 'separator' }
]
+2
Ver Arquivo
@@ -108,6 +108,7 @@
{ label: 'Add Selection &Above', command: 'editor:add-selection-above' }
{ label: 'Add Selection &Below', command: 'editor:add-selection-below' }
{ label: 'S&plit into Lines', command: 'editor:split-selections-into-lines'}
{ label: 'Single Selection', command: 'editor:consolidate-selections'}
{ type: 'separator' }
{ label: 'Select to &Top', command: 'core:select-to-top' }
{ label: 'Select to Botto&m', command: 'core:select-to-bottom' }
@@ -145,6 +146,7 @@
{
label: '&Help'
submenu: [
{ label: 'View &Terms of Use', command: 'application:open-terms-of-use' }
{ label: 'View &License', command: 'application:open-license' }
{ label: "VERSION", enabled: false }
{ type: 'separator' }
+22 -3
Ver Arquivo
@@ -8,7 +8,7 @@
{ label: 'Open Folder...', command: 'application:open-folder' }
{ label: 'Reopen Last &Item', command: 'pane:reopen-closed-item' }
{ type: 'separator' }
{ label: '&Preferences...', command: 'application:show-settings' }
{ label: 'Se&ttings', command: 'application:show-settings' }
{ type: 'separator' }
{ label: '&Save', command: 'core:save' }
{ label: 'Save &As...', command: 'core:save-as' }
@@ -88,6 +88,25 @@
submenu: [
{ label: '&Reload', command: 'window:reload' }
{ label: 'Toggle &Full Screen', command: 'window:toggle-full-screen' }
{
label: 'Panes'
submenu: [
{ label: 'Split Up', command: 'pane:split-up' }
{ label: 'Split Down', command: 'pane:split-down' }
{ label: 'Split Left', command: 'pane:split-left' }
{ label: 'Split Right', command: 'pane:split-right' }
{ type: 'separator' }
{ label: 'Focus Next Pane', command: 'window:focus-next-pane' }
{ label: 'Focus Previous Pane', command: 'window:focus-previous-pane' }
{ type: 'separator' }
{ label: 'Focus Pane Above', command: 'window:focus-pane-above' }
{ label: 'Focus Pane Below', command: 'window:focus-pane-below' }
{ label: 'Focus Pane On Left', command: 'window:focus-pane-on-left' }
{ label: 'Focus Pane On Right', command: 'window:focus-pane-on-right' }
{ type: 'separator' }
{ label: 'Close pane', command: 'pane:close' }
]
}
{
label: 'Developer'
submenu: [
@@ -108,6 +127,7 @@
{ label: 'Add Selection &Above', command: 'editor:add-selection-above' }
{ label: 'Add Selection &Below', command: 'editor:add-selection-below' }
{ label: 'S&plit into Lines', command: 'editor:split-selections-into-lines'}
{ label: 'Single Selection', command: 'editor:consolidate-selections'}
{ type: 'separator' }
{ label: 'Select to &Top', command: 'core:select-to-top' }
{ label: 'Select to Botto&m', command: 'core:select-to-bottom' }
@@ -145,10 +165,9 @@
{
label: '&Help'
submenu: [
{ label: '&About Atom...', command: 'application:about' }
{ label: 'View &Terms of Use', command: 'application:open-terms-of-use' }
{ label: 'View &License', command: 'application:open-license' }
{ label: "VERSION", enabled: false }
{ label: "Install &update", command: 'application:install-update', visible: false }
{ type: 'separator' }
{ label: '&Documentation', command: 'application:open-documentation' }
{ type: 'separator' }
+90 -82
Ver Arquivo
@@ -1,7 +1,7 @@
{
"name": "atom",
"productName": "Atom",
"version": "0.86.0",
"version": "0.106.0",
"description": "A hackable text editor for the 21st Century.",
"main": "./src/browser/main.js",
"repository": {
@@ -11,123 +11,131 @@
"bugs": {
"url": "https://github.com/atom/atom/issues"
},
"license": "All Rights Reserved",
"atomShellVersion": "0.11.10",
"licenses": [
{
"type": "MIT",
"url": "http://github.com/atom/atom/raw/master/LICENSE.md"
}
],
"atomShellVersion": "0.13.2",
"dependencies": {
"async": "0.2.6",
"atom-keymap": "^0.17.0",
"bootstrap": "git://github.com/atom/bootstrap.git#6af81906189f1747fd6c93479e3d998ebe041372",
"atom-keymap": "^0.27.0",
"bootstrap": "git+https://github.com/atom/bootstrap.git#6af81906189f1747fd6c93479e3d998ebe041372",
"clear-cut": "0.4.0",
"coffee-script": "1.7.0",
"coffeestack": "0.7.0",
"delegato": "1.x",
"delegato": "^1",
"emissary": "^1.2.1",
"first-mate": "^1.5.1",
"fs-plus": "^2.2.1",
"first-mate": "^1.7",
"fs-plus": "^2.2.3",
"fstream": "0.1.24",
"fuzzaldrin": "~1.1",
"git-utils": "^1.2.2",
"grim": "0.6.0",
"fuzzaldrin": "^1.1",
"git-utils": "^1.3",
"grim": "0.11.0",
"guid": "0.0.10",
"jasmine-tagged": "^1.1.1",
"jasmine-tagged": "^1.1.2",
"less-cache": "0.12.0",
"mixto": "1.x",
"mixto": "^1",
"mkdirp": "0.3.5",
"nslog": "0.5.0",
"oniguruma": "^1.0.6",
"optimist": "0.4.0",
"pathwatcher": "^1.1.1",
"property-accessors": "1.x",
"pathwatcher": "^1.3.2",
"property-accessors": "^1",
"q": "^1.0.1",
"random-words": "0.0.1",
"runas": "0.5.x",
"scandal": "0.15.2",
"scoped-property-store": "^0.8.0",
"scrollbar-style": "^0.1.0",
"react-atom-fork": "^0.10.0",
"reactionary-atom-fork": "^0.9.0",
"runas": "^0.5",
"scandal": "0.15.3",
"scoped-property-store": "^0.9.0",
"scrollbar-style": "^0.4.0",
"season": "^1.0.2",
"semver": "1.1.4",
"serializable": "1.x",
"space-pen": "3.1.1",
"temp": "0.5.0",
"text-buffer": "^2.0.1",
"theorist": "1.x",
"underscore-plus": "^1.1.2",
"serializable": "^1",
"space-pen": "3.2.0",
"temp": "0.7.0",
"text-buffer": "^2.4.2",
"theorist": "^1",
"underscore-plus": "^1.5.0",
"vm-compatibility-layer": "0.1.0"
},
"packageDependencies": {
"atom-dark-syntax": "0.15.0",
"atom-dark-ui": "0.26.0",
"atom-light-syntax": "0.16.0",
"atom-light-ui": "0.24.0",
"base16-tomorrow-dark-theme": "0.13.0",
"solarized-dark-syntax": "0.14.0",
"solarized-light-syntax": "0.7.0",
"archive-view": "0.30.0",
"autocomplete": "0.27.0",
"autoflow": "0.16.0",
"autosave": "0.13.0",
"background-tips": "0.10.0",
"bookmarks": "0.22.0",
"bracket-matcher": "0.30.0",
"command-palette": "0.20.0",
"dev-live-reload": "0.30.0",
"exception-reporting": "0.17.0",
"feedback": "0.30.0",
"find-and-replace": "0.97.0",
"fuzzy-finder": "0.49.0",
"git-diff": "0.28.0",
"go-to-line": "0.19.0",
"grammar-selector": "0.24.0",
"image-view": "0.32.0",
"keybinding-resolver": "0.17.0",
"link": "0.22.0",
"markdown-preview": "0.62.0",
"atom-dark-syntax": "0.17.0",
"atom-dark-ui": "0.29.0",
"atom-light-syntax": "0.18.0",
"atom-light-ui": "0.25.0",
"base16-tomorrow-dark-theme": "0.17.0",
"solarized-dark-syntax": "0.18.0",
"solarized-light-syntax": "0.9.0",
"archive-view": "0.33.0",
"autocomplete": "0.28.0",
"autoflow": "0.17.0",
"autosave": "0.14.0",
"background-tips": "0.14.0",
"bookmarks": "0.25.0",
"bracket-matcher": "0.47.0",
"command-palette": "0.23.0",
"deprecation-cop": "0.7.0",
"dev-live-reload": "0.31.0",
"exception-reporting": "0.18.0",
"feedback": "0.33.0",
"find-and-replace": "0.120.0",
"fuzzy-finder": "0.55.0",
"git-diff": "0.34.0",
"go-to-line": "0.23.0",
"grammar-selector": "0.27.0",
"image-view": "0.35.0",
"keybinding-resolver": "0.18.0",
"link": "0.24.0",
"markdown-preview": "0.82.0",
"metrics": "0.32.0",
"open-on-github": "0.28.0",
"package-generator": "0.30.0",
"release-notes": "0.26.0",
"settings-view": "0.107.0",
"snippets": "0.40.0",
"spell-check": "0.33.0",
"status-bar": "0.39.0",
"styleguide": "0.28.0",
"symbols-view": "0.49.0",
"tabs": "0.34.0",
"timecop": "0.17.0",
"tree-view": "0.89.0",
"package-generator": "0.31.0",
"release-notes": "0.32.0",
"settings-view": "0.128.0",
"snippets": "0.46.0",
"spell-check": "0.38.0",
"status-bar": "0.41.0",
"styleguide": "0.29.0",
"symbols-view": "0.56.0",
"tabs": "0.42.0",
"timecop": "0.19.0",
"tree-view": "0.104.0",
"update-package-dependencies": "0.6.0",
"welcome": "0.12.0",
"welcome": "0.16.0",
"whitespace": "0.22.0",
"wrap-guide": "0.18.0",
"language-c": "0.14.0",
"wrap-guide": "0.19.0",
"language-c": "0.21.0",
"language-coffee-script": "0.22.0",
"language-css": "0.13.0",
"language-gfm": "0.31.0",
"language-css": "0.17.0",
"language-gfm": "0.40.0",
"language-git": "0.9.0",
"language-go": "0.8.0",
"language-html": "0.19.0",
"language-hyperlink": "0.9.0",
"language-java": "0.9.0",
"language-javascript": "0.22.0",
"language-go": "0.12.0",
"language-html": "0.22.0",
"language-hyperlink": "0.10.0",
"language-java": "0.10.0",
"language-javascript": "0.28.0",
"language-json": "0.8.0",
"language-less": "0.6.0",
"language-less": "0.9.0",
"language-make": "0.10.0",
"language-objective-c": "0.11.0",
"language-perl": "0.8.0",
"language-php": "0.14.0",
"language-perl": "0.9.0",
"language-php": "0.15.0",
"language-property-list": "0.7.0",
"language-python": "0.15.0",
"language-ruby": "0.22.0",
"language-ruby-on-rails": "0.12.0",
"language-sass": "0.8.0",
"language-python": "0.18.0",
"language-ruby": "0.30.0",
"language-ruby-on-rails": "0.14.0",
"language-sass": "0.13.0",
"language-shellscript": "0.8.0",
"language-source": "0.7.0",
"language-sql": "0.8.0",
"language-text": "0.6.0",
"language-todo": "0.10.0",
"language-toml": "0.12.0",
"language-xml": "0.11.0",
"language-yaml": "0.6.0"
"language-xml": "0.15.0",
"language-yaml": "0.7.0"
},
"private": true,
"scripts": {
Arquivo binário não exibido.

Antes

Largura:  |  Altura:  |  Tamanho: 191 KiB

Depois

Largura:  |  Altura:  |  Tamanho: 284 KiB

+2 -2
Ver Arquivo
@@ -1,8 +1,8 @@
[Desktop Entry]
Name=Atom
Comment=<%= description %>
Exec=/usr/share/atom/atom %U
Icon=atom
Exec=<%= installDir %>/share/atom/atom %U
Icon=<%= iconName %>
Type=Application
StartupNotify=true
Categories=GNOME;GTK;Utility;TextEditor;
Diferenças do arquivo suprimidas por serem muito extensas Carregar Diff
Arquivo binário não exibido.
Arquivo binário não exibido.
Arquivo binário não exibido.

Antes

Largura:  |  Altura:  |  Tamanho: 361 KiB

Depois

Largura:  |  Altura:  |  Tamanho: 141 KiB

Arquivo binário não exibido.
Arquivo binário não exibido.
+38 -33
Ver Arquivo
@@ -1,13 +1,8 @@
#!/usr/bin/env node
var nodeMinorVersion = process.versions.node.split('.')[1]
if (nodeMinorVersion !== '10') {
console.warn("You must run script/bootstrap and script/build with node v0.10.x");
process.exit(1);
}
var safeExec = require('./utils/child-process-wrapper.js').safeExec;
var fs = require('fs');
var verifyRequirements = require('./utils/verify-requirements');
var safeExec = require('./utils/child-process-wrapper.js').safeExec;
var path = require('path');
// Executes an array of commands one by one.
@@ -15,43 +10,53 @@ function executeCommands(commands, done, index) {
index = (index == undefined ? 0 : index);
if (index < commands.length) {
var command = commands[index];
if (command.message)
console.log(command.message);
var options = null;
if (typeof command !== 'string') {
options = command.options;
command = command.command;
}
safeExec(command, options, executeCommands.bind(this, commands, done, index + 1));
} else
}
else
done(null);
}
var apmVendorPath = path.resolve(__dirname, '..', 'vendor', 'apm');
var apmInstallPath = path.resolve(__dirname, '..', 'apm');
if (!fs.existsSync(apmInstallPath))
fs.mkdirSync(apmInstallPath);
if (!fs.existsSync(path.join(apmInstallPath, 'node_modules')))
fs.mkdirSync(path.join(apmInstallPath, 'node_modules'));
function bootstrap() {
var apmInstallPath = path.resolve(__dirname, '..', 'apm');
if (!fs.existsSync(apmInstallPath))
fs.mkdirSync(apmInstallPath);
if (!fs.existsSync(path.join(apmInstallPath, 'node_modules')))
fs.mkdirSync(path.join(apmInstallPath, 'node_modules'));
var apmPath = 'apm/node_modules/atom-package-manager/bin/apm'
var apmFlags = process.env.JANKY_SHA1 || process.argv.indexOf('--no-color') !== -1 ? '--no-color' : '';
var apmPath = path.resolve(__dirname, '..', 'apm', 'node_modules', 'atom-package-manager', 'bin', 'apm')
var apmFlags = process.env.JANKY_SHA1 || process.argv.indexOf('--no-color') !== -1 ? '--no-color' : '';
var npmPath = path.resolve(__dirname, '..', 'build', 'node_modules', '.bin', 'npm');
var npmFlags = ' --userconfig=' + path.resolve('.npmrc') + ' ';
var npmPath = path.resolve(__dirname, '..', 'build', 'node_modules', '.bin', 'npm');
var initialNpmCommand = fs.existsSync(npmPath) ? npmPath : 'npm';
var npmFlags = ' --userconfig=' + path.resolve('.npmrc') + ' ';
var packagesToDedupe = ['fs-plus', 'humanize-plus', 'oniguruma', 'roaster', 'season'];
var echoNewLine = process.platform == 'win32' ? 'echo.' : 'echo';
var packagesToDedupe = ['fs-plus', 'humanize-plus', 'oniguruma', 'roaster', 'season', 'grim'];
var commands = [
'git submodule --quiet sync',
'git submodule --quiet update --recursive --init',
{command: 'npm' + npmFlags + 'install --quiet', options: {cwd: path.resolve(__dirname, '..', 'build'), ignoreStdout: true}},
{command: npmPath + npmFlags + 'install --quiet', options: {cwd: apmVendorPath, ignoreStdout: true}},
{command: npmPath + npmFlags + 'install --quiet ' + apmVendorPath, options: {cwd: apmInstallPath, ignoreStdout: true}},
echoNewLine,
apmPath + ' clean ' + apmFlags,
apmPath + ' install --quiet ' + apmFlags,
apmPath + ' dedupe --quiet ' + apmFlags + ' ' + packagesToDedupe.join(' '),
];
var commands = [
{command: initialNpmCommand + npmFlags + 'install --quiet', message: 'Installing build modules...', options: {cwd: path.resolve(__dirname, '..', 'build'), ignoreStdout: true}},
{command: npmPath + npmFlags + 'install --quiet', message: 'Installing apm...', options: {cwd: apmInstallPath, ignoreStdout: true}},
apmPath + ' clean ' + apmFlags,
apmPath + ' install --quiet ' + apmFlags,
apmPath + ' dedupe --quiet ' + apmFlags + ' ' + packagesToDedupe.join(' '),
];
process.chdir(path.dirname(__dirname));
executeCommands(commands, process.exit);
process.chdir(path.dirname(__dirname));
executeCommands(commands, process.exit);
}
verifyRequirements(function(error, successMessage) {
if (error) {
console.log(error);
process.exit(1);
}
console.log(successMessage);
bootstrap();
});
+24 -16
Ver Arquivo
@@ -19,26 +19,34 @@ function loadEnvironmentVariables(filePath) {
var value = parts[1].trim().substr(1, parts[1].length - 2);
process.env[key] = value;
}
} catch(error) { }
} catch(error) {
console.error("Failed to load environment variables: " + filePath, error.code);
}
}
function readEnvironmentVariables() {
loadEnvironmentVariables('/var/lib/jenkins/config/atomcredentials')
loadEnvironmentVariables('/var/lib/jenkins/config/xcodekeychain')
if (process.platform === 'win32')
loadEnvironmentVariables(path.resolve('/jenkins/config/atomcredentials'));
else {
loadEnvironmentVariables('/var/lib/jenkins/config/atomcredentials');
loadEnvironmentVariables('/var/lib/jenkins/config/xcodekeychain');
}
}
readEnvironmentVariables();
cp.safeExec.bind(global, 'node script/bootstrap', function(error) {
if (error)
process.exit(1);
require('fs-plus').removeSync.bind(global, path.join(homeDir, '.atom'))
var async = require('async');
var gruntPath = path.join('build', 'node_modules', '.bin', 'grunt') + (process.platform === 'win32' ? '.cmd' : '');
var tasks = [
cp.safeExec.bind(global, 'git clean -dff'),
cp.safeExec.bind(global, gruntPath + ' ci --gruntfile build/Gruntfile.coffee --stack --no-color'),
]
async.series(tasks, function(error) {
process.exit(error ? 1 : 0);
});
cp.safeExec.bind(global, 'npm install npm', {cwd: path.resolve(__dirname, '..', 'build')}, function() {
cp.safeExec.bind(global, 'node script/bootstrap', function(error) {
if (error)
process.exit(1);
require('fs-plus').removeSync.bind(global, path.join(homeDir, '.atom'))
var async = require('async');
var gruntPath = path.join('build', 'node_modules', '.bin', 'grunt') + (process.platform === 'win32' ? '.cmd' : '');
var tasks = [
cp.safeExec.bind(global, 'git clean -dff'),
cp.safeExec.bind(global, gruntPath + ' ci --gruntfile build/Gruntfile.coffee --stack --no-color'),
]
async.series(tasks, function(error) {
process.exit(error ? 1 : 0);
});
})();
})();
+13 -6
Ver Arquivo
@@ -1,14 +1,15 @@
#!/usr/bin/env node
var cp = require('./utils/child-process-wrapper.js');
var fs = require('fs');
var path = require('path');
var os = require('os');
var removeCommand = process.platform === 'win32' ? 'del /F /Q /S ' : 'rm -rf ';
var removeCommand = process.platform === 'win32' ? 'rmdir /S /Q ' : 'rm -rf ';
var productName = require('../package.json').productName;
process.chdir(path.dirname(__dirname));
var home = process.env[(process.platform === 'win32') ? 'USERPROFILE' : 'HOME'];
var tmpdir = process.platform === 'win32' ? os.tmpdir() : '/tmp';
var tmpdir = os.tmpdir();
// Windows: Use START as a way to ignore error if Atom.exe isnt running
var killatom = process.platform === 'win32' ? 'START taskkill /F /IM ' + productName + '.exe' : 'pkill -9 ' + productName + ' || true';
@@ -18,21 +19,27 @@ var commands = [
[__dirname, '..', 'node_modules'],
[__dirname, '..', 'build', 'node_modules'],
[__dirname, '..', 'apm', 'node_modules'],
[__dirname, '..', 'vendor', 'apm', 'node_modules'],
[__dirname, '..', 'atom-shell'],
[home, '.atom', '.node-gyp'],
[home, '.atom', 'storage'],
[home, '.atom', '.npm'],
[home, '.atom', 'compile-cache'],
[tmpdir, 'atom-build'],
[tmpdir, 'atom-cached-atom-shells'],
[tmpdir, 'atom-compile-cache'],
];
var run = function() {
var next = commands.shift();
if (!next)
process.exit(0);
if (Array.isArray(next))
next = removeCommand + path.resolve.apply(path.resolve, next);
if (Array.isArray(next)) {
var pathToRemove = path.resolve.apply(path.resolve, next);
if (fs.existsSync(pathToRemove))
next = removeCommand + pathToRemove;
else
return run();
}
cp.safeExec(next, run);
};
run();
+8
Ver Arquivo
@@ -1,9 +1,17 @@
#!/usr/bin/env node
var cp = require('./utils/child-process-wrapper.js');
var fs = require('fs');
var path = require('path');
// node build/node_modules/.bin/grunt "$@"
var gruntPath = path.resolve(__dirname, '..', 'build', 'node_modules', '.bin', 'grunt') + (process.platform === 'win32' ? '.cmd' : '');
if (!fs.existsSync(gruntPath)) {
console.error('Grunt command does not exist at: ' + gruntPath);
console.error('Run script/bootstrap to install Grunt');
process.exit(1);
}
var args = ['--gruntfile', path.resolve('build', 'Gruntfile.coffee')];
args = args.concat(process.argv.slice(2));
cp.safeSpawn(gruntPath, args, process.exit);
+5
Ver Arquivo
@@ -0,0 +1,5 @@
@IF EXIST "%~dp0\node.exe" (
"%~dp0\node.exe" "%~dp0\grunt" %*
) ELSE (
node "%~dp0\grunt" %*
)
-10
Ver Arquivo
@@ -1,10 +0,0 @@
#!/usr/bin/env coffee
path = require 'path'
CommandInstaller = require '../src/command-installer'
callback = (error) ->
console.warn error.message if error?
CommandInstaller.installAtomCommand(path.resolve(__dirname, '..'), callback)
CommandInstaller.installApmCommand(path.resolve(__dirname, '..'), callback)
+12 -8
Ver Arquivo
@@ -1,31 +1,35 @@
#!/bin/bash
# mkdeb version control-file-path deb-file-path
set -e
SCRIPT=`readlink -f "$0"`
ROOT=`readlink -f $(dirname $SCRIPT)/..`
cd $ROOT
VERSION="$1"
CONTROL_FILE="$2"
DESKTOP_FILE="$3"
ICON_FILE="$4"
DEB_PATH="$5"
ARCH="$2"
CONTROL_FILE="$3"
DESKTOP_FILE="$4"
ICON_FILE="$5"
DEB_PATH="$6"
TARGET_ROOT="`mktemp -d`"
TARGET="$TARGET_ROOT/atom-$VERSION-amd64"
chmod 755 "$TARGET_ROOT"
TARGET="$TARGET_ROOT/atom-$VERSION-$ARCH"
mkdir -p "$TARGET/usr"
env INSTALL_PREFIX="$TARGET/usr" script/grunt install
mkdir -p "$TARGET/DEBIAN"
mv "$CONTROL_FILE" "$TARGET/DEBIAN/control"
cp "$CONTROL_FILE" "$TARGET/DEBIAN/control"
mkdir -p "$TARGET/usr/share/applications"
mv "$DESKTOP_FILE" "$TARGET/usr/share/applications"
cp "$DESKTOP_FILE" "$TARGET/usr/share/applications"
mkdir -p "$TARGET/usr/share/pixmaps"
cp "$ICON_FILE" "$TARGET/usr/share/pixmaps"
dpkg-deb -b "$TARGET"
mv "$TARGET_ROOT/atom-$VERSION-amd64.deb" "$DEB_PATH"
mv "$TARGET_ROOT/atom-$VERSION-$ARCH.deb" "$DEB_PATH"
rm -rf $TARGET_ROOT
+117
Ver Arquivo
@@ -0,0 +1,117 @@
var path = require('path');
var fs = require('fs');
var childProcess = require('child_process');
var pythonExecutable = process.env.PYTHON;
module.exports = function(cb) {
verifyNode(function(error, nodeSuccessMessage) {
if (error) {
cb(error);
return;
}
verifyNpm(function(error, npmSuccessMessage) {
if (error) {
cb(error);
return;
}
verifyPython27(function(error, pythonSuccessMessage) {
cb(error, (nodeSuccessMessage + "\n" + npmSuccessMessage + "\n" + pythonSuccessMessage).trim());
});
});
});
};
function verifyNode(cb) {
var nodeVersion = process.versions.node;
var versionArray = nodeVersion.split('.');
var nodeMajorVersion = +versionArray[0];
var nodeMinorVersion = +versionArray[1];
if (nodeMajorVersion === 0 && nodeMinorVersion < 10) {
error = "node v0.10 is required to build Atom.";
cb(error);
}
else {
cb(null, "Node: v" + nodeVersion);
}
}
function verifyNpm(cb) {
var localNpmPath = path.resolve(__dirname, '..', '..', 'build', 'node_modules', '.bin', 'npm');
if (process.platform === 'win32')
localNpmPath += ".cmd";
var npmCommand = fs.existsSync(localNpmPath) ? localNpmPath : 'npm';
if (npmCommand === 'npm' && process.platform === 'win32')
npmCommand += ".cmd";
childProcess.execFile(npmCommand, ['-v'], { env: process.env }, function(err, stdout) {
if (err)
return cb("npm 1.4 is required to build Atom. An error (" + err + ") occured when checking the version.");
var npmVersion = stdout ? stdout.trim() : '';
var versionArray = npmVersion.split('.');
var npmMajorVersion = +versionArray[0] || 0;
var npmMinorVersion = +versionArray[1] || 0;
if (npmMajorVersion === 1 && npmMinorVersion < 4)
cb("npm v1.4+ is required to build Atom.");
else
cb(null, "npm: v" + npmVersion);
});
}
function verifyPython27(cb) {
if (process.platform == 'win32') {
if (!pythonExecutable) {
var systemDrive = process.env.SystemDrive || 'C:\\';
pythonExecutable = path.join(systemDrive, 'Python27', 'python.exe');
if (!fs.existsSync(pythonExecutable)) {
pythonExecutable = 'python';
}
}
checkPythonVersion(pythonExecutable, cb);
}
else {
cb(null, '');
}
}
function checkPythonVersion (python, cb) {
var pythonHelpMessage = "Set the PYTHON env var to '/path/to/Python27/python.exe' if your python is installed in a non-default location.";
childProcess.execFile(python, ['-c', 'import platform; print(platform.python_version());'], { env: process.env }, function (err, stdout) {
if (err) {
error = "Python 2.7 is required to build Atom. An error (" + err + ") occured when checking the version of '" + python + "'. ";
error += pythonHelpMessage;
cb(error);
return;
}
var version = stdout.trim();
if (~version.indexOf('+')) {
version = version.replace(/\+/g, '');
}
if (~version.indexOf('rc')) {
version = version.replace(/rc(.*)$/ig, '');
}
// Atom requires python 2.7 or higher (but not python 3) for node-gyp
var versionArray = version.split('.').map(function(num) { return +num; });
var goodPythonVersion = (versionArray[0] === 2 && versionArray[1] >= 7);
if (!goodPythonVersion) {
error = "Python 2.7 is required to build Atom. '" + python + "' returns version " + version + ". ";
error += pythonHelpMessage;
cb(error);
return;
}
// Finally, if we've gotten this far, callback to resume the install process.
cb(null, "Python: v" + version);
});
}
+41 -3
Ver Arquivo
@@ -2,13 +2,14 @@ path = require 'path'
_ = require 'underscore-plus'
{convertStackTrace} = require 'coffeestack'
{View, $, $$} = require '../src/space-pen-extensions'
grim = require 'grim'
sourceMaps = {}
formatStackTrace = (spec, message='', stackTrace) ->
return stackTrace unless stackTrace
jasminePattern = /^\s*at\s+.*\(?.*\/jasmine(-[^\/]*)?\.js:\d+:\d+\)?\s*$/
firstJasmineLinePattern = /^\s*at \/.*\/jasmine(-[^\/]*)?\.js:\d+:\d+\)?\s*$/
jasminePattern = /^\s*at\s+.*\(?.*[/\\]jasmine(-[^/\\]*)?\.js:\d+:\d+\)?\s*$/
firstJasmineLinePattern = /^\s*at [/\\].*[/\\]jasmine(-[^/\\]*)?\.js:\d+:\d+\)?\s*$/
convertedLines = []
for line in stackTrace.split('\n')
convertedLines.push(line) unless jasminePattern.test(line)
@@ -23,7 +24,7 @@ formatStackTrace = (spec, message='', stackTrace) ->
for line, index in lines
# Remove prefix of lines matching: at [object Object].<anonymous> (path:1:2)
prefixMatch = line.match(/at \[object Object\]\.<anonymous> \(([^\)]+)\)/)
prefixMatch = line.match(/at \[object Object\]\.<anonymous> \(([^)]+)\)/)
line = "at #{prefixMatch[1]}" if prefixMatch
# Relativize locations to spec directory
@@ -52,6 +53,11 @@ class AtomReporter extends View
@div outlet: "message", class: 'message'
@div outlet: "results", class: 'results'
@div outlet: "deprecations", class: 'status alert alert-warning', style: 'display: none', =>
@span outlet: 'deprecationStatus', '0 deprecations'
@div class: 'deprecation-toggle'
@div outlet: 'deprecationList', class: 'deprecation-list'
startedAt: null
runningSpecCount: 0
completeSpecCount: 0
@@ -59,6 +65,7 @@ class AtomReporter extends View
failedCount: 0
skippedCount: 0
totalSpecCount: 0
deprecationCount: 0
@timeoutId: 0
reportRunnerStarting: (runner) ->
@@ -88,6 +95,29 @@ class AtomReporter extends View
reportSpecStarting: (spec) ->
@specStarted(spec)
addDeprecations: (spec) ->
deprecations = grim.getDeprecations()
@deprecationCount += deprecations.length
@deprecations.show() if @deprecationCount > 0
if @deprecationCount is 1
@deprecationStatus.text("1 deprecation")
else
@deprecationStatus.text("#{@deprecationCount} deprecations")
for deprecation in deprecations
@deprecationList.append $$ ->
@div class: 'padded', =>
@div class: 'result-message fail deprecation-message', deprecation.message
for stack in deprecation.stacks
fullStack = stack.map ({functionName, location}) ->
if functionName is '<unknown>'
" at #{location}"
else
" at #{functionName} (#{location})"
@pre class: 'stack-trace padded', formatStackTrace(spec, deprecation.message, fullStack.join('\n'))
grim.clearDeprecations()
handleEvents: ->
$(document).on "click", ".spec-toggle", ({currentTarget}) =>
element = $(currentTarget)
@@ -96,6 +126,13 @@ class AtomReporter extends View
element.toggleClass('folded')
false
$(document).on "click", ".deprecation-toggle", ({currentTarget}) =>
element = $(currentTarget)
deprecationList = $(document).find('.deprecation-list')
deprecationList.toggle()
element.toggleClass('folded')
false
updateSpecCounts: ->
if @skippedCount
specCount = "#{@completeSpecCount - @skippedCount}/#{@totalSpecCount - @skippedCount} (#{@skippedCount} skipped)"
@@ -175,6 +212,7 @@ class AtomReporter extends View
specView = new SpecResultView(spec)
specView.attach()
@failedCount++
@addDeprecations(spec)
class SuiteResultView extends View
@content: ->
+33 -30
Ver Arquivo
@@ -113,18 +113,21 @@ describe "the `atom` global", ->
promise
it "triggers the activation event on all handlers registered during activation", ->
atom.workspaceView.openSync()
editorView = atom.workspaceView.getActiveView()
eventHandler = jasmine.createSpy("activation-event")
editorView.command 'activation-event', eventHandler
editorView.trigger 'activation-event'
expect(mainModule.activate.callCount).toBe 1
expect(mainModule.activationEventCallCount).toBe 1
expect(eventHandler.callCount).toBe 1
editorView.trigger 'activation-event'
expect(mainModule.activationEventCallCount).toBe 2
expect(eventHandler.callCount).toBe 2
expect(mainModule.activate.callCount).toBe 1
waitsForPromise ->
atom.workspaceView.open()
runs ->
editorView = atom.workspaceView.getActiveView()
eventHandler = jasmine.createSpy("activation-event")
editorView.command 'activation-event', eventHandler
editorView.trigger 'activation-event'
expect(mainModule.activate.callCount).toBe 1
expect(mainModule.activationEventCallCount).toBe 1
expect(eventHandler.callCount).toBe 1
editorView.trigger 'activation-event'
expect(mainModule.activationEventCallCount).toBe 2
expect(eventHandler.callCount).toBe 2
expect(mainModule.activate.callCount).toBe 1
it "activates the package immediately when the events are empty", ->
mainModule = require './fixtures/packages/package-with-empty-activation-events/index'
@@ -170,28 +173,28 @@ describe "the `atom` global", ->
element2 = $$ -> @div class: 'test-2'
element3 = $$ -> @div class: 'test-3'
expect(atom.keymaps.keyBindingsForKeystrokeMatchingElement('ctrl-z', element1)).toHaveLength 0
expect(atom.keymaps.keyBindingsForKeystrokeMatchingElement('ctrl-z', element2)).toHaveLength 0
expect(atom.keymaps.keyBindingsForKeystrokeMatchingElement('ctrl-z', element3)).toHaveLength 0
expect(atom.keymaps.findKeyBindings(keystrokes:'ctrl-z', target:element1[0])).toHaveLength 0
expect(atom.keymaps.findKeyBindings(keystrokes:'ctrl-z', target:element2[0])).toHaveLength 0
expect(atom.keymaps.findKeyBindings(keystrokes:'ctrl-z', target:element3[0])).toHaveLength 0
atom.packages.activatePackage("package-with-keymaps")
expect(atom.keymaps.keyBindingsForKeystrokeMatchingElement('ctrl-z', element1)[0].command).toBe "test-1"
expect(atom.keymaps.keyBindingsForKeystrokeMatchingElement('ctrl-z', element2)[0].command).toBe "test-2"
expect(atom.keymaps.keyBindingsForKeystrokeMatchingElement('ctrl-z', element3)).toHaveLength 0
expect(atom.keymaps.findKeyBindings(keystrokes:'ctrl-z', target:element1[0])[0].command).toBe "test-1"
expect(atom.keymaps.findKeyBindings(keystrokes:'ctrl-z', target:element2[0])[0].command).toBe "test-2"
expect(atom.keymaps.findKeyBindings(keystrokes:'ctrl-z', target:element3[0])).toHaveLength 0
describe "when the metadata contains a 'keymaps' manifest", ->
it "loads only the keymaps specified by the manifest, in the specified order", ->
element1 = $$ -> @div class: 'test-1'
element3 = $$ -> @div class: 'test-3'
expect(atom.keymaps.keyBindingsForKeystrokeMatchingElement('ctrl-z', element1)).toHaveLength 0
expect(atom.keymaps.findKeyBindings(keystrokes:'ctrl-z', target:element1[0])).toHaveLength 0
atom.packages.activatePackage("package-with-keymaps-manifest")
expect(atom.keymaps.keyBindingsForKeystrokeMatchingElement('ctrl-z', element1)[0].command).toBe 'keymap-1'
expect(atom.keymaps.keyBindingsForKeystrokeMatchingElement('ctrl-n', element1)[0].command).toBe 'keymap-2'
expect(atom.keymaps.keyBindingsForKeystrokeMatchingElement('ctrl-y', element3)).toHaveLength 0
expect(atom.keymaps.findKeyBindings(keystrokes:'ctrl-z', target:element1[0])[0].command).toBe 'keymap-1'
expect(atom.keymaps.findKeyBindings(keystrokes:'ctrl-n', target:element1[0])[0].command).toBe 'keymap-2'
expect(atom.keymaps.findKeyBindings(keystrokes:'ctrl-y', target:element3[0])).toHaveLength 0
describe "menu loading", ->
beforeEach ->
@@ -377,8 +380,8 @@ describe "the `atom` global", ->
runs ->
atom.packages.deactivatePackage('package-with-keymaps')
expect(atom.keymaps.keyBindingsForKeystrokeMatchingElement('ctrl-z', $$ -> @div class: 'test-1')).toHaveLength 0
expect(atom.keymaps.keyBindingsForKeystrokeMatchingElement('ctrl-z', $$ -> @div class: 'test-2')).toHaveLength 0
expect(atom.keymaps.findKeyBindings(keystrokes:'ctrl-z', target: ($$ -> @div class: 'test-1')[0])).toHaveLength 0
expect(atom.keymaps.findKeyBindings(keystrokes:'ctrl-z', target: ($$ -> @div class: 'test-2')[0])).toHaveLength 0
it "removes the package's stylesheets", ->
waitsForPromise ->
@@ -507,20 +510,20 @@ describe "the `atom` global", ->
# enabling of theme
pack = atom.packages.enablePackage(packageName)
activatedPackages = null
waitsFor ->
activatedPackages = atom.packages.getActivePackages()
activatedPackages.length > 0
pack in atom.packages.getActivePackages()
runs ->
expect(activatedPackages).toContain(pack)
expect(atom.config.get('core.themes')).toContain packageName
expect(atom.config.get('core.disabledPackages')).not.toContain packageName
# disabling of theme
pack = atom.packages.disablePackage(packageName)
activatedPackages = atom.packages.getActivePackages()
expect(activatedPackages).not.toContain(pack)
waitsFor ->
not (pack in atom.packages.getActivePackages())
runs ->
expect(atom.config.get('core.themes')).not.toContain packageName
expect(atom.config.get('core.themes')).not.toContain packageName
expect(atom.config.get('core.disabledPackages')).not.toContain packageName
+46 -2
Ver Arquivo
@@ -5,6 +5,10 @@ fs = require 'fs-plus'
describe "Config", ->
dotAtomPath = path.join(temp.dir, 'dot-atom-dir')
dotAtomPath = null
beforeEach ->
dotAtomPath = temp.path('dot-atom-dir')
describe ".get(keyPath)", ->
it "allows a key path's value to be read", ->
@@ -36,15 +40,53 @@ describe "Config", ->
describe "when the value equals the default value", ->
it "does not store the value", ->
atom.config.setDefaults("foo", same: 1, changes: 1)
atom.config.setDefaults "foo",
same: 1
changes: 1
sameArray: [1, 2, 3]
sameObject: {a: 1, b: 2}
null: null
undefined: undefined
expect(atom.config.settings.foo).toBeUndefined()
atom.config.set('foo.same', 1)
atom.config.set('foo.changes', 2)
atom.config.set('foo.sameArray', [1, 2, 3])
atom.config.set('foo.null', undefined)
atom.config.set('foo.undefined', null)
atom.config.set('foo.sameObject', {b: 2, a: 1})
expect(atom.config.settings.foo).toEqual {changes: 2}
atom.config.set('foo.changes', 1)
expect(atom.config.settings.foo).toEqual {}
describe ".getDefault(keyPath)", ->
it "returns a clone of the default value", ->
atom.config.setDefaults("foo", same: 1, changes: 1)
expect(atom.config.getDefault('foo.same')).toBe 1
expect(atom.config.getDefault('foo.changes')).toBe 1
atom.config.set('foo.same', 2)
atom.config.set('foo.changes', 3)
expect(atom.config.getDefault('foo.same')).toBe 1
expect(atom.config.getDefault('foo.changes')).toBe 1
initialDefaultValue = [1, 2, 3]
atom.config.setDefaults("foo", bar: initialDefaultValue)
expect(atom.config.getDefault('foo.bar')).toEqual initialDefaultValue
expect(atom.config.getDefault('foo.bar')).not.toBe initialDefaultValue
describe ".isDefault(keyPath)", ->
it "returns true when the value of the key path is its default value", ->
atom.config.setDefaults("foo", same: 1, changes: 1)
expect(atom.config.isDefault('foo.same')).toBe true
expect(atom.config.isDefault('foo.changes')).toBe true
atom.config.set('foo.same', 2)
atom.config.set('foo.changes', 3)
expect(atom.config.isDefault('foo.same')).toBe false
expect(atom.config.isDefault('foo.changes')).toBe false
describe ".toggle(keyPath)", ->
it "negates the boolean value of the current key path value", ->
atom.config.set('foo.a', 1)
@@ -220,8 +262,10 @@ describe "Config", ->
describe ".initializeConfigDirectory()", ->
beforeEach ->
if fs.existsSync(dotAtomPath)
fs.removeSync(dotAtomPath)
atom.config.configDirPath = dotAtomPath
expect(fs.existsSync(atom.config.configDirPath)).toBeFalsy()
afterEach ->
fs.removeSync(dotAtomPath)
+17 -2
Ver Arquivo
@@ -17,6 +17,22 @@ describe "ContextMenuManager", ->
expect(contextMenu.definitions['.selector'][0].label).toEqual 'label'
expect(contextMenu.definitions['.selector'][0].command).toEqual 'command'
it "loads submenus", ->
contextMenu.add 'file-path',
'.selector':
'parent':
'child-1': 'child-1:trigger'
'child-2': 'child-2:trigger'
'parent-2': 'parent-2:trigger'
expect(contextMenu.definitions['.selector'].length).toBe 2
expect(contextMenu.definitions['.selector'][0].label).toEqual 'parent'
expect(contextMenu.definitions['.selector'][0].submenu.length).toBe 2
expect(contextMenu.definitions['.selector'][0].submenu[0].label).toBe 'child-1'
expect(contextMenu.definitions['.selector'][0].submenu[0].command).toBe 'child-1:trigger'
expect(contextMenu.definitions['.selector'][0].submenu[1].label).toBe 'child-2'
expect(contextMenu.definitions['.selector'][0].submenu[1].command).toBe 'child-2:trigger'
describe 'dev mode', ->
it 'loads', ->
contextMenu.add 'file-path',
@@ -105,7 +121,7 @@ describe "ContextMenuManager", ->
expect(menu[2].command).toEqual 'dev-command'
expect(menu[3]).toBeUndefined()
describe "#executeBuildHandlers", ->
describe "executeBuildHandlers", ->
menuTemplate = [
label: 'label'
executeAtBuild: ->
@@ -119,4 +135,3 @@ describe "ContextMenuManager", ->
expect(buildFn).toHaveBeenCalled()
expect(buildFn.mostRecentCall.args[0]).toBe event
+135 -11
Ver Arquivo
@@ -21,7 +21,7 @@ describe "DisplayBuffer", ->
describe "::copy()", ->
it "creates a new DisplayBuffer with the same initial state", ->
marker1 = displayBuffer.markBufferRange([[1, 2], [3, 4]], id: 1)
marker2 = displayBuffer.markBufferRange([[2, 3], [4, 5]], isReversed: true, id: 2)
marker2 = displayBuffer.markBufferRange([[2, 3], [4, 5]], reversed: true, id: 2)
marker3 = displayBuffer.markBufferPosition([5, 6], id: 3)
displayBuffer.createFold(3, 5)
@@ -82,7 +82,7 @@ describe "DisplayBuffer", ->
describe "when there is no whitespace before the boundary", ->
it "wraps the line exactly at the boundary since there's no more graceful place to wrap it", ->
buffer.change([[0, 0], [1, 0]], 'abcdefghijklmnopqrstuvwxyz\n')
buffer.setTextInRange([[0, 0], [1, 0]], 'abcdefghijklmnopqrstuvwxyz\n')
displayBuffer.setEditorWidthInChars(10)
expect(displayBuffer.lineForRow(0).text).toBe 'abcdefghij'
expect(displayBuffer.lineForRow(1).text).toBe 'klmnopqrst'
@@ -142,7 +142,7 @@ describe "DisplayBuffer", ->
describe "when buffer lines are removed", ->
it "removes lines and emits a change event", ->
buffer.change([[3, 21], [7, 5]], ';')
buffer.setTextInRange([[3, 21], [7, 5]], ';')
expect(displayBuffer.lineForRow(3).text).toBe ' var pivot = items;'
expect(displayBuffer.lineForRow(4).text).toBe ' return '
expect(displayBuffer.lineForRow(5).text).toBe 'sort(left).concat(pivot).concat(sort(right));'
@@ -330,7 +330,7 @@ describe "DisplayBuffer", ->
describe "when the old range surrounds a fold", ->
beforeEach ->
buffer.change([[1, 0], [5, 1]], 'party!')
buffer.setTextInRange([[1, 0], [5, 1]], 'party!')
it "removes the fold and replaces the selection with the new text", ->
expect(displayBuffer.lineForRow(0).text).toBe "0"
@@ -352,7 +352,7 @@ describe "DisplayBuffer", ->
displayBuffer.createFold(2, 9)
changeHandler.reset()
buffer.change([[1, 0], [10, 0]], 'goodbye')
buffer.setTextInRange([[1, 0], [10, 0]], 'goodbye')
expect(displayBuffer.lineForRow(0).text).toBe "0"
expect(displayBuffer.lineForRow(1).text).toBe "goodbye10"
@@ -371,7 +371,7 @@ describe "DisplayBuffer", ->
describe "when the old range precedes lines with a fold", ->
describe "when the new range precedes lines with a fold", ->
it "updates the buffer and re-positions subsequent folds", ->
buffer.change([[0, 0], [1, 1]], 'abc')
buffer.setTextInRange([[0, 0], [1, 1]], 'abc')
expect(displayBuffer.lineForRow(0).text).toBe "abc"
expect(displayBuffer.lineForRow(1).fold).toBe fold1
@@ -394,7 +394,7 @@ describe "DisplayBuffer", ->
describe "when the old range straddles the beginning of a fold", ->
it "destroys the fold", ->
buffer.change([[1, 1], [3, 0]], "a\nb\nc\nd\n")
buffer.setTextInRange([[1, 1], [3, 0]], "a\nb\nc\nd\n")
expect(displayBuffer.lineForRow(1).text).toBe '1a'
expect(displayBuffer.lineForRow(2).text).toBe 'b'
expect(displayBuffer.lineForRow(2).fold).toBeUndefined()
@@ -402,7 +402,7 @@ describe "DisplayBuffer", ->
describe "when the old range follows a fold", ->
it "re-positions the screen ranges for the change event based on the preceding fold", ->
buffer.change([[10, 0], [11, 0]], 'abc')
buffer.setTextInRange([[10, 0], [11, 0]], 'abc')
expect(displayBuffer.lineForRow(1).text).toBe "1"
expect(displayBuffer.lineForRow(2).fold).toBe fold1
@@ -430,7 +430,7 @@ describe "DisplayBuffer", ->
describe "when the end of the new range exceeds the end of the fold", ->
it "expands the fold to contain all the inserted lines", ->
buffer.change([[3, 0], [4, 0]], 'a\nb\nc\nd\n')
buffer.setTextInRange([[3, 0], [4, 0]], 'a\nb\nc\nd\n')
expect(fold1.getStartRow()).toBe 2
expect(fold1.getEndRow()).toBe 7
@@ -447,7 +447,7 @@ describe "DisplayBuffer", ->
describe "when the end of the new range precedes the end of the fold", ->
it "destroys the fold", ->
fold2.destroy()
buffer.change([[3, 0], [6, 0]], 'a\n')
buffer.setTextInRange([[3, 0], [6, 0]], 'a\n')
expect(displayBuffer.lineForRow(2).text).toBe '2'
expect(displayBuffer.lineForRow(2).fold).toBeUndefined()
expect(displayBuffer.lineForRow(3).text).toBe 'a'
@@ -831,7 +831,7 @@ describe "DisplayBuffer", ->
expect(marker.getTailScreenPosition()).toEqual [5, 7]
expect(marker2.isValid()).toBeFalsy()
buffer.change([[8, 0], [8, 2]], ".....")
buffer.setTextInRange([[8, 0], [8, 2]], ".....")
expect(changeHandler).toHaveBeenCalled()
expect(markerChangedHandler).toHaveBeenCalled()
expect(marker2ChangedHandler).toHaveBeenCalled()
@@ -912,6 +912,42 @@ describe "DisplayBuffer", ->
expect(displayBuffer.findMarkers(class: 'a', startBufferRow: 0, endBufferRow: 3)).toEqual [marker1]
expect(displayBuffer.findMarkers(endBufferRow: 10)).toEqual [marker3]
it "allows the startScreenRow and endScreenRow to be specified", ->
marker1 = displayBuffer.markBufferRange([[6, 0], [7, 0]], class: 'a')
marker2 = displayBuffer.markBufferRange([[9, 0], [10, 0]], class: 'a')
displayBuffer.createFold(4, 7)
expect(displayBuffer.findMarkers(class: 'a', startScreenRow: 6, endScreenRow: 7)).toEqual [marker2]
it "allows intersectsBufferRowRange to be specified", ->
marker1 = displayBuffer.markBufferRange([[5, 0], [5, 0]], class: 'a')
marker2 = displayBuffer.markBufferRange([[8, 0], [8, 0]], class: 'a')
displayBuffer.createFold(4, 7)
expect(displayBuffer.findMarkers(class: 'a', intersectsBufferRowRange: [5, 6])).toEqual [marker1]
it "allows intersectsScreenRowRange to be specified", ->
marker1 = displayBuffer.markBufferRange([[5, 0], [5, 0]], class: 'a')
marker2 = displayBuffer.markBufferRange([[8, 0], [8, 0]], class: 'a')
displayBuffer.createFold(4, 7)
expect(displayBuffer.findMarkers(class: 'a', intersectsScreenRowRange: [5, 10])).toEqual [marker2]
it "allows containedInScreenRange to be specified", ->
marker1 = displayBuffer.markBufferRange([[5, 0], [5, 0]], class: 'a')
marker2 = displayBuffer.markBufferRange([[8, 0], [8, 0]], class: 'a')
displayBuffer.createFold(4, 7)
expect(displayBuffer.findMarkers(class: 'a', containedInScreenRange: [[5, 0], [7, 0]])).toEqual [marker2]
it "allows intersectsBufferRange to be specified", ->
marker1 = displayBuffer.markBufferRange([[5, 0], [5, 0]], class: 'a')
marker2 = displayBuffer.markBufferRange([[8, 0], [8, 0]], class: 'a')
displayBuffer.createFold(4, 7)
expect(displayBuffer.findMarkers(class: 'a', intersectsBufferRange: [[5, 0], [6, 0]])).toEqual [marker1]
it "allows intersectsScreenRange to be specified", ->
marker1 = displayBuffer.markBufferRange([[5, 0], [5, 0]], class: 'a')
marker2 = displayBuffer.markBufferRange([[8, 0], [8, 0]], class: 'a')
displayBuffer.createFold(4, 7)
expect(displayBuffer.findMarkers(class: 'a', intersectsScreenRange: [[5, 0], [10, 0]])).toEqual [marker2]
describe "marker destruction", ->
it "allows markers to be destroyed", ->
marker = displayBuffer.markScreenRange([[5, 4], [5, 10]])
@@ -943,3 +979,91 @@ describe "DisplayBuffer", ->
expect(displayBuffer.getMarkerCount()).toBe initialMarkerCount + 2
expect(marker1.getAttributes()).toEqual a: 1, b: 2
expect(marker2.getAttributes()).toEqual a: 1, b: 3
describe "DisplayBufferMarker::getPixelRange()", ->
it "returns the start and end positions of the marker based on the line height and character widths assigned to the DisplayBuffer", ->
marker = displayBuffer.markScreenRange([[5, 10], [6, 4]])
displayBuffer.setLineHeightInPixels(20)
displayBuffer.setDefaultCharWidth(10)
displayBuffer.setScopedCharWidths(["source.js", "keyword.control.js"], r: 11, e: 11, t: 11, u: 11, n: 11)
{start, end} = marker.getPixelRange()
expect(start.top).toBe 5 * 20
expect(start.left).toBe (4 * 10) + (6 * 11)
describe "decorations", ->
it "can add decorations associated with markers and remove them", ->
decoration = {type: 'gutter', class: 'one'}
marker = displayBuffer.markBufferRange([[2, 13], [3, 15]])
displayBuffer.addDecorationForMarker(marker, decoration)
expect(displayBuffer.decorationsForScreenRowRange(2, 3)[marker.id][0]).toBe decoration
displayBuffer.removeDecorationForMarker(marker, decoration)
expect(displayBuffer.decorationsForScreenRowRange(2, 3)[marker.id]).not.toBeDefined()
describe "::setScrollTop", ->
beforeEach ->
displayBuffer.manageScrollPosition = true
displayBuffer.setLineHeightInPixels(10)
it "disallows negative values", ->
displayBuffer.setHeight(displayBuffer.getScrollHeight() + 100)
expect(displayBuffer.setScrollTop(-10)).toBe 0
expect(displayBuffer.getScrollTop()).toBe 0
it "disallows values that would make ::getScrollBottom() exceed ::getScrollHeight()", ->
displayBuffer.setHeight(50)
maxScrollTop = displayBuffer.getScrollHeight() - displayBuffer.getHeight()
expect(displayBuffer.setScrollTop(maxScrollTop)).toBe maxScrollTop
expect(displayBuffer.getScrollTop()).toBe maxScrollTop
expect(displayBuffer.setScrollTop(maxScrollTop + 50)).toBe maxScrollTop
expect(displayBuffer.getScrollTop()).toBe maxScrollTop
describe "::setScrollLeft", ->
beforeEach ->
displayBuffer.manageScrollPosition = true
displayBuffer.setLineHeightInPixels(10)
displayBuffer.setDefaultCharWidth(10)
it "disallows negative values", ->
displayBuffer.setWidth(displayBuffer.getScrollWidth() + 100)
expect(displayBuffer.setScrollLeft(-10)).toBe 0
expect(displayBuffer.getScrollLeft()).toBe 0
it "disallows values that would make ::getScrollRight() exceed ::getScrollWidth()", ->
displayBuffer.setWidth(50)
maxScrollLeft = displayBuffer.getScrollWidth() - displayBuffer.getWidth()
expect(displayBuffer.setScrollLeft(maxScrollLeft)).toBe maxScrollLeft
expect(displayBuffer.getScrollLeft()).toBe maxScrollLeft
expect(displayBuffer.setScrollLeft(maxScrollLeft + 50)).toBe maxScrollLeft
expect(displayBuffer.getScrollLeft()).toBe maxScrollLeft
describe "::scrollToScreenPosition(position, [options])", ->
beforeEach ->
displayBuffer.manageScrollPosition = true
displayBuffer.setLineHeightInPixels(10)
displayBuffer.setDefaultCharWidth(10)
displayBuffer.setHorizontalScrollbarHeight(0)
displayBuffer.setHeight(50)
displayBuffer.setWidth(50)
it "sets the scroll top and scroll left so the given screen position is in view", ->
displayBuffer.scrollToScreenPosition([8, 20])
expect(displayBuffer.getScrollBottom()).toBe (9 + displayBuffer.getVerticalScrollMargin()) * 10
expect(displayBuffer.getScrollRight()).toBe (20 + displayBuffer.getHorizontalScrollMargin()) * 10
describe "when the 'center' option is true", ->
it "vertically scrolls to center the given position vertically", ->
displayBuffer.scrollToScreenPosition([8, 20], center: true)
expect(displayBuffer.getScrollTop()).toBe (8 * 10) + 5 - (50 / 2)
expect(displayBuffer.getScrollRight()).toBe (20 + displayBuffer.getHorizontalScrollMargin()) * 10
it "does not scroll vertically if the position is already in view", ->
displayBuffer.scrollToScreenPosition([4, 20], center: true)
expect(displayBuffer.getScrollTop()).toBe 0
Diferenças do arquivo suprimidas por serem muito extensas Carregar Diff
+440 -71
Ver Arquivo
@@ -7,9 +7,12 @@ describe "Editor", ->
buffer.setText(buffer.getText().replace(/[ ]{2}/g, "\t"))
beforeEach ->
editor = atom.project.openSync('sample.js', autoIndent: false)
buffer = editor.buffer
lineLengths = buffer.getLines().map (line) -> line.length
waitsForPromise ->
atom.project.open('sample.js', autoIndent: false).then (o) -> editor = o
runs ->
buffer = editor.buffer
lineLengths = buffer.getLines().map (line) -> line.length
waitsForPromise ->
atom.packages.activatePackage('language-javascript')
@@ -17,7 +20,7 @@ describe "Editor", ->
describe "when the editor is deserialized", ->
it "restores selections and folds based on markers in the buffer", ->
editor.setSelectedBufferRange([[1, 2], [3, 4]])
editor.addSelectionForBufferRange([[5, 6], [7, 5]], isReversed: true)
editor.addSelectionForBufferRange([[5, 6], [7, 5]], reversed: true)
editor.foldBufferRow(4)
expect(editor.isFoldedAtBufferRow(4)).toBeTruthy()
@@ -31,15 +34,33 @@ describe "Editor", ->
editor2.destroy()
describe "when the editor is constructed with an initialLine option", ->
it "and positions the cursor on the specified line", ->
editor = atom.project.openSync('sample.js', initialLine: 2)
buffer = editor.buffer
expect(editor.getCursor().getBufferPosition().row).toEqual 2
it "positions the cursor on the specified line", ->
editor = null
waitsForPromise ->
atom.workspace.open('sample.less', initialLine: 5).then (o) -> editor = o
runs ->
buffer = editor.buffer
expect(editor.getCursor().getBufferPosition().row).toEqual 5
expect(editor.getCursor().getBufferPosition().column).toEqual 0
describe "when the editor is constructed 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
runs ->
buffer = editor.buffer
expect(editor.getCursor().getBufferPosition().row).toEqual 0
expect(editor.getCursor().getBufferPosition().column).toEqual 8
describe ".copy()", ->
it "returns a different edit session with the same initial state", ->
editor.setSelectedBufferRange([[1, 2], [3, 4]])
editor.addSelectionForBufferRange([[5, 6], [7, 8]], isReversed: true)
editor.addSelectionForBufferRange([[5, 6], [7, 8]], reversed: true)
editor.foldBufferRow(4)
expect(editor.isFoldedAtBufferRow(4)).toBeTruthy()
@@ -57,21 +78,31 @@ describe "Editor", ->
describe "config defaults", ->
it "uses the `editor.tabLength`, `editor.softWrap`, and `editor.softTabs` config values", ->
editor1 = null
editor2 = null
atom.config.set('editor.tabLength', 4)
atom.config.set('editor.softWrap', true)
atom.config.set('editor.softTabs', false)
editor1 = atom.project.openSync('a')
expect(editor1.getTabLength()).toBe 4
expect(editor1.getSoftWrap()).toBe true
expect(editor1.getSoftTabs()).toBe false
atom.config.set('editor.tabLength', 100)
atom.config.set('editor.softWrap', false)
atom.config.set('editor.softTabs', true)
editor2 = atom.project.openSync('b')
expect(editor2.getTabLength()).toBe 100
expect(editor2.getSoftWrap()).toBe false
expect(editor2.getSoftTabs()).toBe true
waitsForPromise ->
atom.workspace.open('a').then (o) -> editor1 = o
runs ->
expect(editor1.getTabLength()).toBe 4
expect(editor1.getSoftWrap()).toBe true
expect(editor1.getSoftTabs()).toBe false
atom.config.set('editor.tabLength', 100)
atom.config.set('editor.softWrap', false)
atom.config.set('editor.softTabs', true)
waitsForPromise ->
atom.workspace.open('b').then (o) -> editor2 = o
runs ->
expect(editor2.getTabLength()).toBe 100
expect(editor2.getSoftWrap()).toBe false
expect(editor2.getSoftTabs()).toBe true
describe "title", ->
describe ".getTitle()", ->
@@ -111,6 +142,21 @@ describe "Editor", ->
editor.moveCursorDown()
expect(editor.getCursorBufferPosition()).toEqual [1, 1]
it "emits a single 'cursors-moved' event for all moved cursors", ->
editor.on 'cursors-moved', cursorsMovedHandler = jasmine.createSpy("cursorsMovedHandler")
editor.moveCursorDown()
expect(cursorsMovedHandler.callCount).toBe 1
cursorsMovedHandler.reset()
editor.addCursorAtScreenPosition([3, 0])
editor.moveCursorDown()
expect(cursorsMovedHandler.callCount).toBe 1
cursorsMovedHandler.reset()
editor.getCursor().moveDown()
expect(cursorsMovedHandler.callCount).toBe 1
describe ".setCursorScreenPosition(screenPosition)", ->
it "clears a goal column established by vertical movement", ->
# set a goal column by moving down
@@ -576,6 +622,38 @@ describe "Editor", ->
editor.moveCursorToBeginningOfNextWord()
expect(editor.getCursorBufferPosition()).toEqual [11, 9]
describe ".moveCursorToBeginningOfNextParagraph()", ->
it "moves the cursor before the first line of the next paragraph", ->
editor.setCursorBufferPosition [0,6]
cursor = editor.getCursor()
editor.moveCursorToBeginningOfNextParagraph()
expect(cursor.getBufferPosition()).toEqual { row : 10, column : 0 }
editor.setText("")
editor.setCursorBufferPosition [0,0]
cursor = editor.getCursor()
editor.moveCursorToBeginningOfNextParagraph()
expect(cursor.getBufferPosition()).toEqual [0, 0]
describe ".moveCursorToBeginningOfPreviousParagraph()", ->
it "moves the cursor before the first line of the pevious paragraph", ->
editor.setCursorBufferPosition [10,0]
cursor = editor.getCursor()
editor.moveCursorToBeginningOfPreviousParagraph()
expect(cursor.getBufferPosition()).toEqual { row : 0, column : 0 }
editor.setText("")
editor.setCursorBufferPosition [0,0]
cursor = editor.getCursor()
editor.moveCursorToBeginningOfPreviousParagraph()
expect(cursor.getBufferPosition()).toEqual [0, 0]
describe ".getCurrentParagraphBufferRange()", ->
it "returns the buffer range of the current paragraph, delimited by blank lines or the beginning / end of the file", ->
buffer.setText """
@@ -645,6 +723,68 @@ describe "Editor", ->
cursor2 = editor.addCursorAtBufferPosition([1,4])
expect(cursor2.marker).toBe cursor1.marker
describe "autoscroll", ->
beforeEach ->
editor.manageScrollPosition = true
editor.setVerticalScrollMargin(2)
editor.setHorizontalScrollMargin(2)
editor.setLineHeightInPixels(10)
editor.setDefaultCharWidth(10)
editor.setHorizontalScrollbarHeight(0)
editor.setHeight(5.5 * 10)
editor.setWidth(5.5 * 10)
it "scrolls down when the last cursor gets closer than ::verticalScrollMargin to the bottom of the editor", ->
expect(editor.getScrollTop()).toBe 0
expect(editor.getScrollBottom()).toBe 5.5 * 10
editor.setCursorScreenPosition([2, 0])
expect(editor.getScrollBottom()).toBe 5.5 * 10
editor.moveCursorDown()
expect(editor.getScrollBottom()).toBe 6 * 10
editor.moveCursorDown()
expect(editor.getScrollBottom()).toBe 7 * 10
it "scrolls up when the last cursor gets closer than ::verticalScrollMargin to the top of the editor", ->
editor.setCursorScreenPosition([11, 0])
editor.setScrollBottom(editor.getScrollHeight())
editor.moveCursorUp()
expect(editor.getScrollBottom()).toBe editor.getScrollHeight()
editor.moveCursorUp()
expect(editor.getScrollTop()).toBe 7 * 10
editor.moveCursorUp()
expect(editor.getScrollTop()).toBe 6 * 10
it "scrolls right when the last cursor gets closer than ::horizontalScrollMargin to the right of the editor", ->
expect(editor.getScrollLeft()).toBe 0
expect(editor.getScrollRight()).toBe 5.5 * 10
editor.setCursorScreenPosition([0, 2])
expect(editor.getScrollRight()).toBe 5.5 * 10
editor.moveCursorRight()
expect(editor.getScrollRight()).toBe 6 * 10
editor.moveCursorRight()
expect(editor.getScrollRight()).toBe 7 * 10
it "scrolls left when the last cursor gets closer than ::horizontalScrollMargin to the left of the editor", ->
editor.setScrollRight(editor.getScrollWidth())
editor.setCursorScreenPosition([6, 62])
expect(editor.getScrollRight()).toBe editor.getScrollWidth()
editor.moveCursorLeft()
expect(editor.getScrollLeft()).toBe 59 * 10
editor.moveCursorLeft()
expect(editor.getScrollLeft()).toBe 58 * 10
describe "selection", ->
selection = null
@@ -683,7 +823,7 @@ describe "Editor", ->
expect(selection1.isReversed()).toBeFalsy()
it "merges selections when they intersect when moving up", ->
editor.setSelectedBufferRanges([[[0,9], [0,13]], [[1,10], [1,20]]], isReversed: true)
editor.setSelectedBufferRanges([[[0,9], [0,13]], [[1,10], [1,20]]], reversed: true)
[selection1, selection2] = editor.getSelections()
editor.selectUp()
@@ -694,7 +834,7 @@ describe "Editor", ->
expect(selection1.isReversed()).toBeTruthy()
it "merges selections when they intersect when moving left", ->
editor.setSelectedBufferRanges([[[0,9], [0,13]], [[0,14], [1,20]]], isReversed: true)
editor.setSelectedBufferRanges([[[0,9], [0,13]], [[0,14], [1,20]]], reversed: true)
[selection1, selection2] = editor.getSelections()
editor.selectLeft()
@@ -723,6 +863,30 @@ describe "Editor", ->
expect(selection1.getScreenRange()).toEqual [[3, 0], [4, 5]]
expect(selection2.getScreenRange()).toEqual [[5, 6], [6, 2]]
describe ".selectToBeginningOfNextParagraph()", ->
it "selects from the cursor to first line of the next paragraph", ->
editor.setSelectedBufferRange([[3, 0], [4, 5]])
editor.addCursorAtScreenPosition([5, 6])
editor.selectToScreenPosition([6, 2])
editor.selectToBeginningOfNextParagraph()
selections = editor.getSelections()
expect(selections.length).toBe 1
expect(selections[0].getScreenRange()).toEqual [[3, 0], [10, 0]]
describe ".selectToBeginningOfPreviousParagraph()", ->
it "selects from the cursor to the first line of the pevious paragraph", ->
editor.setSelectedBufferRange([[3, 0], [4, 5]])
editor.addCursorAtScreenPosition([5, 6])
editor.selectToScreenPosition([6, 2])
editor.selectToBeginningOfPreviousParagraph()
selections = editor.getSelections()
expect(selections.length).toBe 1
expect(selections[0].getScreenRange()).toEqual [[0, 0], [5, 6]]
it "merges selections if they intersect, maintaining the directionality of the last selection", ->
editor.setCursorScreenPosition([4, 10])
editor.selectToScreenPosition([5, 27])
@@ -1000,7 +1164,7 @@ describe "Editor", ->
expect(selection1).toBe selection
expect(selection1.getBufferRange()).toEqual [[2, 2], [3, 3]]
describe "when the preserveFolds option is false (the default)", ->
describe "when the 'preserveFolds' option is false (the default)", ->
it "removes folds that contain the selections", ->
editor.setSelectedBufferRange([[0,0], [0,0]])
editor.createFold(1, 4)
@@ -1014,7 +1178,7 @@ describe "Editor", ->
expect(editor.lineForScreenRow(6).fold).toBeUndefined()
expect(editor.lineForScreenRow(10).fold).toBeDefined()
describe "when the preserve folds option is true", ->
describe "when the 'preserveFolds' option is true", ->
it "does not remove folds that contain the selections", ->
editor.setSelectedBufferRange([[0,0], [0,0]])
editor.createFold(1, 4)
@@ -1023,6 +1187,25 @@ describe "Editor", ->
expect(editor.isFoldedAtBufferRow(1)).toBeTruthy()
expect(editor.isFoldedAtBufferRow(6)).toBeTruthy()
describe ".setSelectedBufferRange(range)", ->
describe "when the 'autoscroll' option is true", ->
it "autoscrolls to the selection", ->
editor.manageScrollPosition = true
editor.setLineHeightInPixels(10)
editor.setDefaultCharWidth(10)
editor.setHeight(50)
editor.setWidth(50)
editor.setHorizontalScrollbarHeight(0)
expect(editor.getScrollTop()).toBe 0
editor.setSelectedBufferRange([[5, 6], [6, 8]], autoscroll: true)
expect(editor.getScrollBottom()).toBe (7 + editor.getVerticalScrollMargin()) * 10
expect(editor.getScrollRight()).toBe 50
editor.setSelectedBufferRange([[6, 6], [6, 8]], autoscroll: true)
expect(editor.getScrollBottom()).toBe (7 + editor.getVerticalScrollMargin()) * 10
expect(editor.getScrollRight()).toBe (8 + editor.getHorizontalScrollMargin()) * 10
describe ".selectMarker(marker)", ->
describe "if the marker is valid", ->
it "selects the marker's range and returns the selected range", ->
@@ -1245,10 +1428,14 @@ describe "Editor", ->
expect(selection.isEmpty()).toBeTruthy()
it "does not share selections between different edit sessions for the same buffer", ->
editor2 = atom.project.openSync('sample.js')
editor.setSelectedBufferRanges([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
editor2.setSelectedBufferRanges([[[8, 7], [6, 5]], [[4, 3], [2, 1]]])
expect(editor2.getSelectedBufferRanges()).not.toEqual editor.getSelectedBufferRanges()
editor2 = null
waitsForPromise ->
atom.project.open('sample.js').then (o) -> editor2 = o
runs ->
editor.setSelectedBufferRanges([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
editor2.setSelectedBufferRanges([[[8, 7], [6, 5]], [[4, 3], [2, 1]]])
expect(editor2.getSelectedBufferRanges()).not.toEqual editor.getSelectedBufferRanges()
describe "buffer manipulation", ->
describe ".insertText(text)", ->
@@ -1453,6 +1640,13 @@ describe "Editor", ->
expect(editor.lineForBufferRow(1)).toBe ' '
expect(editor.lineForBufferRow(2)).toBe '}'
describe "when a new line is appended before a closing tag (e.g. by pressing enter before a selection)", ->
it "moves the line down and keeps the indentation level the same when editor.autoIndent is true", ->
atom.config.set('editor.autoIndent', true)
editor.setCursorBufferPosition([9,2])
editor.insertNewline()
expect(editor.lineForBufferRow(10)).toBe ' };'
describe ".backspace()", ->
describe "when there is a single cursor", ->
changeScreenRangeHandler = null
@@ -1600,26 +1794,26 @@ describe "Editor", ->
editor.backspace()
expect(editor.lineForBufferRow(0)).toBe 'var = () {'
describe ".backspaceToBeginningOfWord()", ->
describe ".deleteToBeginningOfWord()", ->
describe "when no text is selected", ->
it "deletes all text between the cursor and the beginning of the word", ->
editor.setCursorBufferPosition([1, 24])
editor.addCursorAtBufferPosition([3, 5])
[cursor1, cursor2] = editor.getCursors()
editor.backspaceToBeginningOfWord()
editor.deleteToBeginningOfWord()
expect(buffer.lineForRow(1)).toBe ' var sort = function(ems) {'
expect(buffer.lineForRow(3)).toBe ' ar pivot = items.shift(), current, left = [], right = [];'
expect(cursor1.getBufferPosition()).toEqual [1, 22]
expect(cursor2.getBufferPosition()).toEqual [3, 4]
editor.backspaceToBeginningOfWord()
editor.deleteToBeginningOfWord()
expect(buffer.lineForRow(1)).toBe ' var sort = functionems) {'
expect(buffer.lineForRow(2)).toBe ' if (items.length <= 1) return itemsar pivot = items.shift(), current, left = [], right = [];'
expect(cursor1.getBufferPosition()).toEqual [1, 21]
expect(cursor2.getBufferPosition()).toEqual [2, 39]
editor.backspaceToBeginningOfWord()
editor.deleteToBeginningOfWord()
expect(buffer.lineForRow(1)).toBe ' var sort = ems) {'
expect(buffer.lineForRow(2)).toBe ' if (items.length <= 1) return ar pivot = items.shift(), current, left = [], right = [];'
expect(cursor1.getBufferPosition()).toEqual [1, 13]
@@ -1627,24 +1821,50 @@ describe "Editor", ->
editor.setText(' var sort')
editor.setCursorBufferPosition([0, 2])
editor.backspaceToBeginningOfWord()
editor.deleteToBeginningOfWord()
expect(buffer.lineForRow(0)).toBe 'var sort'
describe "when text is selected", ->
it "deletes only selected text", ->
editor.setSelectedBufferRanges([[[1, 24], [1, 27]], [[2, 0], [2, 4]]])
editor.backspaceToBeginningOfWord()
editor.deleteToBeginningOfWord()
expect(buffer.lineForRow(1)).toBe ' var sort = function(it) {'
expect(buffer.lineForRow(2)).toBe 'if (items.length <= 1) return items;'
describe ".backspaceToBeginningOfLine()", ->
describe '.deleteToEndOfLine()', ->
describe 'when no text is selected', ->
it 'deletes all text between the cursor and the end of the line', ->
editor.setCursorBufferPosition([1, 24])
editor.addCursorAtBufferPosition([2, 5])
[cursor1, cursor2] = editor.getCursors()
editor.deleteToEndOfLine()
expect(buffer.lineForRow(1)).toBe ' var sort = function(it'
expect(buffer.lineForRow(2)).toBe ' i'
expect(cursor1.getBufferPosition()).toEqual [1, 24]
expect(cursor2.getBufferPosition()).toEqual [2, 5]
describe 'when at the end of the line', ->
it 'deletes the next newline', ->
editor.setCursorBufferPosition([1, 30])
editor.deleteToEndOfLine()
expect(buffer.lineForRow(1)).toBe ' var sort = function(items) { if (items.length <= 1) return items;'
describe 'when text is selected', ->
it 'deletes only the text in the selection', ->
editor.setSelectedBufferRanges([[[1, 24], [1, 27]], [[2, 0], [2, 4]]])
editor.deleteToEndOfLine()
expect(buffer.lineForRow(1)).toBe ' var sort = function(it) {'
expect(buffer.lineForRow(2)).toBe 'if (items.length <= 1) return items;'
describe ".deleteToBeginningOfLine()", ->
describe "when no text is selected", ->
it "deletes all text between the cursor and the beginning of the line", ->
editor.setCursorBufferPosition([1, 24])
editor.addCursorAtBufferPosition([2, 5])
[cursor1, cursor2] = editor.getCursors()
editor.backspaceToBeginningOfLine()
editor.deleteToBeginningOfLine()
expect(buffer.lineForRow(1)).toBe 'ems) {'
expect(buffer.lineForRow(2)).toBe 'f (items.length <= 1) return items;'
expect(cursor1.getBufferPosition()).toEqual [1, 0]
@@ -1653,13 +1873,13 @@ describe "Editor", ->
describe "when at the beginning of the line", ->
it "deletes the newline", ->
editor.setCursorBufferPosition([2])
editor.backspaceToBeginningOfLine()
editor.deleteToBeginningOfLine()
expect(buffer.lineForRow(1)).toBe ' var sort = function(items) { if (items.length <= 1) return items;'
describe "when text is selected", ->
it "still deletes all text to begginning of the line", ->
editor.setSelectedBufferRanges([[[1, 24], [1, 27]], [[2, 0], [2, 4]]])
editor.backspaceToBeginningOfLine()
editor.deleteToBeginningOfLine()
expect(buffer.lineForRow(1)).toBe 'ems) {'
expect(buffer.lineForRow(2)).toBe ' if (items.length <= 1) return items;'
@@ -1932,17 +2152,44 @@ describe "Editor", ->
describe ".copySelectedText()", ->
it "copies selected text onto the clipboard", ->
editor.setSelectedBufferRanges([[[0,4], [0,13]], [[1,6], [1, 10]], [[2,8], [2, 13]]])
editor.copySelectedText()
expect(buffer.lineForRow(0)).toBe "var quicksort = function () {"
expect(buffer.lineForRow(1)).toBe " var sort = function(items) {"
expect(clipboard.readText()).toBe 'quicksort\nsort'
expect(buffer.lineForRow(2)).toBe " if (items.length <= 1) return items;"
expect(clipboard.readText()).toBe 'quicksort\nsort\nitems'
expect(atom.clipboard.readWithMetadata().metadata.selections).toEqual([
'quicksort'
'sort'
'items'
])
describe ".pasteText()", ->
it "pastes text into the buffer", ->
atom.clipboard.write('first')
editor.pasteText()
expect(editor.buffer.lineForRow(0)).toBe "var first = function () {"
expect(buffer.lineForRow(1)).toBe " var first = function(items) {"
expect(editor.lineForBufferRow(0)).toBe "var first = function () {"
expect(editor.lineForBufferRow(1)).toBe " var first = function(items) {"
describe 'when the clipboard has many selections', ->
it "pastes each selection separately into the buffer", ->
atom.clipboard.write('first\nsecond', {selections: ['first', 'second'] })
editor.pasteText()
expect(editor.lineForBufferRow(0)).toBe "var first = function () {"
expect(editor.lineForBufferRow(1)).toBe " var second = function(items) {"
describe 'and the selections count does not match', ->
it "pastes the whole text into the buffer", ->
atom.clipboard.write('first\nsecond\nthird', {selections: ['first', 'second', 'third'] })
editor.pasteText()
expect(editor.lineForBufferRow(0)).toBe "var first"
expect(editor.lineForBufferRow(1)).toBe "second"
expect(editor.lineForBufferRow(2)).toBe "third = function () {"
expect(editor.lineForBufferRow(3)).toBe " var first"
expect(editor.lineForBufferRow(4)).toBe "second"
expect(editor.lineForBufferRow(5)).toBe "third = function(items) {"
describe ".indentSelectedRows()", ->
describe "when nothing is selected", ->
@@ -2037,6 +2284,15 @@ describe "Editor", ->
editor.outdentSelectedRows()
expect(buffer.lineForRow(0)).toBe "var quicksort = function () {"
it "outdents only up to the first non-space non-tab character", ->
editor.insertText(' \tfoo\t ')
editor.outdentSelectedRows()
expect(buffer.lineForRow(0)).toBe "\tfoo\t var quicksort = function () {"
editor.outdentSelectedRows()
expect(buffer.lineForRow(0)).toBe "foo\t var quicksort = function () {"
editor.outdentSelectedRows()
expect(buffer.lineForRow(0)).toBe "foo\t var quicksort = function () {"
describe "when one line is selected", ->
it "outdents line and retains editor", ->
editor.setSelectedBufferRange([[1,4], [1,14]])
@@ -2131,10 +2387,14 @@ describe "Editor", ->
it "does not explode if the current language mode has no comment regex", ->
editor.destroy()
editor = atom.project.openSync(null, autoIndent: false)
editor.setSelectedBufferRange([[4, 5], [4, 5]])
editor.toggleLineCommentsInSelection()
expect(buffer.lineForRow(4)).toBe " while(items.length > 0) {"
waitsForPromise ->
atom.workspace.open(null, autoIndent: false).then (o) -> editor = o
runs ->
editor.setSelectedBufferRange([[4, 5], [4, 5]])
editor.toggleLineCommentsInSelection()
expect(buffer.lineForRow(4)).toBe " while(items.length > 0) {"
it "uncomments when the line lacks the trailing whitespace in the comment regex", ->
editor.setCursorBufferPosition([10, 0])
@@ -2453,14 +2713,21 @@ describe "Editor", ->
describe "soft-tabs detection", ->
it "assigns soft / hard tabs based on the contents of the buffer, or uses the default if unknown", ->
editor = atom.project.openSync('sample.js', softTabs: false)
expect(editor.getSoftTabs()).toBeTruthy()
waitsForPromise ->
atom.workspace.open('sample.js', softTabs: false).then (editor) ->
expect(editor.getSoftTabs()).toBeTruthy()
editor = atom.project.openSync('sample-with-tabs.coffee', softTabs: true)
expect(editor.getSoftTabs()).toBeFalsy()
waitsForPromise ->
atom.workspace.open('sample-with-tabs.coffee', softTabs: true).then (editor) ->
expect(editor.getSoftTabs()).toBeFalsy()
editor = atom.project.openSync(null, softTabs: false)
expect(editor.getSoftTabs()).toBeFalsy()
waitsForPromise ->
atom.workspace.open('sample-with-tabs-and-initial-comment.js', softTabs: true).then (editor) ->
expect(editor.getSoftTabs()).toBeFalsy()
waitsForPromise ->
atom.workspace.open(null, softTabs: false).then (editor) ->
expect(editor.getSoftTabs()).toBeFalsy()
describe ".indentLevelForLine(line)", ->
it "returns the indent level when the line has only leading whitespace", ->
@@ -2484,16 +2751,21 @@ describe "Editor", ->
describe "when a better-matched grammar is added to syntax", ->
it "switches to the better-matched grammar and re-tokenizes the buffer", ->
editor.destroy()
jsGrammar = atom.syntax.selectGrammar('a.js')
atom.syntax.removeGrammar(jsGrammar)
editor2 = atom.project.openSync('sample.js', autoIndent: false)
expect(editor2.getGrammar()).toBe atom.syntax.nullGrammar
expect(editor2.lineForScreenRow(0).tokens.length).toBe 1
waitsForPromise ->
atom.workspace.open('sample.js', autoIndent: false).then (o) -> editor = o
atom.syntax.addGrammar(jsGrammar)
expect(editor2.getGrammar()).toBe jsGrammar
expect(editor2.lineForScreenRow(0).tokens.length).toBeGreaterThan 1
runs ->
expect(editor.getGrammar()).toBe atom.syntax.nullGrammar
expect(editor.lineForScreenRow(0).tokens.length).toBe 1
atom.syntax.addGrammar(jsGrammar)
expect(editor.getGrammar()).toBe jsGrammar
expect(editor.lineForScreenRow(0).tokens.length).toBeGreaterThan 1
describe "auto-indent", ->
copyText = (text, {startColumn}={}) ->
@@ -2670,6 +2942,18 @@ describe "Editor", ->
expect(editor.lineForBufferRow(4)).toBe " }"
expect(editor.lineForBufferRow(5)).toBe " i=1"
describe "soft and hard tabs", ->
it "resets the tab style when tokenization is complete", ->
editor.destroy()
atom.project.open('sample-with-tabs-and-leading-comment.coffee').then (o) -> editor = o
expect(editor.softTabs).toBe true
waitsForPromise ->
atom.packages.activatePackage('language-coffee-script')
runs ->
expect(editor.softTabs).toBe false
describe ".destroy()", ->
it "destroys all markers associated with the edit session", ->
expect(buffer.getMarkerCount()).toBeGreaterThan 0
@@ -2780,10 +3064,15 @@ describe "Editor", ->
expect(editor.shouldPromptToSave()).toBeFalsy()
buffer.setText('changed')
expect(editor.shouldPromptToSave()).toBeTruthy()
editor2 = atom.project.openSync('sample.js', autoIndent: false)
expect(editor.shouldPromptToSave()).toBeFalsy()
editor2.destroy()
expect(editor.shouldPromptToSave()).toBeTruthy()
editor2 = null
waitsForPromise ->
atom.project.open('sample.js', autoIndent: false).then (o) -> editor2 = o
runs ->
expect(editor.shouldPromptToSave()).toBeFalsy()
editor2.destroy()
expect(editor.shouldPromptToSave()).toBeTruthy()
describe "when the edit session contains surrogate pair characters", ->
it "correctly backspaces over them", ->
@@ -2879,12 +3168,15 @@ describe "Editor", ->
describe "when the grammar is added", ->
it "retokenizes existing buffers that contain tokens that match the injection selector", ->
editor = atom.project.openSync('sample.js')
editor.setText("// http://github.com")
waitsForPromise ->
atom.workspace.open('sample.js').then (o) -> editor = o
{tokens} = editor.lineForScreenRow(0)
expect(tokens[1].value).toBe " http://github.com"
expect(tokens[1].scopes).toEqual ["source.js", "comment.line.double-slash.js"]
runs ->
editor.setText("// http://github.com")
{tokens} = editor.lineForScreenRow(0)
expect(tokens[1].value).toBe " http://github.com"
expect(tokens[1].scopes).toEqual ["source.js", "comment.line.double-slash.js"]
waitsForPromise ->
atom.packages.activatePackage('language-hyperlink')
@@ -2896,12 +3188,15 @@ describe "Editor", ->
describe "when the grammar is updated", ->
it "retokenizes existing buffers that contain tokens that match the injection selector", ->
editor = atom.project.openSync('sample.js')
editor.setText("// SELECT * FROM OCTOCATS")
waitsForPromise ->
atom.workspace.open('sample.js').then (o) -> editor = o
{tokens} = editor.lineForScreenRow(0)
expect(tokens[1].value).toBe " SELECT * FROM OCTOCATS"
expect(tokens[1].scopes).toEqual ["source.js", "comment.line.double-slash.js"]
runs ->
editor.setText("// SELECT * FROM OCTOCATS")
{tokens} = editor.lineForScreenRow(0)
expect(tokens[1].value).toBe " SELECT * FROM OCTOCATS"
expect(tokens[1].scopes).toEqual ["source.js", "comment.line.double-slash.js"]
waitsForPromise ->
atom.packages.activatePackage('package-with-injection-selector')
@@ -2934,3 +3229,77 @@ describe "Editor", ->
editor.setSoftTabs(false)
editor.normalizeTabsInBufferRange([[0, 0], [Infinity, Infinity]])
expect(editor.getText()).toBe ' '
describe ".scrollToCursorPosition()", ->
it "scrolls the last cursor into view", ->
editor.setCursorScreenPosition([8, 8])
editor.setLineHeightInPixels(10)
editor.setDefaultCharWidth(10)
editor.setHeight(50)
editor.setWidth(50)
editor.setHorizontalScrollbarHeight(0)
expect(editor.getScrollTop()).toBe 0
expect(editor.getScrollLeft()).toBe 0
editor.scrollToCursorPosition()
expect(editor.getScrollBottom()).toBe (9 + editor.getVerticalScrollMargin()) * 10
expect(editor.getScrollRight()).toBe (9 + editor.getHorizontalScrollMargin()) * 10
describe ".pageUp/Down()", ->
it "scrolls one screen height up or down and moves the cursor one page length", ->
editor.manageScrollPosition = true
editor.setLineHeightInPixels(10)
editor.setHeight(50)
expect(editor.getScrollHeight()).toBe 130
expect(editor.getCursorBufferPosition().row).toBe 0
editor.pageDown()
expect(editor.getScrollTop()).toBe 50
expect(editor.getCursorBufferPosition().row).toBe 5
editor.pageDown()
expect(editor.getScrollTop()).toBe 80
expect(editor.getCursorBufferPosition().row).toBe 10
editor.pageUp()
expect(editor.getScrollTop()).toBe 30
expect(editor.getCursorBufferPosition().row).toBe 5
editor.pageUp()
expect(editor.getScrollTop()).toBe 0
expect(editor.getCursorBufferPosition().row).toBe 0
describe ".selectPageUp/Down()", ->
it "selects one screen height of text up or down", ->
editor.manageScrollPosition = true
editor.setLineHeightInPixels(10)
editor.setHeight(50)
expect(editor.getScrollHeight()).toBe 130
expect(editor.getCursorBufferPosition().row).toBe 0
editor.selectPageDown()
expect(editor.getScrollTop()).toBe 30
expect(editor.getSelectedBufferRanges()).toEqual [[[0,0], [5,0]]]
editor.selectPageDown()
expect(editor.getScrollTop()).toBe 80
expect(editor.getSelectedBufferRanges()).toEqual [[[0,0], [10,0]]]
editor.selectPageDown()
expect(editor.getScrollTop()).toBe 80
expect(editor.getSelectedBufferRanges()).toEqual [[[0,0], [12,2]]]
editor.moveCursorToBottom()
editor.selectPageUp()
expect(editor.getScrollTop()).toBe 50
expect(editor.getSelectedBufferRanges()).toEqual [[[7,0], [12,2]]]
editor.selectPageUp()
expect(editor.getScrollTop()).toBe 0
expect(editor.getSelectedBufferRanges()).toEqual [[[2,0], [12,2]]]
editor.selectPageUp()
expect(editor.getScrollTop()).toBe 0
expect(editor.getSelectedBufferRanges()).toEqual [[[0,0], [12,2]]]
+213 -123
Ver Arquivo
@@ -7,28 +7,38 @@ path = require 'path'
temp = require 'temp'
describe "EditorView", ->
[buffer, editorView, editor, cachedLineHeight, cachedCharWidth] = []
[buffer, editorView, editor, cachedEditor, cachedLineHeight, cachedCharWidth, fart] = []
beforeEach ->
editor = atom.project.openSync('sample.js')
buffer = editor.buffer
editorView = new EditorView(editor)
editorView.lineOverdraw = 2
editorView.isFocused = true
editorView.enableKeymap()
editorView.calculateHeightInLines = ->
Math.ceil(@height() / @lineHeight)
editorView.attachToDom = ({ heightInLines, widthInChars } = {}) ->
heightInLines ?= @getEditor().getBuffer().getLineCount()
@height(getLineHeight() * heightInLines)
@width(getCharWidth() * widthInChars) if widthInChars
$('#jasmine-content').append(this)
atom.config.set 'core.useReactEditor', false
waitsForPromise ->
atom.packages.activatePackage('language-text', sync: true)
atom.workspace.open('sample.js').then (o) -> editor = o
waitsForPromise ->
atom.packages.activatePackage('language-javascript', sync: true)
atom.workspace.open('sample.less').then (o) -> cachedEditor = o
runs ->
buffer = editor.buffer
editorView = new EditorView(editor)
editorView.lineOverdraw = 2
editorView.isFocused = true
editorView.enableKeymap()
editorView.calculateHeightInLines = ->
Math.ceil(@height() / @lineHeight)
editorView.attachToDom = ({ heightInLines, widthInChars } = {}) ->
heightInLines ?= @getEditor().getBuffer().getLineCount()
@height(getLineHeight() * heightInLines)
@width(getCharWidth() * widthInChars) if widthInChars
$('#jasmine-content').append(this)
waitsForPromise ->
atom.packages.activatePackage('language-text')
waitsForPromise ->
atom.packages.activatePackage('language-javascript')
getLineHeight = ->
return cachedLineHeight if cachedLineHeight?
@@ -41,7 +51,7 @@ describe "EditorView", ->
cachedCharWidth
calcDimensions = ->
editorForMeasurement = new EditorView(editor: atom.project.openSync('sample.js'))
editorForMeasurement = new EditorView({editor: cachedEditor})
editorForMeasurement.attachToDom()
cachedLineHeight = editorForMeasurement.lineHeight
cachedCharWidth = editorForMeasurement.charWidth
@@ -105,18 +115,23 @@ describe "EditorView", ->
describe "when the editor's file is modified on disk", ->
it "triggers an alert", ->
fileChangeHandler = null
filePath = path.join(temp.dir, 'atom-changed-file.txt')
fs.writeFileSync(filePath, "")
editor = atom.project.openSync(filePath)
editorView.edit(editor)
editor.insertText("now the buffer is modified")
fileChangeHandler = jasmine.createSpy('fileChange')
editor.buffer.file.on 'contents-changed', fileChangeHandler
waitsForPromise ->
atom.workspace.open(filePath).then (o) -> editor = o
spyOn(atom, "confirm")
runs ->
editorView.edit(editor)
editor.insertText("now the buffer is modified")
fs.writeFileSync(filePath, "a file change")
fileChangeHandler = jasmine.createSpy('fileChange')
editor.buffer.file.on 'contents-changed', fileChangeHandler
spyOn(atom, "confirm")
fs.writeFileSync(filePath, "a file change")
waitsFor "file to trigger contents-changed event", ->
fileChangeHandler.callCount > 0
@@ -133,8 +148,11 @@ describe "EditorView", ->
[newEditor, newBuffer] = []
beforeEach ->
newEditor = atom.project.openSync('two-hundred.txt')
newBuffer = newEditor.buffer
waitsForPromise ->
atom.workspace.open('two-hundred.txt').then (o) -> newEditor = o
runs ->
newBuffer = newEditor.buffer
it "updates the rendered lines, cursors, selections, scroll position, and event subscriptions to match the given edit session", ->
editorView.attachToDom(heightInLines: 5, widthInChars: 30)
@@ -170,17 +188,24 @@ describe "EditorView", ->
expect(editorView.lineElementForScreenRow(6).text()).toMatch /^ currentgoodbye/
it "triggers alert if edit session's buffer goes into conflict with changes on disk", ->
contentsConflictedHandler = null
filePath = path.join(temp.dir, 'atom-changed-file.txt')
fs.writeFileSync(filePath, "")
tempEditor = atom.project.openSync(filePath)
editorView.edit(tempEditor)
tempEditor.insertText("a buffer change")
tempEditor = null
spyOn(atom, "confirm")
waitsForPromise ->
atom.workspace.open(filePath).then (o) -> tempEditor = o
runs ->
editorView.edit(tempEditor)
tempEditor.insertText("a buffer change")
spyOn(atom, "confirm")
contentsConflictedHandler = jasmine.createSpy("contentsConflictedHandler")
tempEditor.on 'contents-conflicted', contentsConflictedHandler
fs.writeFileSync(filePath, "a file change")
contentsConflictedHandler = jasmine.createSpy("contentsConflictedHandler")
tempEditor.on 'contents-conflicted', contentsConflictedHandler
fs.writeFileSync(filePath, "a file change")
waitsFor ->
contentsConflictedHandler.callCount > 0
@@ -281,26 +306,34 @@ describe "EditorView", ->
it "emits event when editor view view receives a new buffer", ->
eventHandler = jasmine.createSpy('eventHandler')
editorView.on 'editor:path-changed', eventHandler
editorView.edit(atom.project.openSync(filePath))
expect(eventHandler).toHaveBeenCalled()
waitsForPromise ->
atom.workspace.open(filePath).then (editor) ->
editorView.edit(editor)
runs ->
expect(eventHandler).toHaveBeenCalled()
it "stops listening to events on previously set buffers", ->
eventHandler = jasmine.createSpy('eventHandler')
oldBuffer = editor.getBuffer()
newEditor = atom.project.openSync(filePath)
editorView.on 'editor:path-changed', eventHandler
newEditor = null
waitsForPromise ->
atom.workspace.open(filePath).then (o) -> newEditor = o
editorView.edit(newEditor)
expect(eventHandler).toHaveBeenCalled()
runs ->
editorView.on 'editor:path-changed', eventHandler
eventHandler.reset()
oldBuffer.saveAs(path.join(temp.dir, 'atom-bad.txt'))
expect(eventHandler).not.toHaveBeenCalled()
editorView.edit(newEditor)
expect(eventHandler).toHaveBeenCalled()
eventHandler.reset()
newEditor.getBuffer().saveAs(path.join(temp.dir, 'atom-new.txt'))
expect(eventHandler).toHaveBeenCalled()
eventHandler.reset()
oldBuffer.saveAs(path.join(temp.dir, 'atom-bad.txt'))
expect(eventHandler).not.toHaveBeenCalled()
eventHandler.reset()
newEditor.getBuffer().saveAs(path.join(temp.dir, 'atom-new.txt'))
expect(eventHandler).toHaveBeenCalled()
it "loads the grammar for the new path", ->
expect(editor.getGrammar().name).toBe 'JavaScript'
@@ -478,7 +511,7 @@ describe "EditorView", ->
expect(editor.getSelectedBufferRange()).toEqual [[3, 10], [3, 12]]
describe "when clicking between a word and a non-word", ->
describe "when double-clicking between a word and a non-word", ->
it "selects the word", ->
expect(editor.getCursorScreenPosition()).toEqual(row: 0, column: 0)
editorView.renderedLines.trigger mousedownEvent(editorView: editorView, point: [1, 21], originalEvent: {detail: 1})
@@ -501,6 +534,30 @@ describe "EditorView", ->
editorView.renderedLines.trigger 'mouseup'
expect(editor.getSelectedText()).toBe "{"
describe "when double-clicking on whitespace", ->
it "selects all adjacent whitespace", ->
editor.setText(" some text ")
editor.setCursorBufferPosition([0, 2])
editorView.renderedLines.trigger mousedownEvent(editorView: editorView, point: [0, 2], originalEvent: {detail: 1})
editorView.renderedLines.trigger 'mouseup'
editorView.renderedLines.trigger mousedownEvent(editorView: editorView, point: [0, 2], originalEvent: {detail: 2})
editorView.renderedLines.trigger 'mouseup'
expect(editor.getSelectedBufferRange()).toEqual [[0, 0], [0, 3]]
editor.setCursorBufferPosition([0, 8])
editorView.renderedLines.trigger mousedownEvent(editorView: editorView, point: [0, 8], originalEvent: {detail: 1})
editorView.renderedLines.trigger 'mouseup'
editorView.renderedLines.trigger mousedownEvent(editorView: editorView, point: [0, 8], originalEvent: {detail: 2})
editorView.renderedLines.trigger 'mouseup'
expect(editor.getSelectedBufferRange()).toEqual [[0, 7], [0, 9]]
editor.setCursorBufferPosition([0, 14])
editorView.renderedLines.trigger mousedownEvent(editorView: editorView, point: [0, 14], originalEvent: {detail: 1})
editorView.renderedLines.trigger 'mouseup'
editorView.renderedLines.trigger mousedownEvent(editorView: editorView, point: [0, 14], originalEvent: {detail: 2})
editorView.renderedLines.trigger 'mouseup'
expect(editor.getSelectedBufferRange()).toEqual [[0, 13], [0, 17]]
describe "triple/quardruple/etc-click", ->
it "selects the line under the cursor", ->
expect(editor.getCursorScreenPosition()).toEqual(row: 0, column: 0)
@@ -1385,7 +1442,7 @@ describe "EditorView", ->
expect(editorView.renderedLines.find(".line:first").text()).toBe buffer.lineForRow(6)
expect(editorView.renderedLines.find(".line:last").text()).toBe buffer.lineForRow(12)
buffer.change([[1,0], [3,0]], "1\n2\n3\n")
buffer.setTextInRange([[1,0], [3,0]], "1\n2\n3\n")
expect(editorView.renderedLines.find(".line").length).toBe 7
expect(editorView.renderedLines.find(".line:first").text()).toBe buffer.lineForRow(6)
expect(editorView.renderedLines.find(".line:last").text()).toBe buffer.lineForRow(12)
@@ -1398,21 +1455,21 @@ describe "EditorView", ->
expect(editorView.renderedLines.find(".line:first").text()).toBe buffer.lineForRow(6)
expect(editorView.renderedLines.find(".line:last").text()).toBe buffer.lineForRow(12)
buffer.change([[2,0], [7,0]], "2\n3\n4\n5\n6\n7\n8\n9\n")
buffer.setTextInRange([[2,0], [7,0]], "2\n3\n4\n5\n6\n7\n8\n9\n")
expect(editorView.renderedLines.find(".line").length).toBe 7
expect(editorView.renderedLines.find(".line:first").text()).toBe buffer.lineForRow(6)
expect(editorView.renderedLines.find(".line:last").text()).toBe buffer.lineForRow(12)
describe "when the change straddles the last rendered row", ->
it "doesn't render rows that were not previously rendered", ->
buffer.change([[2,0], [7,0]], "2\n3\n4\n5\n6\n7\n8\n")
buffer.setTextInRange([[2,0], [7,0]], "2\n3\n4\n5\n6\n7\n8\n")
expect(editorView.renderedLines.find(".line").length).toBe 7
expect(editorView.renderedLines.find(".line:first").text()).toBe buffer.lineForRow(0)
expect(editorView.renderedLines.find(".line:last").text()).toBe buffer.lineForRow(6)
describe "when the change the follows the last rendered row", ->
it "does not change the rendered lines", ->
buffer.change([[12,0], [12,0]], "12\n13\n14\n")
buffer.setTextInRange([[12,0], [12,0]], "12\n13\n14\n")
expect(editorView.renderedLines.find(".line").length).toBe 7
expect(editorView.renderedLines.find(".line:first").text()).toBe buffer.lineForRow(0)
expect(editorView.renderedLines.find(".line:last").text()).toBe buffer.lineForRow(6)
@@ -1422,7 +1479,7 @@ describe "EditorView", ->
setEditorWidthInChars(editorView, maxLineLength)
widthBefore = editorView.renderedLines.width()
expect(widthBefore).toBe editorView.scrollView.width() + 20
buffer.change([[12,0], [12,0]], [1..maxLineLength*2].join(''))
buffer.setTextInRange([[12,0], [12,0]], [1..maxLineLength*2].join(''))
expect(editorView.renderedLines.width()).toBeGreaterThan widthBefore
describe "when lines are removed", ->
@@ -1432,7 +1489,7 @@ describe "EditorView", ->
it "sets the rendered screen line's width to either the max line length or the scollView's width (whichever is greater)", ->
maxLineLength = editor.getMaxScreenLineLength()
setEditorWidthInChars(editorView, maxLineLength)
buffer.change([[12,0], [12,0]], [1..maxLineLength*2].join(''))
buffer.setTextInRange([[12,0], [12,0]], [1..maxLineLength*2].join(''))
expect(editorView.renderedLines.width()).toBeGreaterThan editorView.scrollView.width()
widthBefore = editorView.renderedLines.width()
buffer.delete([[12, 0], [12, Infinity]])
@@ -1445,7 +1502,7 @@ describe "EditorView", ->
expect(editorView.renderedLines.find(".line:first").text()).toBe buffer.lineForRow(6)
expect(editorView.renderedLines.find(".line:last").text()).toBe buffer.lineForRow(12)
buffer.change([[1,0], [2,0]], "")
buffer.setTextInRange([[1,0], [2,0]], "")
expect(editorView.renderedLines.find(".line").length).toBe 6
expect(editorView.renderedLines.find(".line:first").text()).toBe buffer.lineForRow(6)
expect(editorView.renderedLines.find(".line:last").text()).toBe buffer.lineForRow(11)
@@ -1457,21 +1514,21 @@ describe "EditorView", ->
expect(editorView.renderedLines.find(".line:first").text()).toBe buffer.lineForRow(6)
expect(editorView.renderedLines.find(".line:last").text()).toBe buffer.lineForRow(12)
buffer.change([[7,0], [11,0]], "1\n2\n")
buffer.setTextInRange([[7,0], [11,0]], "1\n2\n")
expect(editorView.renderedLines.find(".line").length).toBe 5
expect(editorView.renderedLines.find(".line:first").text()).toBe buffer.lineForRow(6)
expect(editorView.renderedLines.find(".line:last").text()).toBe buffer.lineForRow(10)
describe "when the change straddles the last rendered row", ->
it "renders the correct rows", ->
buffer.change([[2,0], [7,0]], "")
buffer.setTextInRange([[2,0], [7,0]], "")
expect(editorView.renderedLines.find(".line").length).toBe 7
expect(editorView.renderedLines.find(".line:first").text()).toBe buffer.lineForRow(0)
expect(editorView.renderedLines.find(".line:last").text()).toBe buffer.lineForRow(6)
describe "when the change the follows the last rendered row", ->
it "does not change the rendered lines", ->
buffer.change([[10,0], [12,0]], "")
buffer.setTextInRange([[10,0], [12,0]], "")
expect(editorView.renderedLines.find(".line").length).toBe 7
expect(editorView.renderedLines.find(".line:first").text()).toBe buffer.lineForRow(0)
expect(editorView.renderedLines.find(".line:last").text()).toBe buffer.lineForRow(6)
@@ -1529,14 +1586,18 @@ describe "EditorView", ->
describe "when autoscrolling at the end of the document", ->
it "renders lines properly", ->
editorView.edit(atom.project.openSync('two-hundred.txt'))
editorView.attachToDom(heightInLines: 5.5)
waitsForPromise ->
atom.workspace.open('two-hundred.txt').then (editor) ->
editorView.edit(editor)
expect(editorView.renderedLines.find('.line').length).toBe 8
runs ->
editorView.attachToDom(heightInLines: 5.5)
editor.moveCursorToBottom()
expect(editorView.renderedLines.find('.line').length).toBe 8
expect(editorView.renderedLines.find('.line').length).toBe 8
editor.moveCursorToBottom()
expect(editorView.renderedLines.find('.line').length).toBe 8
describe "when line has a character that could push it to be too tall (regression)", ->
it "does renders the line at a consistent height", ->
@@ -1550,7 +1611,7 @@ describe "EditorView", ->
editorView.attachToDom()
expect(atom.config.get("editor.showInvisibles")).toBeFalsy()
expect(editorView.renderedLines.find('.line').text()).toBe " a line with tabs and spaces "
expect(editorView.renderedLines.find('.line').text()).toBe " a line with tabs and spaces "
atom.config.set("editor.showInvisibles", true)
space = editorView.invisibles?.space
@@ -1559,10 +1620,10 @@ describe "EditorView", ->
expect(tab).toBeTruthy()
eol = editorView.invisibles?.eol
expect(eol).toBeTruthy()
expect(editorView.renderedLines.find('.line').text()).toBe "#{space}a line with tabs#{tab} and spaces#{space}#{eol}"
expect(editorView.renderedLines.find('.line').text()).toBe "#{space}a line with tabs#{tab}and spaces#{space}#{eol}"
atom.config.set("editor.showInvisibles", false)
expect(editorView.renderedLines.find('.line').text()).toBe " a line with tabs and spaces "
expect(editorView.renderedLines.find('.line').text()).toBe " a line with tabs and spaces "
it "displays newlines as their own token outside of the other tokens scope", ->
editorView.setShowInvisibles(true)
@@ -1575,7 +1636,7 @@ describe "EditorView", ->
editorView.attachToDom()
atom.config.set("editor.showInvisibles", true)
atom.config.set("editor.invisibles", eol: ";", space: "_", tab: "tab")
expect(editorView.find(".line:first").text()).toBe "_tab _;"
expect(editorView.find(".line:first").text()).toBe "_tab_;"
it "displays trailing carriage return using a visible non-empty value", ->
editor.setText "a line that ends with a carriage return\r\n"
@@ -1596,7 +1657,7 @@ describe "EditorView", ->
editor.setSoftWrap(true)
it "doesn't show the end of line invisible at the end of lines broken due to wrapping", ->
editor.setText "a line that wraps"
editor.setText "a line that wraps "
editorView.attachToDom()
editorView.setWidthInChars(6)
atom.config.set "editor.showInvisibles", true
@@ -1604,11 +1665,11 @@ describe "EditorView", ->
expect(space).toBeTruthy()
eol = editorView.invisibles?.eol
expect(eol).toBeTruthy()
expect(editorView.renderedLines.find('.line:first').text()).toBe "a line#{space}"
expect(editorView.renderedLines.find('.line:last').text()).toBe "wraps#{eol}"
expect(editorView.renderedLines.find('.line:first').text()).toBe "a line "
expect(editorView.renderedLines.find('.line:last').text()).toBe "wraps#{space}#{eol}"
it "displays trailing carriage return using a visible non-empty value", ->
editor.setText "a line that\r\n"
editor.setText "a line that \r\n"
editorView.attachToDom()
editorView.setWidthInChars(6)
atom.config.set "editor.showInvisibles", true
@@ -1618,8 +1679,8 @@ describe "EditorView", ->
expect(cr).toBeTruthy()
eol = editorView.invisibles?.eol
expect(eol).toBeTruthy()
expect(editorView.renderedLines.find('.line:first').text()).toBe "a line#{space}"
expect(editorView.renderedLines.find('.line:eq(1)').text()).toBe "that#{cr}#{eol}"
expect(editorView.renderedLines.find('.line:first').text()).toBe "a line "
expect(editorView.renderedLines.find('.line:eq(1)').text()).toBe "that#{space}#{cr}#{eol}"
expect(editorView.renderedLines.find('.line:last').text()).toBe "#{eol}"
describe "when editor.showIndentGuide is set to true", ->
@@ -1744,6 +1805,13 @@ describe "EditorView", ->
expect(editorView.renderedLines.find('.line:eq(10) .indent-guide').text()).toBe "#{eol} "
expect(editorView.renderedLines.find('.line:eq(10) .invisible-character').text()).toBe eol
describe "when editor.showIndentGuide is set to false", ->
it "does not render the indent guide on whitespace only lines (regression)", ->
editorView.attachToDom()
editor.setText(' ')
atom.config.set('editor.showIndentGuide', false)
expect(editorView.renderedLines.find('.line:eq(0) .indent-guide').length).toBe 0
describe "when soft-wrap is enabled", ->
beforeEach ->
jasmine.unspy(window, 'setTimeout')
@@ -1784,10 +1852,14 @@ describe "EditorView", ->
expect(editor.bufferPositionForScreenPosition(editor.getCursorScreenPosition())).toEqual [3, 60]
it "does not wrap the lines of any newly assigned buffers", ->
otherEditor = atom.project.openSync()
otherEditor.buffer.setText([1..100].join(''))
editorView.edit(otherEditor)
expect(editorView.renderedLines.find('.line').length).toBe(1)
otherEditor = null
waitsForPromise ->
atom.workspace.open().then (o) -> otherEditor = o
runs ->
otherEditor.buffer.setText([1..100].join(''))
editorView.edit(otherEditor)
expect(editorView.renderedLines.find('.line').length).toBe(1)
it "unwraps lines when softwrap is disabled", ->
editorView.toggleSoftWrap()
@@ -1816,15 +1888,15 @@ describe "EditorView", ->
expect(editor.getCursorScreenPosition()).toEqual [11, 0]
it "calls .setWidthInChars() when the editor view is attached because now its dimensions are available to calculate it", ->
otherEditor = new EditorView(editor: atom.project.openSync('sample.js'))
spyOn(otherEditor, 'setWidthInChars')
otherEditorView = new EditorView(editor)
spyOn(otherEditorView, 'setWidthInChars')
otherEditor.editor.setSoftWrap(true)
expect(otherEditor.setWidthInChars).not.toHaveBeenCalled()
otherEditorView.editor.setSoftWrap(true)
expect(otherEditorView.setWidthInChars).not.toHaveBeenCalled()
otherEditor.simulateDomAttachment()
expect(otherEditor.setWidthInChars).toHaveBeenCalled()
otherEditor.remove()
otherEditorView.simulateDomAttachment()
expect(otherEditorView.setWidthInChars).toHaveBeenCalled()
otherEditorView.remove()
describe "when the editor view's width changes", ->
it "updates the width in characters on the edit session", ->
@@ -1975,15 +2047,19 @@ describe "EditorView", ->
describe "when the switching from an edit session for a long buffer to an edit session for a short buffer", ->
it "updates the line numbers to reflect the shorter buffer", ->
emptyEditor = atom.project.openSync(null)
editorView.edit(emptyEditor)
expect(editorView.gutter.lineNumbers.find('.line-number').length).toBe 1
emptyEditor = null
waitsForPromise ->
atom.workspace.open().then (o) -> emptyEditor = o
editorView.edit(editor)
expect(editorView.gutter.lineNumbers.find('.line-number').length).toBeGreaterThan 1
runs ->
editorView.edit(emptyEditor)
expect(editorView.gutter.lineNumbers.find('.line-number').length).toBe 1
editorView.edit(emptyEditor)
expect(editorView.gutter.lineNumbers.find('.line-number').length).toBe 1
editorView.edit(editor)
expect(editorView.gutter.lineNumbers.find('.line-number').length).toBeGreaterThan 1
editorView.edit(emptyEditor)
expect(editorView.gutter.lineNumbers.find('.line-number').length).toBe 1
describe "when the editor view is mini", ->
it "hides the gutter", ->
@@ -2006,7 +2082,7 @@ describe "EditorView", ->
tab = miniEditor.invisibles?.tab
expect(tab).toBeTruthy()
miniEditor.getEditor().setText(" a line with tabs\tand spaces ")
expect(miniEditor.renderedLines.find('.line').text()).toBe "#{space}a line with tabs#{tab} and spaces#{space}"
expect(miniEditor.renderedLines.find('.line').text()).toBe "#{space}a line with tabs#{tab}and spaces#{space}"
it "doesn't show the indent guide", ->
atom.config.set "editor.showIndentGuide", true
@@ -2203,10 +2279,13 @@ describe "EditorView", ->
describe "folding", ->
beforeEach ->
editor = atom.project.openSync('two-hundred.txt')
buffer = editor.buffer
editorView.edit(editor)
editorView.attachToDom()
waitsForPromise ->
atom.workspace.open('two-hundred.txt').then (o) -> editor = o
runs ->
buffer = editor.buffer
editorView.edit(editor)
editorView.attachToDom()
describe "when a fold-selection event is triggered", ->
it "folds the lines covered by the selection into a single line with a fold class and marker", ->
@@ -2260,7 +2339,7 @@ describe "EditorView", ->
it "adds/removes the 'fold-selected' class to the fold's line element and hides the cursor if it is on the fold line", ->
editor.createFold(2, 4)
editor.setSelectedBufferRange([[1, 0], [2, 0]], preserveFolds: true, isReversed: true)
editor.setSelectedBufferRange([[1, 0], [2, 0]], preserveFolds: true, reversed: true)
expect(editorView.lineElementForScreenRow(2)).toMatchSelector('.fold.fold-selected')
editor.setSelectedBufferRange([[1, 0], [1, 1]], preserveFolds: true)
@@ -2336,16 +2415,20 @@ describe "EditorView", ->
expect(editorView.getFirstVisibleScreenRow()).toBe(0)
describe ".checkoutHead()", ->
[filePath, originalPathText] = []
[filePath] = []
beforeEach ->
filePath = atom.project.resolve('git/working-dir/file.txt')
originalPathText = fs.readFileSync(filePath, 'utf8')
editor = atom.project.openSync(filePath)
editorView.edit(editor)
workingDirPath = temp.mkdirSync('atom-working-dir')
fs.copySync(path.join(__dirname, 'fixtures', 'git', 'working-dir'), workingDirPath)
fs.renameSync(path.join(workingDirPath, 'git.git'), path.join(workingDirPath, '.git'))
atom.project.setPath(workingDirPath)
filePath = atom.project.resolve('file.txt')
afterEach ->
fs.writeFileSync(filePath, originalPathText)
waitsForPromise ->
atom.workspace.open(filePath).then (o) -> editor = o
runs ->
editorView.edit(editor)
it "restores the contents of the editor view to the HEAD revision", ->
editor.setText('')
@@ -2360,7 +2443,7 @@ describe "EditorView", ->
fileChangeHandler.callCount > 0
runs ->
expect(editor.getText()).toBe(originalPathText)
expect(editor.getText()).toBe('undefined')
describe ".pixelPositionForBufferPosition(position)", ->
describe "when the editor view is detached", ->
@@ -2816,7 +2899,7 @@ describe "EditorView", ->
describe "when the escape key is pressed on the editor view", ->
it "clears multiple selections if there are any, and otherwise allows other bindings to be handled", ->
atom.keymaps.bindKeys 'name', '.editor', {'escape': 'test-event'}
atom.keymaps.add 'name', '.editor': {'escape': 'test-event'}
testEventHandler = jasmine.createSpy("testEventHandler")
editorView.on 'test-event', testEventHandler
@@ -2833,22 +2916,26 @@ describe "EditorView", ->
describe "when the editor view is attached but invisible", ->
describe "when the editor view's text is changed", ->
it "redraws the editor view when it is next shown", ->
displayUpdatedHandler = null
atom.workspaceView = new WorkspaceView
atom.workspaceView.openSync('sample.js')
atom.workspaceView.attachToDom()
editorView = atom.workspaceView.getActiveView()
waitsForPromise ->
atom.workspaceView.open('sample.txt').then (o) -> editor = o
view = $$ -> @div id: 'view', tabindex: -1, 'View'
editorView.getPane().activateItem(view)
expect(editorView.isVisible()).toBeFalsy()
runs ->
atom.workspaceView.attachToDom()
editorView = atom.workspaceView.getActiveView()
editor.setText('hidden changes')
editor.setCursorBufferPosition([0,4])
view = $$ -> @div id: 'view', tabindex: -1, 'View'
editorView.getPane().activateItem(view)
expect(editorView.isVisible()).toBeFalsy()
displayUpdatedHandler = jasmine.createSpy("displayUpdatedHandler")
editorView.on 'editor:display-updated', displayUpdatedHandler
editorView.getPane().activateItem(editorView.getModel())
expect(editorView.isVisible()).toBeTruthy()
editor.setText('hidden changes')
editor.setCursorBufferPosition([0,4])
displayUpdatedHandler = jasmine.createSpy("displayUpdatedHandler")
editorView.on 'editor:display-updated', displayUpdatedHandler
editorView.getPane().activateItem(editorView.getModel())
expect(editorView.isVisible()).toBeTruthy()
waitsFor ->
displayUpdatedHandler.callCount is 1
@@ -2888,14 +2975,17 @@ describe "EditorView", ->
describe "when the editor view is removed", ->
it "fires a editor:will-be-removed event", ->
atom.workspaceView = new WorkspaceView
atom.workspaceView.openSync('sample.js')
atom.workspaceView.attachToDom()
editorView = atom.workspaceView.getActiveView()
waitsForPromise ->
atom.workspace.open('sample.js')
willBeRemovedHandler = jasmine.createSpy('willBeRemovedHandler')
editorView.on 'editor:will-be-removed', willBeRemovedHandler
editorView.getPane().destroyActiveItem()
expect(willBeRemovedHandler).toHaveBeenCalled()
runs ->
atom.workspaceView.attachToDom()
editorView = atom.workspaceView.getActiveView()
willBeRemovedHandler = jasmine.createSpy('willBeRemovedHandler')
editorView.on 'editor:will-be-removed', willBeRemovedHandler
editorView.getPane().destroyActiveItem()
expect(willBeRemovedHandler).toHaveBeenCalled()
describe "when setInvisibles is toggled (regression)", ->
it "renders inserted newlines properly", ->
Ver Arquivo
-1
Ver Arquivo
@@ -1 +0,0 @@
undefined
Arquivo binário não exibido.
@@ -0,0 +1 @@
xŽInB1³ö)úσ„¢°fÉ Úîvbù‘c†ãóQne=©žª,½· ÚÄ·9˜¡r&V!ªÆq¢êuH¢.Éâ)i6Ί|™àtuÞº}-(­+lUΉŒf_pUµQIcxßË€ßÚŽxoåÔ`wzáï}~ulçmYú(+•QJ ¤ëºvNþÿƒØµñž·ó1ÅiHL¢
+1 -1
Ver Arquivo
@@ -1 +1 @@
ef046e9eecaa5255ea5e9817132d4001724d6ae1
8a9c86f1cb1f14b8f436eb91f4b052c8802ca99e
-1
Ver Arquivo
@@ -1 +0,0 @@
Full of text
+8
Ver Arquivo
@@ -0,0 +1,8 @@
/**
* Look, this is a comment. Don't go making assumtions that I want soft tabs
* because this block comment has leading spaces, Geez.
*/
if (beNice) {
console.log('Thank you for being nice.');
}
@@ -0,0 +1,4 @@
# This is a comment
if this.studyingEconomics
buy() while supply > demand
sell() until supply > demand
+60 -95
Ver Arquivo
@@ -4,6 +4,12 @@ fs = require 'fs-plus'
path = require 'path'
Task = require '../src/task'
copyRepository = ->
workingDirPath = temp.mkdirSync('atom-working-dir')
fs.copySync(path.join(__dirname, 'fixtures', 'git', 'working-dir'), workingDirPath)
fs.renameSync(path.join(workingDirPath, 'git.git'), path.join(workingDirPath, '.git'))
workingDirPath
describe "Git", ->
repo = null
@@ -41,17 +47,13 @@ describe "Git", ->
expect(repo.isPathIgnored('b.txt')).toBeFalsy()
describe ".isPathModified(path)", ->
[repo, filePath, newPath, originalPathText] = []
[repo, filePath, newPath] = []
beforeEach ->
repo = new Git(path.join(__dirname, 'fixtures', 'git', 'working-dir'))
filePath = require.resolve('./fixtures/git/working-dir/file.txt')
newPath = path.join(__dirname, 'fixtures', 'git', 'working-dir', 'new-path.txt')
originalPathText = fs.readFileSync(filePath, 'utf8')
afterEach ->
fs.writeFileSync(filePath, originalPathText)
fs.removeSync(newPath) if fs.existsSync(newPath)
workingDirPath = copyRepository()
repo = new Git(workingDirPath)
filePath = path.join(workingDirPath, 'a.txt')
newPath = path.join(workingDirPath, 'new-path.txt')
describe "when the path is unstaged", ->
it "returns false if the path has not been modified", ->
@@ -72,14 +74,12 @@ describe "Git", ->
[filePath, newPath] = []
beforeEach ->
repo = new Git(path.join(__dirname, 'fixtures', 'git', 'working-dir'))
filePath = require.resolve('./fixtures/git/working-dir/file.txt')
newPath = path.join(__dirname, 'fixtures', 'git', 'working-dir', 'new-path.txt')
workingDirPath = copyRepository()
repo = new Git(workingDirPath)
filePath = path.join(workingDirPath, 'a.txt')
newPath = path.join(workingDirPath, 'new-path.txt')
fs.writeFileSync(newPath, "i'm new here")
afterEach ->
fs.removeSync(newPath) if fs.existsSync(newPath)
describe "when the path is unstaged", ->
it "returns true if the path is new", ->
expect(repo.isPathNew(newPath)).toBeTruthy()
@@ -88,48 +88,35 @@ describe "Git", ->
expect(repo.isPathNew(filePath)).toBeFalsy()
describe ".checkoutHead(path)", ->
[path1, path2, originalPath1Text, originalPath2Text] = []
[filePath] = []
beforeEach ->
repo = new Git(path.join(__dirname, 'fixtures', 'git', 'working-dir'))
path1 = require.resolve('./fixtures/git/working-dir/file.txt')
originalPath1Text = fs.readFileSync(path1, 'utf8')
path2 = require.resolve('./fixtures/git/working-dir/other.txt')
originalPath2Text = fs.readFileSync(path2, 'utf8')
afterEach ->
fs.writeFileSync(path1, originalPath1Text)
fs.writeFileSync(path2, originalPath2Text)
workingDirPath = copyRepository()
repo = new Git(workingDirPath)
filePath = path.join(workingDirPath, 'a.txt')
it "no longer reports a path as modified after checkout", ->
expect(repo.isPathModified(path1)).toBeFalsy()
fs.writeFileSync(path1, '')
expect(repo.isPathModified(path1)).toBeTruthy()
expect(repo.checkoutHead(path1)).toBeTruthy()
expect(repo.isPathModified(path1)).toBeFalsy()
expect(repo.isPathModified(filePath)).toBeFalsy()
fs.writeFileSync(filePath, 'ch ch changes')
expect(repo.isPathModified(filePath)).toBeTruthy()
expect(repo.checkoutHead(filePath)).toBeTruthy()
expect(repo.isPathModified(filePath)).toBeFalsy()
it "restores the contents of the path to the original text", ->
fs.writeFileSync(path1, '')
expect(repo.checkoutHead(path1)).toBeTruthy()
expect(fs.readFileSync(path1, 'utf8')).toBe(originalPath1Text)
it "only restores the path specified", ->
fs.writeFileSync(path2, 'path 2 is edited')
expect(repo.isPathModified(path2)).toBeTruthy()
expect(repo.checkoutHead(path1)).toBeTruthy()
expect(fs.readFileSync(path2, 'utf8')).toBe('path 2 is edited')
expect(repo.isPathModified(path2)).toBeTruthy()
fs.writeFileSync(filePath, 'ch ch changes')
expect(repo.checkoutHead(filePath)).toBeTruthy()
expect(fs.readFileSync(filePath, 'utf8')).toBe ''
it "fires a status-changed event if the checkout completes successfully", ->
fs.writeFileSync(path1, '')
repo.getPathStatus(path1)
fs.writeFileSync(filePath, 'ch ch changes')
repo.getPathStatus(filePath)
statusHandler = jasmine.createSpy('statusHandler')
repo.on 'status-changed', statusHandler
repo.checkoutHead(path1)
repo.checkoutHead(filePath)
expect(statusHandler.callCount).toBe 1
expect(statusHandler.argsForCall[0][0..1]).toEqual [path1, 0]
expect(statusHandler.argsForCall[0][0..1]).toEqual [filePath, 0]
repo.checkoutHead(path1)
repo.checkoutHead(filePath)
expect(statusHandler.callCount).toBe 1
describe ".destroy()", ->
@@ -138,32 +125,13 @@ describe "Git", ->
repo.destroy()
expect(-> repo.getShortHead()).toThrow()
describe ".getDiffStats(path)", ->
[filePath, originalPathText] = []
beforeEach ->
repo = new Git(path.join(__dirname, 'fixtures', 'git', 'working-dir'))
filePath = require.resolve('./fixtures/git/working-dir/file.txt')
originalPathText = fs.readFileSync(filePath, 'utf8')
afterEach ->
fs.writeFileSync(filePath, originalPathText)
it "returns the number of lines added and deleted", ->
expect(repo.getDiffStats(filePath)).toEqual {added: 0, deleted: 0}
fs.writeFileSync(filePath, "#{originalPathText} edited line")
expect(repo.getDiffStats(filePath)).toEqual {added: 1, deleted: 1}
describe ".getPathStatus(path)", ->
[filePath, originalPathText] = []
[filePath] = []
beforeEach ->
repo = new Git(path.join(__dirname, 'fixtures', 'git', 'working-dir'))
filePath = require.resolve('./fixtures/git/working-dir/file.txt')
originalPathText = fs.readFileSync(filePath, 'utf8')
afterEach ->
fs.writeFileSync(filePath, originalPathText)
workingDirectory = copyRepository()
repo = new Git(workingDirectory)
filePath = path.join(workingDirectory, 'file.txt')
it "trigger a status-changed event when the new status differs from the last cached one", ->
statusHandler = jasmine.createSpy("statusHandler")
@@ -178,16 +146,13 @@ describe "Git", ->
expect(statusHandler.callCount).toBe 1
describe ".getDirectoryStatus(path)", ->
[directoryPath, filePath, originalPathText] = []
[directoryPath, filePath] = []
beforeEach ->
repo = new Git(path.join(__dirname, 'fixtures', 'git', 'working-dir'))
directoryPath = path.join(__dirname, 'fixtures', 'git', 'working-dir', 'dir')
filePath = require.resolve('./fixtures/git/working-dir/dir/b.txt')
originalPathText = fs.readFileSync(filePath, 'utf8')
afterEach ->
fs.writeFileSync(filePath, originalPathText)
workingDirectory = copyRepository()
repo = new Git(workingDirectory)
directoryPath = path.join(workingDirectory, 'dir')
filePath = path.join(directoryPath, 'b.txt')
it "gets the status based on the files inside the directory", ->
expect(repo.isStatusModified(repo.getDirectoryStatus(directoryPath))).toBe false
@@ -199,18 +164,15 @@ describe "Git", ->
[newPath, modifiedPath, cleanPath, originalModifiedPathText] = []
beforeEach ->
repo = new Git(path.join(__dirname, 'fixtures', 'git', 'working-dir'))
modifiedPath = atom.project.resolve('git/working-dir/file.txt')
originalModifiedPathText = fs.readFileSync(modifiedPath, 'utf8')
newPath = atom.project.resolve('git/working-dir/untracked.txt')
cleanPath = atom.project.resolve('git/working-dir/other.txt')
workingDirectory = copyRepository()
repo = new Git(workingDirectory)
modifiedPath = path.join(workingDirectory, 'file.txt')
newPath = path.join(workingDirectory, 'untracked.txt')
cleanPath = path.join(workingDirectory, 'other.txt')
fs.writeFileSync(cleanPath, 'Full of text')
fs.writeFileSync(newPath, '')
newPath = fs.absolute newPath # specs could be running under symbol path.
afterEach ->
fs.writeFileSync(modifiedPath, originalModifiedPathText)
fs.removeSync(newPath) if fs.existsSync(newPath)
it "returns status information for all new and modified files", ->
fs.writeFileSync(modifiedPath, 'making this path modified')
statusHandler = jasmine.createSpy('statusHandler')
@@ -226,14 +188,13 @@ describe "Git", ->
expect(repo.isStatusModified(repo.getCachedPathStatus(modifiedPath))).toBeTruthy()
describe "buffer events", ->
[originalContent, editor] = []
[editor] = []
beforeEach ->
editor = atom.project.openSync('sample.js')
originalContent = editor.getText()
atom.project.setPath(copyRepository())
afterEach ->
fs.writeFileSync(editor.getPath(), originalContent)
waitsForPromise ->
atom.workspace.open('other.txt').then (o) -> editor = o
it "emits a status-changed event when a buffer is saved", ->
editor.insertNewline()
@@ -267,16 +228,20 @@ describe "Git", ->
expect(statusHandler.callCount).toBe 1
describe "when a project is deserialized", ->
[originalContent, buffer, project2] = []
[buffer, project2] = []
afterEach ->
fs.writeFileSync(buffer.getPath(), originalContent)
project2?.destroy()
it "subscribes to all the serialized buffers in the project", ->
atom.project.openSync('sample.js')
project2 = atom.project.testSerialization()
buffer = project2.getBuffers()[0]
atom.project.setPath(copyRepository())
waitsForPromise ->
atom.workspace.open('file.txt')
runs ->
project2 = atom.project.testSerialization()
buffer = project2.getBuffers()[0]
waitsFor ->
buffer.loaded
+44 -22
Ver Arquivo
@@ -6,8 +6,10 @@ describe "LanguageMode", ->
describe "javascript", ->
beforeEach ->
editor = atom.project.openSync('sample.js', autoIndent: false)
{buffer, languageMode} = editor
waitsForPromise ->
atom.workspace.open('sample.js', autoIndent: false).then (o) ->
editor = o
{buffer, languageMode} = editor
waitsForPromise ->
atom.packages.activatePackage('language-javascript')
@@ -50,12 +52,17 @@ describe "LanguageMode", ->
languageMode.toggleLineCommentsForBufferRows(0, 0)
expect(buffer.lineForRow(0)).toBe " // "
buffer.setText (' a\n \n b')
buffer.setText(' a\n \n b')
languageMode.toggleLineCommentsForBufferRows(0, 2)
expect(buffer.lineForRow(0)).toBe " // a"
expect(buffer.lineForRow(1)).toBe " // "
expect(buffer.lineForRow(2)).toBe " // b"
buffer.setText(' \n // var i;')
languageMode.toggleLineCommentsForBufferRows(0, 1)
expect(buffer.lineForRow(0)).toBe ' '
expect(buffer.lineForRow(1)).toBe ' var i;'
describe ".rowRangeForCodeFoldAtBufferRow(bufferRow)", ->
it "returns the start/end rows of the foldable region starting at the given row", ->
expect(languageMode.rowRangeForCodeFoldAtBufferRow(0)).toEqual [0, 12]
@@ -112,8 +119,10 @@ describe "LanguageMode", ->
describe "coffeescript", ->
beforeEach ->
editor = atom.project.openSync('coffee.coffee', autoIndent: false)
{buffer, languageMode} = editor
waitsForPromise ->
atom.workspace.open('coffee.coffee', autoIndent: false).then (o) ->
editor = o
{buffer, languageMode} = editor
waitsForPromise ->
atom.packages.activatePackage('language-coffee-script')
@@ -161,8 +170,10 @@ describe "LanguageMode", ->
describe "css", ->
beforeEach ->
editor = atom.project.openSync('css.css', autoIndent: false)
{buffer, languageMode} = editor
waitsForPromise ->
atom.workspace.open('css.css', autoIndent: false).then (o) ->
editor = o
{buffer, languageMode} = editor
waitsForPromise ->
atom.packages.activatePackage('language-css')
@@ -178,34 +189,36 @@ describe "LanguageMode", ->
languageMode.toggleLineCommentsForBufferRows(2, 2)
expect(buffer.lineForRow(0)).toBe "/*body {"
expect(buffer.lineForRow(1)).toBe " font-size: 1234px;*/"
expect(buffer.lineForRow(2)).toBe "/* width: 110%;*/"
expect(buffer.lineForRow(2)).toBe " /*width: 110%;*/"
expect(buffer.lineForRow(3)).toBe " font-weight: bold !important;"
languageMode.toggleLineCommentsForBufferRows(0, 1)
expect(buffer.lineForRow(0)).toBe "body {"
expect(buffer.lineForRow(1)).toBe " font-size: 1234px;"
expect(buffer.lineForRow(2)).toBe "/* width: 110%;*/"
expect(buffer.lineForRow(2)).toBe " /*width: 110%;*/"
expect(buffer.lineForRow(3)).toBe " font-weight: bold !important;"
it "uncomments lines with leading whitespace", ->
buffer.change([[2, 0], [2, Infinity]], " /*width: 110%;*/")
buffer.setTextInRange([[2, 0], [2, Infinity]], " /*width: 110%;*/")
languageMode.toggleLineCommentsForBufferRows(2, 2)
expect(buffer.lineForRow(2)).toBe " width: 110%;"
it "uncomments lines with trailing whitespace", ->
buffer.change([[2, 0], [2, Infinity]], "/*width: 110%;*/ ")
buffer.setTextInRange([[2, 0], [2, Infinity]], "/*width: 110%;*/ ")
languageMode.toggleLineCommentsForBufferRows(2, 2)
expect(buffer.lineForRow(2)).toBe "width: 110%; "
it "uncomments lines with leading and trailing whitespace", ->
buffer.change([[2, 0], [2, Infinity]], " /*width: 110%;*/ ")
buffer.setTextInRange([[2, 0], [2, Infinity]], " /*width: 110%;*/ ")
languageMode.toggleLineCommentsForBufferRows(2, 2)
expect(buffer.lineForRow(2)).toBe " width: 110%; "
describe "less", ->
beforeEach ->
editor = atom.project.openSync('sample.less', autoIndent: false)
{buffer, languageMode} = editor
waitsForPromise ->
atom.workspace.open('sample.less', autoIndent: false).then (o) ->
editor = o
{buffer, languageMode} = editor
waitsForPromise ->
atom.packages.activatePackage('language-less')
@@ -220,9 +233,11 @@ describe "LanguageMode", ->
describe "xml", ->
beforeEach ->
editor = atom.project.openSync('sample.xml', autoIndent: false)
editor.setText("<!-- test -->")
{buffer, languageMode} = editor
waitsForPromise ->
atom.workspace.open('sample.xml', autoIndent: false).then (o) ->
editor = o
editor.setText("<!-- test -->")
{buffer, languageMode} = editor
waitsForPromise ->
atom.packages.activatePackage('language-xml')
@@ -234,8 +249,10 @@ describe "LanguageMode", ->
describe "folding", ->
beforeEach ->
editor = atom.project.openSync('sample.js', autoIndent: false)
{buffer, languageMode} = editor
waitsForPromise ->
atom.workspace.open('sample.js', autoIndent: false).then (o) ->
editor = o
{buffer, languageMode} = editor
waitsForPromise ->
atom.packages.activatePackage('language-javascript')
@@ -319,8 +336,10 @@ describe "LanguageMode", ->
describe "folding with comments", ->
beforeEach ->
editor = atom.project.openSync('sample-with-comments.js', autoIndent: false)
{buffer, languageMode} = editor
waitsForPromise ->
atom.workspace.open('sample-with-comments.js', autoIndent: false).then (o) ->
editor = o
{buffer, languageMode} = editor
waitsForPromise ->
atom.packages.activatePackage('language-javascript')
@@ -385,7 +404,10 @@ describe "LanguageMode", ->
describe "css", ->
beforeEach ->
editor = atom.project.openSync('css.css', autoIndent: true)
waitsForPromise ->
atom.workspace.open('css.css', autoIndent: true).then (o) ->
editor = o
{buffer, languageMode} = editor
waitsForPromise ->
atom.packages.activatePackage('language-source')
+1
Ver Arquivo
@@ -16,6 +16,7 @@ describe "PaneContainer", ->
containerA = new PaneContainer(root: pane1A)
pane2A = pane1A.splitRight(items: [new Item])
pane3A = pane2A.splitDown(items: [new Item])
pane3A.focus()
it "preserves the focused pane across serialization", ->
expect(pane3A.focused).toBe true
+4 -4
Ver Arquivo
@@ -27,7 +27,7 @@ describe "PaneContainerView", ->
afterEach ->
atom.deserializers.remove(TestView)
describe ".getActivePane()", ->
describe ".getActivePaneView()", ->
it "returns the most-recently focused pane", ->
focusStealer = $$ -> @div tabindex: -1, "focus stealer"
focusStealer.attachToDom()
@@ -35,15 +35,15 @@ describe "PaneContainerView", ->
pane2.focus()
expect(container.getFocusedPane()).toBe pane2
expect(container.getActivePane()).toBe pane2
expect(container.getActivePaneView()).toBe pane2
focusStealer.focus()
expect(container.getFocusedPane()).toBeUndefined()
expect(container.getActivePane()).toBe pane2
expect(container.getActivePaneView()).toBe pane2
pane3.focus()
expect(container.getFocusedPane()).toBe pane3
expect(container.getActivePane()).toBe pane3
expect(container.getActivePaneView()).toBe pane3
describe ".eachPaneView(callback)", ->
it "runs the callback with all current and future panes until the subscription is cancelled", ->
+4 -3
Ver Arquivo
@@ -439,10 +439,11 @@ describe "Pane", ->
expect(column.orientation).toBe 'vertical'
expect(column.children).toEqual [pane1, pane3, pane2]
it "sets up the new pane to be focused", ->
expect(pane1.focused).toBe false
it "activates the new pane", ->
expect(pane1.isActive()).toBe true
pane2 = pane1.splitRight()
expect(pane2.focused).toBe true
expect(pane1.isActive()).toBe false
expect(pane2.isActive()).toBe true
describe "::destroy()", ->
[container, pane1, pane2] = []
+24 -11
Ver Arquivo
@@ -21,11 +21,16 @@ describe "PaneView", ->
container = new PaneContainerView
view1 = new TestView(id: 'view-1', text: 'View 1')
view2 = new TestView(id: 'view-2', text: 'View 2')
editor1 = atom.project.openSync('sample.js')
editor2 = atom.project.openSync('sample.txt')
pane = container.getRoot()
paneModel = pane.model
paneModel.addItems([view1, editor1, view2, editor2])
waitsForPromise ->
atom.workspace.open('sample.js').then (o) -> editor1 = o
waitsForPromise ->
atom.workspace.open('sample.txt').then (o) -> editor2 = o
runs ->
pane = container.getRoot()
paneModel = pane.model
paneModel.addItems([view1, editor1, view2, editor2])
afterEach ->
atom.deserializers.remove(TestView)
@@ -159,14 +164,21 @@ describe "PaneView", ->
describe "when an unmodifed buffer's path is deleted", ->
it "removes the pane item", ->
editor = null
jasmine.unspy(window, 'setTimeout')
filePath = temp.openSync('atom').path
editor = atom.project.openSync(filePath)
pane.activateItem(editor)
expect(pane.items).toHaveLength(5)
filePath = path.join(temp.mkdirSync(), 'file.txt')
fs.writeFileSync(filePath, '')
fs.removeSync(filePath)
waitsFor -> pane.items.length == 4
waitsForPromise ->
atom.workspace.open(filePath).then (o) -> editor = o
runs ->
pane.activateItem(editor)
expect(pane.items).toHaveLength(5)
fs.removeSync(filePath)
waitsFor ->
pane.items.length == 4
describe "when a pane is destroyed", ->
[pane2, pane2Model] = []
@@ -187,6 +199,7 @@ describe "PaneView", ->
it "focuses the next pane", ->
container.attachToDom()
pane2.activate()
expect(pane.hasFocus()).toBe false
expect(pane2.hasFocus()).toBe true
pane2Model.destroy()

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