Comparar commits

...

196 Commits

Autor SHA1 Mensagem Data
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
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
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
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
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
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
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 fe4016a49d 🐧 Mention separate build/install 2014-05-05 17:37:38 -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 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
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
47 arquivos alterados com 725 adições e 147 exclusões
+1
Ver Arquivo
@@ -1,6 +1,7 @@
*.swp
*~
.DS_Store
Thumbs.db
.project
.svn
.nvm-version
+6 -6
Ver Arquivo
@@ -30,7 +30,7 @@ in the proper package's repository.
* 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)
* Include thoughtfully worded [Jasmine](http://jasmine.github.io/)
specs
* Avoid placing files in `vendor`. 3rd-party packages should be added as a
`package.json` dependency.
@@ -52,11 +52,11 @@ in the proper package's repository.
* 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
* :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
## CoffeeScript Styleguide
+7 -15
Ver Arquivo
@@ -1,15 +1,8 @@
![Atom](https://cloud.githubusercontent.com/assets/72919/2874231/3af1db48-d3dd-11e3-98dc-6066f8bc766f.png)
Atom is a hackable text editor for the 21st century.
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.
Atom is open source and built on top of [atom-shell](http://github.com/atom/atom-shell).
Atom is designed to be customizable, but also usable without needing to edit a config file.
Atom is modern, approachable, and hackable to the core.
Visit [atom.io](http://atom.io)
to learn more.
Visit [atom.io](https://atom.io) to learn more.
## Installing
@@ -19,11 +12,10 @@ Atom will automatically update when a new release is available.
## Building
```sh
git clone git@github.com:atom/atom.git
cd atom
script/build # Creates application at /Applications/Atom.app
```
* [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)
## Developing
Check out the [guides](https://atom.io/docs/latest) and the [API reference](atom.io/docs/api).
Check out the [guides](https://atom.io/docs/latest) and the [API reference](https://atom.io/docs/api).
+1 -1
Ver Arquivo
@@ -6,6 +6,6 @@
"url": "https://github.com/atom/atom.git"
},
"dependencies": {
"atom-package-manager": "0.45.0"
"atom-package-manager": "0.52.0"
}
}
+14 -8
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,8 +66,8 @@ 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'
@@ -76,7 +76,13 @@ elif [ $OS == 'Linux' ]; 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=$$ "$@" > /tmp/atom-nohup.out 2>&1
if [ $? -ne 0 ]; then
cat /tmp/atom-nohup.out
exit $?
fi
) &
fi
fi
+2
Ver Arquivo
@@ -27,6 +27,8 @@
"json-front-matter": "~0.1.3",
"legal-eagle": "~0.4.0",
"minidump": "0.5.x",
"read-package-json": "1.1.8",
"normalize-package-data": "0.2.12",
"rcedit": "~0.1.2",
"request": "~2.27.0",
"rimraf": "~2.2.2",
+1 -1
Ver Arquivo
@@ -26,7 +26,7 @@ module.exports = (grunt) ->
getLicenseText = (dependencyLicenses) ->
{keys} = require 'underscore-plus'
text = """
#{fs.readFileSync('LICENSE.md')}
#{fs.readFileSync('LICENSE.md', 'utf8')}
This application bundles the following third-party packages in accordance
with the following licenses:\n\n
+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()
+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 /tmp/atom-build/Atom
sudo script/grunt install # Installs command to /usr/local/bin/atom
```
## Troubleshooting
+23
Ver Arquivo
@@ -0,0 +1,23 @@
# Linux
Ubuntu LTS 12.04 64-bit is the recommended platform.
## Requirements
* OS with 64-bit architecture
* [node.js](http://nodejs.org/download/) v0.10.x
* [npm](http://www.npmjs.org/) v1.4.x
* libgnome-keyring-dev `sudo apt-get install libgnome-keyring-dev` (refer to your distribution's manual on how to install packages if you are not on Debian or Ubuntu-based systems)
* `npm config set python /usr/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 /tmp/atom-build/Atom
sudo script/grunt install # Installs command to /usr/local/bin/atom
script/grunt mkdeb # Generates a .deb package at /tmp/atom-build
```
## Troubleshooting
+17
Ver Arquivo
@@ -0,0 +1,17 @@
# 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
cd atom
script/build # Creates application at /Applications/Atom.app
```
## Troubleshooting
+42
Ver Arquivo
@@ -0,0 +1,42 @@
# Windows
## Requirements
* Windows 7 or later
* [Visual C++ 2010 SP1 Express](http://www.visualstudio.com/en-us/downloads/download-visual-studio-vs#DownloadFamilies_4)
* [node.js - 32bit](http://nodejs.org/download/) v0.10.x
* [Python 2.7.x](http://www.python.org/download/)
* [GitHub for Windows](http://windows.github.com/)
to your PATH
* Open the Windows GitHub shell (NOT the Standard PowerShell, the shortcut labeled 'Git Shell' - make sure you have logged in at least once to the GitHub for Windows GUI App)
* `$env:Path = $env:Path + ";C:\path\to\atom\repo\node_modules"`
## Instructions
```bat
cd C:\Users\<user>\github
git clone https://github.com/atom/atom/
cd atom
script\build
```
## Why do I have to use GitHub for Windows? Can't I just use my existing Git?
You totally can! GitHub for Windows's Git Shell just takes less work 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
Some of the most common errors include:
gyp WARN install got an error, rolling back install
and
>> The system cannot find the path specified.
These two error messages can usually be ignored. The solution to these errors is to re-run `script\build`, possibly several times.
If your Visual Studio is in a non-standard location, and you get the error `You must have Visual Studio 2010 or 2012 installed`, you need to modify `apm\node_modules\atom-package-manager\lib\config.js` around line 90 and replace the variable with your Visual Studio directory plus Common7/IDE.
Example:
vs2010Path = "H:/VS2010/Common7/IDE"
+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
+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:
+5 -5
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
@@ -80,7 +80,7 @@ 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
since this was the first version being published it is a good idea to start
with a minor release.
### Further Reading
-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'
+8
Ver Arquivo
@@ -65,6 +65,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,6 +96,12 @@
'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'
+7 -2
Ver Arquivo
@@ -60,8 +60,13 @@
'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:backspace-to-beginning-of-word'
'ctrl-delete': 'editor:delete-to-end-of-word'
# Sublime Parity
'ctrl-a': 'core:select-all'
+7 -1
Ver Arquivo
@@ -33,6 +33,7 @@
'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'
@@ -57,7 +58,12 @@
'ctrl-k ctrl-right': 'window:focus-pane-on-right'
'.workspace .editor':
# Windows specific
# 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:backspace-to-beginning-of-word'
'ctrl-delete': 'editor:backspace-to-beginning-of-word'
# Sublime Parity
+21 -21
Ver Arquivo
@@ -1,7 +1,7 @@
{
"name": "atom",
"productName": "Atom",
"version": "0.93.0",
"version": "0.95.0",
"description": "A hackable text editor for the 21st Century.",
"main": "./src/browser/main.js",
"repository": {
@@ -17,11 +17,11 @@
"url": "http://github.com/atom/atom/raw/master/LICENSE.md"
}
],
"atomShellVersion": "0.12.0",
"atomShellVersion": "0.12.4",
"dependencies": {
"async": "0.2.6",
"atom-keymap": "^0.19.0",
"bootstrap": "git://github.com/atom/bootstrap.git#6af81906189f1747fd6c93479e3d998ebe041372",
"bootstrap": "git+https://github.com/atom/bootstrap.git#6af81906189f1747fd6c93479e3d998ebe041372",
"clear-cut": "0.4.0",
"coffee-script": "1.7.0",
"coffeestack": "0.7.0",
@@ -41,22 +41,22 @@
"nslog": "0.5.0",
"oniguruma": "^1.0.6",
"optimist": "0.4.0",
"pathwatcher": "^1.2.1",
"pathwatcher": "^1.3.1",
"property-accessors": "^1",
"q": "^1.0.1",
"random-words": "0.0.1",
"react": "^0.10.0",
"reactionary": "^0.8.0",
"reactionary": "^0.9.0",
"runas": "^0.5",
"scandal": "0.15.2",
"scoped-property-store": "^0.9.0",
"scrollbar-style": "^0.1.0",
"scrollbar-style": "^0.4.0",
"season": "^1.0.2",
"semver": "1.1.4",
"serializable": "^1",
"space-pen": "3.1.1",
"temp": "0.5.0",
"text-buffer": "^2.2.0",
"text-buffer": "^2.2.2",
"theorist": "^1",
"underscore-plus": "^1.2.1",
"vm-compatibility-layer": "0.1.0"
@@ -80,8 +80,8 @@
"deprecation-cop": "0.5.0",
"dev-live-reload": "0.30.0",
"exception-reporting": "0.17.0",
"feedback": "0.30.0",
"find-and-replace": "0.100.0",
"feedback": "0.33.0",
"find-and-replace": "0.101.0",
"fuzzy-finder": "0.50.0",
"git-diff": "0.28.0",
"go-to-line": "0.19.0",
@@ -89,36 +89,36 @@
"image-view": "0.33.0",
"keybinding-resolver": "0.17.0",
"link": "0.22.0",
"markdown-preview": "0.69.0",
"markdown-preview": "0.71.0",
"metrics": "0.32.0",
"open-on-github": "0.28.0",
"package-generator": "0.30.0",
"release-notes": "0.28.0",
"release-notes": "0.29.0",
"settings-view": "0.114.0",
"snippets": "0.43.0",
"spell-check": "0.34.0",
"spell-check": "0.35.0",
"status-bar": "0.40.0",
"styleguide": "0.29.0",
"symbols-view": "0.50.0",
"symbols-view": "0.51.0",
"tabs": "0.39.0",
"timecop": "0.18.0",
"tree-view": "0.92.0",
"update-package-dependencies": "0.6.0",
"welcome": "0.12.0",
"welcome": "0.13.0",
"whitespace": "0.22.0",
"wrap-guide": "0.18.0",
"language-c": "0.15.0",
"language-coffee-script": "0.22.0",
"language-css": "0.16.0",
"language-gfm": "0.33.0",
"language-gfm": "0.35.0",
"language-git": "0.9.0",
"language-go": "0.10.0",
"language-html": "0.19.0",
"language-go": "0.11.0",
"language-html": "0.21.0",
"language-hyperlink": "0.9.0",
"language-java": "0.10.0",
"language-javascript": "0.24.0",
"language-javascript": "0.25.0",
"language-json": "0.8.0",
"language-less": "0.8.0",
"language-less": "0.9.0",
"language-make": "0.10.0",
"language-objective-c": "0.11.0",
"language-perl": "0.8.0",
@@ -126,7 +126,7 @@
"language-property-list": "0.7.0",
"language-python": "0.15.0",
"language-ruby": "0.23.0",
"language-ruby-on-rails": "0.12.0",
"language-ruby-on-rails": "0.13.0",
"language-sass": "0.10.0",
"language-shellscript": "0.8.0",
"language-source": "0.7.0",
@@ -134,7 +134,7 @@
"language-text": "0.6.0",
"language-todo": "0.10.0",
"language-toml": "0.12.0",
"language-xml": "0.11.0",
"language-xml": "0.12.0",
"language-yaml": "0.6.0"
},
"private": true,
+1 -1
Ver Arquivo
@@ -31,7 +31,7 @@ if (!fs.existsSync(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 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');
+5
Ver Arquivo
@@ -0,0 +1,5 @@
@IF EXIST "%~dp0\node.exe" (
"%~dp0\node.exe" "%~dp0\grunt" %*
) ELSE (
node "%~dp0\grunt" %*
)
+2
Ver Arquivo
@@ -979,6 +979,7 @@ describe "DisplayBuffer", ->
describe "::setScrollLeft", ->
beforeEach ->
displayBuffer.manageScrollPosition = true
displayBuffer.setLineHeight(10)
displayBuffer.setDefaultCharWidth(10)
it "disallows negative values", ->
@@ -1001,6 +1002,7 @@ describe "DisplayBuffer", ->
displayBuffer.manageScrollPosition = true
displayBuffer.setLineHeight(10)
displayBuffer.setDefaultCharWidth(10)
displayBuffer.setHorizontalScrollbarHeight(0)
displayBuffer.setHeight(50)
displayBuffer.setWidth(50)
+126 -2
Ver Arquivo
@@ -1,9 +1,9 @@
{extend, flatten, toArray} = require 'underscore-plus'
{extend, flatten, toArray, last} = require 'underscore-plus'
ReactEditorView = require '../src/react-editor-view'
nbsp = String.fromCharCode(160)
describe "EditorComponent", ->
[editor, wrapperView, component, node, verticalScrollbarNode, horizontalScrollbarNode] = []
[contentNode, editor, wrapperView, component, node, verticalScrollbarNode, horizontalScrollbarNode] = []
[lineHeightInPixels, charWidth, delayAnimationFrames, nextAnimationFrame] = []
beforeEach ->
@@ -26,6 +26,9 @@ describe "EditorComponent", ->
atom.project.open('sample.js').then (o) -> editor = o
runs ->
contentNode = document.querySelector('#jasmine-content')
contentNode.style.width = '1000px'
wrapperView = new ReactEditorView(editor)
wrapperView.attachToDom()
{component} = wrapperView
@@ -38,6 +41,9 @@ describe "EditorComponent", ->
verticalScrollbarNode = node.querySelector('.vertical-scrollbar')
horizontalScrollbarNode = node.querySelector('.horizontal-scrollbar')
afterEach ->
contentNode.style.width = ''
describe "line rendering", ->
it "renders only the currently-visible lines", ->
node.style.height = 4.5 * lineHeightInPixels + 'px'
@@ -188,6 +194,20 @@ describe "EditorComponent", ->
expect(lines[4].textContent).toBe "#{nbsp}3"
expect(lines[5].textContent).toBe "#{nbsp}"
it "pads line numbers to be right justified based on the maximum number of line number digits", ->
editor.getBuffer().setText([1..10].join('\n'))
lineNumberNodes = toArray(node.querySelectorAll('.line-number'))
for node, i in lineNumberNodes[0..8]
expect(node.textContent).toBe "#{nbsp}#{i + 1}"
expect(lineNumberNodes[9].textContent).toBe '10'
# Removes padding when the max number of digits goes down
editor.getBuffer().delete([[1, 0], [2, 0]])
lineNumberNodes = toArray(node.querySelectorAll('.line-number'))
for node, i in lineNumberNodes
expect(node.textContent).toBe "#{i + 1}"
describe "cursor rendering", ->
it "renders the currently visible cursors", ->
cursor1 = editor.getCursor()
@@ -529,6 +549,110 @@ describe "EditorComponent", ->
expect(editor.getScrollLeft()).toBe 100
it "does not obscure the last line with the horizontal scrollbar", ->
node.style.height = 4.5 * lineHeightInPixels + 'px'
node.style.width = 10 * charWidth + 'px'
component.measureHeightAndWidth()
editor.setScrollBottom(editor.getScrollHeight())
lastLineNode = last(node.querySelectorAll('.line'))
bottomOfLastLine = lastLineNode.getBoundingClientRect().bottom
topOfHorizontalScrollbar = horizontalScrollbarNode.getBoundingClientRect().top
expect(bottomOfLastLine).toBe topOfHorizontalScrollbar
# Scroll so there's no space below the last line when the horizontal scrollbar disappears
node.style.width = 100 * charWidth + 'px'
component.measureHeightAndWidth()
lastLineNode = last(node.querySelectorAll('.line'))
bottomOfLastLine = lastLineNode.getBoundingClientRect().bottom
bottomOfEditor = node.getBoundingClientRect().bottom
expect(bottomOfLastLine).toBe bottomOfEditor
it "does not obscure the last character of the longest line with the vertical scrollbar", ->
node.style.height = 7 * lineHeightInPixels + 'px'
node.style.width = 10 * charWidth + 'px'
component.measureHeightAndWidth()
editor.setScrollLeft(Infinity)
lineNodes = node.querySelectorAll('.line')
rightOfLongestLine = lineNodes[6].getBoundingClientRect().right
leftOfVerticalScrollbar = verticalScrollbarNode.getBoundingClientRect().left
expect(rightOfLongestLine).toBe leftOfVerticalScrollbar - 1 # Leave 1 px so the cursor is visible on the end of the line
it "only displays dummy scrollbars when scrollable in that direction", ->
expect(verticalScrollbarNode.style.display).toBe 'none'
expect(horizontalScrollbarNode.style.display).toBe 'none'
node.style.height = 4.5 * lineHeightInPixels + 'px'
node.style.width = '1000px'
component.measureHeightAndWidth()
expect(verticalScrollbarNode.style.display).toBe ''
expect(horizontalScrollbarNode.style.display).toBe 'none'
node.style.width = 10 * charWidth + 'px'
component.measureHeightAndWidth()
expect(verticalScrollbarNode.style.display).toBe ''
expect(horizontalScrollbarNode.style.display).toBe ''
node.style.height = 20 * lineHeightInPixels + 'px'
component.measureHeightAndWidth()
expect(verticalScrollbarNode.style.display).toBe 'none'
expect(horizontalScrollbarNode.style.display).toBe ''
it "makes the dummy scrollbar divs only as tall/wide as the actual scrollbars", ->
node.style.height = 4 * lineHeightInPixels + 'px'
node.style.width = 10 * charWidth + 'px'
component.measureHeightAndWidth()
atom.themes.applyStylesheet "test", """
::-webkit-scrollbar {
width: 8px;
height: 8px;
}
"""
scrollbarCornerNode = node.querySelector('.scrollbar-corner')
expect(verticalScrollbarNode.offsetWidth).toBe 8
expect(horizontalScrollbarNode.offsetHeight).toBe 8
expect(scrollbarCornerNode.offsetWidth).toBe 8
expect(scrollbarCornerNode.offsetHeight).toBe 8
it "assigns the bottom/right of the scrollbars to the width of the opposite scrollbar if it is visible", ->
scrollbarCornerNode = node.querySelector('.scrollbar-corner')
expect(verticalScrollbarNode.style.bottom).toBe ''
expect(horizontalScrollbarNode.style.right).toBe ''
node.style.height = 4.5 * lineHeightInPixels + 'px'
node.style.width = '1000px'
component.measureHeightAndWidth()
expect(verticalScrollbarNode.style.bottom).toBe ''
expect(horizontalScrollbarNode.style.right).toBe verticalScrollbarNode.offsetWidth + 'px'
expect(scrollbarCornerNode.style.display).toBe 'none'
node.style.width = 10 * charWidth + 'px'
component.measureHeightAndWidth()
expect(verticalScrollbarNode.style.bottom).toBe horizontalScrollbarNode.offsetHeight + 'px'
expect(horizontalScrollbarNode.style.right).toBe verticalScrollbarNode.offsetWidth + 'px'
expect(scrollbarCornerNode.style.display).toBe ''
node.style.height = 20 * lineHeightInPixels + 'px'
component.measureHeightAndWidth()
expect(verticalScrollbarNode.style.bottom).toBe horizontalScrollbarNode.offsetHeight + 'px'
expect(horizontalScrollbarNode.style.right).toBe ''
expect(scrollbarCornerNode.style.display).toBe 'none'
it "accounts for the width of the gutter in the scrollWidth of the horizontal scrollbar", ->
gutterNode = node.querySelector('.gutter')
node.style.width = 10 * charWidth + 'px'
component.measureHeightAndWidth()
expect(horizontalScrollbarNode.scrollWidth).toBe gutterNode.offsetWidth + editor.getScrollWidth()
describe "when a mousewheel event occurs on the editor", ->
it "updates the horizontal or vertical scrollbar depending on which delta is greater (x or y)", ->
node.style.height = 4.5 * lineHeightInPixels + 'px'
+37 -3
Ver Arquivo
@@ -698,6 +698,7 @@ describe "Editor", ->
editor.setHorizontalScrollMargin(2)
editor.setLineHeight(10)
editor.setDefaultCharWidth(10)
editor.setHorizontalScrollbarHeight(0)
editor.setHeight(5.5 * 10)
editor.setWidth(5.5 * 10)
@@ -1138,6 +1139,7 @@ describe "Editor", ->
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)
@@ -2061,17 +2063,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", ->
@@ -2594,6 +2623,10 @@ describe "Editor", ->
atom.workspace.open('sample-with-tabs.coffee', softTabs: true).then (editor) ->
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()
@@ -3094,6 +3127,7 @@ describe "Editor", ->
editor.setDefaultCharWidth(10)
editor.setHeight(50)
editor.setWidth(50)
editor.setHorizontalScrollbarHeight(0)
expect(editor.getScrollTop()).toBe 0
expect(editor.getScrollLeft()).toBe 0
+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.');
}
+32 -5
Ver Arquivo
@@ -131,15 +131,21 @@ describe "ThemeManager", ->
describe "requireStylesheet(path)", ->
it "synchronously loads css at the given path and installs a style tag for it in the head", ->
themeManager.on 'stylesheets-changed', stylesheetsChangedHandler = jasmine.createSpy("stylesheetsChangedHandler")
themeManager.on 'stylesheet-added', stylesheetAddedHandler = jasmine.createSpy("stylesheetAddedHandler")
cssPath = atom.project.resolve('css.css')
lengthBefore = $('head style').length
themeManager.requireStylesheet(cssPath)
expect($('head style').length).toBe lengthBefore + 1
expect(stylesheetAddedHandler).toHaveBeenCalled()
expect(stylesheetsChangedHandler).toHaveBeenCalled()
element = $('head style[id*="css.css"]')
expect(element.attr('id')).toBe themeManager.stringToId(cssPath)
expect(element.text()).toBe fs.readFileSync(cssPath, 'utf8')
expect(element[0].sheet).toBe stylesheetAddedHandler.argsForCall[0][0]
# doesn't append twice
themeManager.requireStylesheet(cssPath)
@@ -187,9 +193,18 @@ describe "ThemeManager", ->
themeManager.requireStylesheet(cssPath)
expect($(document.body).css('font-weight')).toBe("bold")
themeManager.on 'stylesheet-removed', stylesheetRemovedHandler = jasmine.createSpy("stylesheetRemovedHandler")
themeManager.on 'stylesheets-changed', stylesheetsChangedHandler = jasmine.createSpy("stylesheetsChangedHandler")
themeManager.removeStylesheet(cssPath)
expect($(document.body).css('font-weight')).not.toBe("bold")
expect(stylesheetRemovedHandler).toHaveBeenCalled()
stylesheet = stylesheetRemovedHandler.argsForCall[0][0]
expect(stylesheet instanceof CSSStyleSheet).toBe true
expect(stylesheet.cssRules[0].selectorText).toBe 'body'
expect(stylesheetsChangedHandler).toHaveBeenCalled()
describe "base stylesheet loading", ->
@@ -219,20 +234,21 @@ describe "ThemeManager", ->
describe "when the user stylesheet changes", ->
it "reloads it", ->
[stylesheetRemovedHandler, stylesheetAddedHandler, stylesheetsChangedHandler] = []
userStylesheetPath = path.join(temp.mkdirSync("atom"), 'styles.less')
fs.writeFileSync(userStylesheetPath, 'body {border-style: dotted !important;}')
spyOn(themeManager, 'getUserStylesheetPath').andReturn userStylesheetPath
themeManager.on 'stylesheets-changed', stylesheetsChangedHandler = jasmine.createSpy("stylesheetsChangedHandler")
waitsForPromise ->
themeManager.activateThemes()
runs ->
expect($(document.body).css('border-style')).toBe 'dotted'
expect(stylesheetsChangedHandler).toHaveBeenCalled()
stylesheetsChangedHandler.reset()
themeManager.on 'stylesheets-changed', stylesheetsChangedHandler = jasmine.createSpy("stylesheetsChangedHandler")
themeManager.on 'stylesheet-removed', stylesheetRemovedHandler = jasmine.createSpy("stylesheetRemovedHandler")
themeManager.on 'stylesheet-added', stylesheetAddedHandler = jasmine.createSpy("stylesheetAddedHandler")
spyOn(themeManager, 'loadUserStylesheet').andCallThrough()
expect($(document.body).css('border-style')).toBe 'dotted'
fs.writeFileSync(userStylesheetPath, 'body {border-style: dashed}')
waitsFor ->
@@ -240,7 +256,16 @@ describe "ThemeManager", ->
runs ->
expect($(document.body).css('border-style')).toBe 'dashed'
expect(stylesheetRemovedHandler).toHaveBeenCalled()
expect(stylesheetRemovedHandler.argsForCall[0][0].cssRules[0].style.border).toBe 'dotted'
expect(stylesheetAddedHandler).toHaveBeenCalled()
expect(stylesheetAddedHandler.argsForCall[0][0].cssRules[0].style.border).toBe 'dashed'
expect(stylesheetsChangedHandler).toHaveBeenCalled()
stylesheetRemovedHandler.reset()
stylesheetsChangedHandler.reset()
fs.removeSync(userStylesheetPath)
@@ -248,6 +273,8 @@ describe "ThemeManager", ->
themeManager.loadUserStylesheet.callCount is 2
runs ->
expect(stylesheetRemovedHandler).toHaveBeenCalled()
expect(stylesheetRemovedHandler.argsForCall[0][0].cssRules[0].style.border).toBe 'dashed'
expect($(document.body).css('border-style')).toBe 'none'
expect(stylesheetsChangedHandler).toHaveBeenCalled()
+5 -2
Ver Arquivo
@@ -39,7 +39,7 @@ class Atom extends Model
# Public: Load or create the Atom environment in the given mode.
#
# - mode: Pass 'editor' or 'spec' depending on the kind of environment you
# want to build.
# want to build.
#
# Returns an Atom instance, fully initialized
@loadOrCreate: (mode) ->
@@ -473,12 +473,15 @@ class Atom extends Model
# Public: Set the full screen state of the current window.
setFullScreen: (fullScreen=false) ->
ipc.send('call-window-method', 'setFullScreen', fullScreen)
if fullScreen then document.body.classList.add("fullscreen") else document.body.classList.remove("fullscreen")
# Public: Is the current window in full screen mode?
isFullScreen: ->
@getCurrentWindow().isFullScreen()
# Public: Get the version of the Atom application.
#
# Returns the version text {String}.
getVersion: ->
@constructor.getVersion()
@@ -488,7 +491,7 @@ class Atom extends Model
# Public: Get the directory path to Atom's configuration area.
#
# Returns the absolute path to ~/.atom
# Returns the absolute path to `~/.atom`.
getConfigDirPath: ->
@constructor.getConfigDirPath()
+1 -1
Ver Arquivo
@@ -42,7 +42,7 @@ start = ->
app.removeListener 'open-url', addUrlToOpen
args.pathsToOpen = args.pathsToOpen.map (pathToOpen) ->
path.resolve(args.executedFrom ? process.cwd(), pathToOpen)
path.resolve(args.executedFrom ? process.cwd(), pathToOpen.toString())
require('coffee-script').register()
if args.devMode
+9 -2
Ver Arquivo
@@ -12,7 +12,7 @@ ChildProcess = require 'child_process'
# args = ['-ef']
# stdout = (output) -> console.log(output)
# exit = (code) -> console.log("ps -ef exited with #{code}")
# process = new BufferredProcess({command, args, stdout, exit})
# process = new BufferedProcess({command, args, stdout, exit})
# ```
module.exports =
class BufferedProcess
@@ -39,7 +39,14 @@ class BufferedProcess
# containing the exit status (optional).
constructor: ({command, args, options, stdout, stderr, exit}={}) ->
options ?= {}
@process = ChildProcess.spawn(command, args, options)
# Quick hack. Killing @process will only kill cmd.exe, and not the child
# process and will just orphan it. Does not escape ^ (cmd's escape symbol).
# Related to joyent/node#2318
if process.platform is "win32"
@process = ChildProcess.spawn(process.env.comspec || "cmd.exe",
[ "/c", command ].concat(args), options)
else
@process = ChildProcess.spawn(command, args, options)
@killed = false
stdoutClosed = true
+1 -1
Ver Arquivo
@@ -465,7 +465,7 @@ class Cursor extends Model
getCurrentParagraphBufferRange: ->
@editor.languageMode.rowRangeForParagraphAtBufferRow(@getBufferRow())
# Public: Returns the characters preceeding the cursor in the current word.
# Public: Returns the characters preceding the cursor in the current word.
getCurrentWordPrefix: ->
@editor.getTextInBufferRange([@getBeginningOfCurrentWordBufferPosition(), @getBufferPosition()])
+61 -6
Ver Arquivo
@@ -32,6 +32,8 @@ class DisplayBuffer extends Model
verticalScrollMargin: 2
horizontalScrollMargin: 6
horizontalScrollbarHeight: 15
verticalScrollbarWidth: 15
constructor: ({tabLength, @editorWidthInChars, @tokenizedBuffer, buffer}={}) ->
super
@@ -111,32 +113,83 @@ class DisplayBuffer extends Model
getHorizontalScrollMargin: -> @horizontalScrollMargin
setHorizontalScrollMargin: (@horizontalScrollMargin) -> @horizontalScrollMargin
getHeight: -> @height ? @getScrollHeight()
getHorizontalScrollbarHeight: -> @horizontalScrollbarHeight
setHorizontalScrollbarHeight: (@horizontalScrollbarHeight) -> @horizontalScrollbarHeight
getVerticalScrollbarWidth: -> @verticalScrollbarWidth
setVerticalScrollbarWidth: (@verticalScrollbarWidth) -> @verticalScrollbarWidth
getHeight: ->
if @height?
@height
else
if @horizontallyScrollable()
@getScrollHeight() + @getHorizontalScrollbarHeight()
else
@getScrollHeight()
setHeight: (@height) -> @height
getWidth: -> @width ? @getScrollWidth()
getClientHeight: (reentrant) ->
if @horizontallyScrollable(reentrant)
@getHeight() - @getHorizontalScrollbarHeight()
else
@getHeight()
getClientWidth: (reentrant) ->
if @verticallyScrollable(reentrant)
@getWidth() - @getVerticalScrollbarWidth()
else
@getWidth()
horizontallyScrollable: (reentrant) ->
return false unless @width?
return false if @getSoftWrap()
if reentrant
@getScrollWidth() > @getWidth()
else
@getScrollWidth() > @getClientWidth(true)
verticallyScrollable: (reentrant) ->
return false unless @height?
if reentrant
@getScrollHeight() > @getHeight()
else
@getScrollHeight() > @getClientHeight(true)
getWidth: ->
if @width?
@width
else
if @verticallyScrollable()
@getScrollWidth() + @getVerticalScrollbarWidth()
else
@getScrollWidth()
setWidth: (newWidth) ->
oldWidth = @width
@width = newWidth
@updateWrappedScreenLines() if newWidth isnt oldWidth and @softWrap
@setScrollTop(@getScrollTop()) # Ensure scrollTop is still valid in case horizontal scrollbar disappeared
@width
getScrollTop: -> @scrollTop
setScrollTop: (scrollTop) ->
if @manageScrollPosition
@scrollTop = Math.max(0, Math.min(@getScrollHeight() - @getHeight(), scrollTop))
@scrollTop = Math.max(0, Math.min(@getScrollHeight() - @getClientHeight(), scrollTop))
else
@scrollTop = scrollTop
getScrollBottom: -> @scrollTop + @height
setScrollBottom: (scrollBottom) ->
@setScrollTop(scrollBottom - @height)
@setScrollTop(scrollBottom - @getClientHeight())
@getScrollBottom()
getScrollLeft: -> @scrollLeft
setScrollLeft: (scrollLeft) ->
if @manageScrollPosition
@scrollLeft = Math.max(0, Math.min(@getScrollWidth() - @getWidth(), scrollLeft))
@scrollLeft = Math.max(0, Math.min(@getScrollWidth() - @getClientWidth(), scrollLeft))
@scrollLeft
else
@scrollLeft = scrollLeft
@@ -151,6 +204,8 @@ class DisplayBuffer extends Model
getDefaultCharWidth: -> @defaultCharWidth
setDefaultCharWidth: (@defaultCharWidth) -> @defaultCharWidth
getCursorWidth: -> 1
getScopedCharWidth: (scopeNames, char) ->
@getScopedCharWidths(scopeNames)[char]
@@ -178,7 +233,7 @@ class DisplayBuffer extends Model
@getLineCount() * @getLineHeight()
getScrollWidth: ->
@getMaxLineLength() * @getDefaultCharWidth()
(@getMaxLineLength() * @getDefaultCharWidth()) + @getCursorWidth()
getVisibleRowRange: ->
unless @getLineHeight() > 0
+78 -3
Ver Arquivo
@@ -1,10 +1,12 @@
React = require 'react'
{div, span} = require 'reactionary'
{debounce} = require 'underscore-plus'
scrollbarStyle = require 'scrollbar-style'
GutterComponent = require './gutter-component'
EditorScrollViewComponent = require './editor-scroll-view-component'
ScrollbarComponent = require './scrollbar-component'
ScrollbarCornerComponent = require './scrollbar-corner-component'
SubscriberMixin = require './subscriber-mixin'
module.exports =
@@ -20,10 +22,15 @@ EditorComponent = React.createClass
cursorsMoved: false
preservedRowRange: null
scrollingVertically: false
gutterWidth: 0
refreshingScrollbars: false
measuringScrollbars: true
render: ->
{focused, fontSize, lineHeight, fontFamily, showIndentGuide} = @state
{editor, cursorBlinkPeriod, cursorBlinkResumeDelay} = @props
maxLineNumberDigits = editor.getScreenLineCount().toString().length
if @isMounted()
renderedRowRange = @getRenderedRowRange()
scrollHeight = editor.getScrollHeight()
@@ -31,14 +38,19 @@ EditorComponent = React.createClass
scrollTop = editor.getScrollTop()
scrollLeft = editor.getScrollLeft()
lineHeightInPixels = editor.getLineHeight()
horizontalScrollbarHeight = editor.getHorizontalScrollbarHeight()
verticalScrollbarWidth = editor.getVerticalScrollbarWidth()
verticallyScrollable = editor.verticallyScrollable()
horizontallyScrollable = editor.horizontallyScrollable()
className = 'editor editor-colors react'
className += ' is-focused' if focused
div className: className, style: {fontSize, lineHeight, fontFamily}, tabIndex: -1,
GutterComponent {
editor, renderedRowRange, scrollTop, scrollHeight,
lineHeight: lineHeightInPixels, @pendingChanges
editor, renderedRowRange, maxLineNumberDigits, scrollTop, scrollHeight,
lineHeight: lineHeightInPixels, fontSize, fontFamily, @pendingChanges,
onWidthChanged: @onGutterWidthChanged
}
EditorScrollViewComponent {
@@ -55,6 +67,10 @@ EditorComponent = React.createClass
onScroll: @onVerticalScroll
scrollTop: scrollTop
scrollHeight: scrollHeight
visible: verticallyScrollable and not @refreshingScrollbars and not @measuringScrollbars
scrollableInOppositeDirection: horizontallyScrollable
verticalScrollbarWidth: verticalScrollbarWidth
horizontalScrollbarHeight: horizontalScrollbarHeight
ScrollbarComponent
ref: 'horizontalScrollbar'
@@ -62,7 +78,19 @@ EditorComponent = React.createClass
orientation: 'horizontal'
onScroll: @onHorizontalScroll
scrollLeft: scrollLeft
scrollWidth: scrollWidth
scrollWidth: scrollWidth + @gutterWidth
visible: horizontallyScrollable and not @refreshingScrollbars and not @measuringScrollbars
scrollableInOppositeDirection: verticallyScrollable
verticalScrollbarWidth: verticalScrollbarWidth
horizontalScrollbarHeight: horizontalScrollbarHeight
# Also used to measure the height/width of scrollbars after the initial render
ScrollbarCornerComponent
ref: 'scrollbarCorner'
visible: not @refreshingScrollbars and (@measuringScrollbars or horizontallyScrollable and verticallyScrollable)
measuringScrollbars: @measuringScrollbars
height: horizontalScrollbarHeight
width: verticalScrollbarWidth
getRenderedRowRange: ->
renderedRowRange = @props.editor.getVisibleRowRange()
@@ -86,6 +114,9 @@ EditorComponent = React.createClass
@observeEditor()
@listenForDOMEvents()
@listenForCommands()
@measureScrollbars()
@subscribe atom.themes, 'stylesheet-added stylsheet-removed', @onStylesheetsChanged
@subscribe scrollbarStyle.changes, @refreshScrollbars
@props.editor.setVisible(true)
@requestUpdate()
@@ -99,6 +130,8 @@ EditorComponent = React.createClass
componentDidUpdate: ->
@pendingChanges.length = 0
@cursorsMoved = false
@refreshingScrollbars = false
@measureScrollbars() if @measuringScrollbars
@props.parentView.trigger 'editor:display-updated'
observeEditor: ->
@@ -230,6 +263,16 @@ EditorComponent = React.createClass
@subscribe atom.config.observe 'editor.fontSize', @setFontSize
@subscribe atom.config.observe 'editor.showIndentGuide', @setShowIndentGuide
measureScrollbars: ->
@measuringScrollbars = false
{editor} = @props
scrollbarCornerNode = @refs.scrollbarCorner.getDOMNode()
width = (scrollbarCornerNode.offsetWidth - scrollbarCornerNode.clientWidth) or 15
height = (scrollbarCornerNode.offsetHeight - scrollbarCornerNode.clientHeight) or 15
editor.setVerticalScrollbarWidth(width)
editor.setHorizontalScrollbarHeight(height)
setFontSize: (fontSize) ->
@setState({fontSize})
@@ -285,6 +328,35 @@ EditorComponent = React.createClass
event.preventDefault()
onStylesheetsChanged: (stylesheet) ->
@refreshScrollbars() if @containsScrollbarSelector(stylesheet)
containsScrollbarSelector: (stylesheet) ->
for rule in stylesheet.cssRules
if rule.selectorText?.indexOf('scrollbar') > -1
return true
false
refreshScrollbars: ->
# Believe it or not, proper handling of changes to scrollbar styles requires
# three DOM updates.
# Scrollbar style changes won't apply to scrollbars that are already
# visible, so first we need to hide scrollbars so we can redisplay them and
# force Chromium to apply updates.
@refreshingScrollbars = true
@requestUpdate()
# Next, we display only the scrollbar corner so we can measure the new
# scrollbar dimensions. The ::measuringScrollbars property will be set back
# to false after the scrollbars are measured.
@measuringScrollbars = true
@requestUpdate()
# Finally, we restore the scrollbars based on the newly-measured dimensions
# if the editor's content and dimensions require them to be visible.
@requestUpdate()
clearPreservedRowRange: ->
@preservedRowRange = null
@scrollingVertically = false
@@ -325,6 +397,9 @@ EditorComponent = React.createClass
onCursorsMoved: ->
@cursorsMoved = true
onGutterWidthChanged: (@gutterWidth) ->
@requestUpdate()
requestUpdate: ->
if @batchingUpdates
@updateRequested = true
+8 -6
Ver Arquivo
@@ -182,17 +182,19 @@ EditorScrollViewComponent = React.createClass
measureHeightAndWidth: ->
return unless @isMounted()
node = @getDOMNode()
computedStyle = getComputedStyle(node)
{editor} = @props
node = @getDOMNode()
editorNode = node.parentNode
{position} = getComputedStyle(editorNode)
{width, height} = editorNode.style
unless computedStyle.height is '0px'
clientHeight = node.clientHeight
if position is 'absolute' or height
clientHeight = node.clientHeight
editor.setHeight(clientHeight) if clientHeight > 0
unless computedStyle.width is '0px'
if position is 'absolute' or width
clientWidth = node.clientWidth
editor.setWidth(clientWidth) if clientHeight > 0
editor.setWidth(clientWidth) if clientWidth > 0
focus: ->
@refs.input.focus()
+4 -1
Ver Arquivo
@@ -50,7 +50,7 @@ class EditorView extends View
showLineNumbers: true
autoIndent: true
normalizeIndentOnPaste: true
nonWordCharacters: "./\\()\"':,.;<>~!@#$%^&*|+=[]{}`?-"
nonWordCharacters: "/\\()\"':,.;<>~!@#$%^&*|+=[]{}`?-"
preferredLineLength: 80
tabLength: 2
softWrap: false
@@ -460,6 +460,9 @@ class EditorView extends View
@hiddenInput.val(lastInput)
false
# Ignore paste event, on Linux is wrongly emitted when user presses ctrl-v.
@on "paste", -> false
bringHiddenInputIntoView: ->
@hiddenInput.css(top: @scrollTop(), left: @scrollLeft())
+50 -14
Ver Arquivo
@@ -160,7 +160,7 @@ class Editor extends Model
@displayBuffer ?= new DisplayBuffer({buffer, tabLength, softWrap})
@buffer = @displayBuffer.buffer
@softTabs = @buffer.usesSoftTabs() ? @softTabs ? atom.config.get('editor.softTabs') ? true
@softTabs = @usesSoftTabs() ? @softTabs ? atom.config.get('editor.softTabs') ? true
for marker in @findMarkers(@getSelectionMarkerAttributes())
marker.setAttributes(preserveFolds: true)
@@ -264,7 +264,7 @@ class Editor extends Model
else
'untitled'
# Controls visiblity based on the given {Boolean}.
# Controls visibility based on the given {Boolean}.
setVisible: (visible) -> @displayBuffer.setVisible(visible)
# Set the number of characters that can be displayed horizontally in the
@@ -275,7 +275,7 @@ class Editor extends Model
setEditorWidthInChars: (editorWidthInChars) ->
@displayBuffer.setEditorWidthInChars(editorWidthInChars)
# Public: Sets the column at which columsn will soft wrap
# Public: Sets the column at which column will soft wrap
getSoftWrapColumn: -> @displayBuffer.getSoftWrapColumn()
# Public: Returns a {Boolean} indicating whether softTabs are enabled for this
@@ -317,6 +317,19 @@ class Editor extends Model
# Public: Set the on-screen length of tab characters.
setTabLength: (tabLength) -> @displayBuffer.setTabLength(tabLength)
# Public: Determine if the buffer uses hard or soft tabs.
#
# Returns `true` if the first non-comment line with leading whitespace starts
# with a space character. Returns `false` if it starts with a hard tab (`\t`).
#
# Returns a {Boolean},
usesSoftTabs: ->
for bufferRow in [0..@buffer.getLastRow()]
continue if @displayBuffer.tokenizedBuffer.lineForScreenRow(bufferRow).isComment()
if match = @buffer.lineForRow(bufferRow).match(/^\s/)
return match[0][0] != '\t'
undefined
# Public: Clip the given {Point} to a valid position in the buffer.
#
# If the given {Point} describes a position that is actually reachable by the
@@ -563,8 +576,8 @@ class Editor extends Model
bufferRowForScreenRow: (row) -> @displayBuffer.bufferRowForScreenRow(row)
# Public: Get the syntactic scopes for the most the given position in buffer
# coorditanates.
# Public: Get the syntactic scopes for the given position in buffer
# coordinates.
#
# For example, if called with a position inside the parameter list of an
# anonymous CoffeeScript function, the method returns the following array:
@@ -725,13 +738,24 @@ class Editor extends Model
# Public: For each selection, replace the selected text with the contents of
# the clipboard.
#
# If the clipboard contains the same number of selections as the current
# editor, each selection will be replaced with the content of the
# corresponding clipboard selection text.
#
# options - See {Selection::insertText}.
pasteText: (options={}) ->
{text, metadata} = atom.clipboard.readWithMetadata()
containsNewlines = text.indexOf('\n') isnt -1
if atom.config.get('editor.normalizeIndentOnPaste') and metadata
if metadata?.selections? and metadata.selections.length is @getSelections().length
@mutateSelectedText (selection, index) ->
text = metadata.selections[index]
selection.insertText(text, options)
return
else if atom.config.get("editor.normalizeIndentOnPaste") and metadata?.indentBasis?
if !@getCursor().hasPrecedingCharactersOnLine() or containsNewlines
options.indentBasis ?= metadata.indentBasis
@@ -1007,7 +1031,7 @@ class Editor extends Model
#
# fn - A {Function} that will be called with each {Selection}.
mutateSelectedText: (fn) ->
@transact => fn(selection) for selection in @getSelections()
@transact => fn(selection,index) for selection,index in @getSelections()
replaceSelectedText: (options={}, fn) ->
{selectWordIfEmpty} = options
@@ -1269,7 +1293,7 @@ class Editor extends Model
# Public: Determine if a given range in buffer coordinates intersects a
# selection.
#
# bufferRange - A {Range} or range-comptatible {Array}.
# bufferRange - A {Range} or range-compatible {Array}.
#
# Returns a {Boolean}.
selectionIntersectsBufferRange: (bufferRange) ->
@@ -1543,28 +1567,28 @@ class Editor extends Model
# cursor is already on the first character of the line, move it to the
# beginning of the line.
#
# This method may merge selections that end up intesecting.
# This method may merge selections that end up intersecting.
selectToFirstCharacterOfLine: ->
@expandSelectionsBackward (selection) => selection.selectToFirstCharacterOfLine()
# Public: Move the cursor of each selection to the end of its line while
# preserving the selection's tail position.
#
# This method may merge selections that end up intesecting.
# This method may merge selections that end up intersecting.
selectToEndOfLine: ->
@expandSelectionsForward (selection) => selection.selectToEndOfLine()
# Public: For each selection, move its cursor to the preceding word boundary
# while maintaining the selection's tail position.
#
# This method may merge selections that end up intesecting.
# This method may merge selections that end up intersecting.
selectToPreviousWordBoundary: ->
@expandSelectionsBackward (selection) => selection.selectToPreviousWordBoundary()
# Public: For each selection, move its cursor to the next word boundary while
# maintaining the selection's tail position.
#
# This method may merge selections that end up intesecting.
# This method may merge selections that end up intersecting.
selectToNextWordBoundary: ->
@expandSelectionsForward (selection) => selection.selectToNextWordBoundary()
@@ -1574,7 +1598,7 @@ class Editor extends Model
selectLine: ->
@expandSelectionsForward (selection) => selection.selectLine()
# Public: Add a similarly-shaped selection to the next elibible line below
# Public: Add a similarly-shaped selection to the next eligible line below
# each selection.
#
# Operates on all selections. If the selection is empty, adds an empty
@@ -1585,7 +1609,7 @@ class Editor extends Model
addSelectionBelow: ->
@expandSelectionsForward (selection) => selection.addSelectionBelow()
# Public: Add a similarly-shaped selection to the next elibible line above
# Public: Add a similarly-shaped selection to the next eligible line above
# each selection.
#
# Operates on all selections. If the selection is empty, adds an empty
@@ -1838,6 +1862,8 @@ class Editor extends Model
setHeight: (height) -> @displayBuffer.setHeight(height)
getHeight: -> @displayBuffer.getHeight()
getClientHeight: -> @displayBuffer.getClientHeight()
setWidth: (width) -> @displayBuffer.setWidth(width)
getWidth: -> @displayBuffer.getWidth()
@@ -1876,6 +1902,16 @@ class Editor extends Model
scrollToBufferPosition: (bufferPosition) -> @displayBuffer.scrollToBufferPosition(bufferPosition)
horizontallyScrollable: -> @displayBuffer.horizontallyScrollable()
verticallyScrollable: -> @displayBuffer.verticallyScrollable()
getHorizontalScrollbarHeight: -> @displayBuffer.getHorizontalScrollbarHeight()
setHorizontalScrollbarHeight: (height) -> @displayBuffer.setHorizontalScrollbarHeight(height)
getVerticalScrollbarWidth: -> @displayBuffer.getVerticalScrollbarWidth()
setVerticalScrollbarWidth: (width) -> @displayBuffer.setVerticalScrollbarWidth(width)
# Deprecated: Call {::joinLines} instead.
joinLine: ->
deprecate("Use Editor::joinLines() instead")
+1 -1
Ver Arquivo
@@ -13,7 +13,7 @@ Task = require './task'
# `atom.project` global and calling `getRepo()`. Note that this will only be
# available when the project is backed by a Git repository.
#
# This class handles submodules automically by taking a `path` argument to many
# This class handles submodules automatically by taking a `path` argument to many
# of the methods. This `path` argument will determine which underlying
# repository is used.
#
+17 -9
Ver Arquivo
@@ -8,18 +8,19 @@ GutterComponent = React.createClass
displayName: 'GutterComponent'
mixins: [SubscriberMixin]
lastMeasuredWidth: null
render: ->
div className: 'gutter',
@renderLineNumbers() if @isMounted()
renderLineNumbers: ->
{editor, renderedRowRange, scrollTop, scrollHeight} = @props
{editor, renderedRowRange, maxLineNumberDigits, scrollTop, scrollHeight} = @props
[startRow, endRow] = renderedRowRange
charWidth = editor.getDefaultCharWidth()
lineHeight = editor.getLineHeight()
maxDigits = editor.getLastBufferRow().toString().length
style =
width: charWidth * (maxDigits + 1.5)
width: charWidth * (maxLineNumberDigits + 1.5)
height: scrollHeight
WebkitTransform: "translate3d(0, #{-scrollTop}px, 0)"
@@ -35,7 +36,7 @@ GutterComponent = React.createClass
key = tokenizedLines[i].id
screenRow = startRow + i
lineNumbers.push(LineNumberComponent({key, lineNumber, maxDigits, bufferRow, screenRow, lineHeight}))
lineNumbers.push(LineNumberComponent({key, lineNumber, maxLineNumberDigits, bufferRow, screenRow, lineHeight}))
lastBufferRow = bufferRow
div className: 'line-numbers', style: style,
@@ -45,7 +46,7 @@ GutterComponent = React.createClass
# non-zero-delta change to the screen lines has occurred within the current
# visible row range.
shouldComponentUpdate: (newProps) ->
return true unless isEqualForProperties(newProps, @props, 'renderedRowRange', 'scrollTop', 'lineHeight')
return true unless isEqualForProperties(newProps, @props, 'renderedRowRange', 'scrollTop', 'lineHeight', 'fontSize')
{renderedRowRange, pendingChanges} = newProps
for change in pendingChanges when change.screenDelta > 0 or change.bufferDelta > 0
@@ -53,6 +54,13 @@ GutterComponent = React.createClass
false
componentDidUpdate: (oldProps) ->
unless @lastMeasuredWidth? and isEqualForProperties(oldProps, @props, 'maxLineNumberDigits', 'fontSize', 'fontFamily')
width = @getDOMNode().offsetWidth
if width isnt @lastMeasuredWidth
@lastMeasuredWidth = width
@props.onWidthChanged(width)
LineNumberComponent = React.createClass
displayName: 'LineNumberComponent'
@@ -66,9 +74,9 @@ LineNumberComponent = React.createClass
dangerouslySetInnerHTML: {__html: @buildInnerHTML()}
buildInnerHTML: ->
{lineNumber, maxDigits} = @props
if lineNumber.length < maxDigits
padding = multiplyString('&nbsp;', maxDigits - lineNumber.length)
{lineNumber, maxLineNumberDigits} = @props
if lineNumber.length < maxLineNumberDigits
padding = multiplyString('&nbsp;', maxLineNumberDigits - lineNumber.length)
padding + lineNumber + @iconDivHTML
else
lineNumber + @iconDivHTML
@@ -76,4 +84,4 @@ LineNumberComponent = React.createClass
iconDivHTML: '<div class="icon-right"></div>'
shouldComponentUpdate: (newProps) ->
not isEqualForProperties(newProps, @props, 'lineHeight', 'screenRow')
not isEqualForProperties(newProps, @props, 'lineHeight', 'screenRow', 'maxLineNumberDigits')
+4 -1
Ver Arquivo
@@ -43,7 +43,10 @@ class PackageManager
# Public: Get the path to the apm command
getApmPath: ->
@apmPath ?= path.resolve(__dirname, '..', 'apm', 'node_modules', 'atom-package-manager', 'bin', 'apm')
commandName = 'apm'
if process.platform == 'win32'
commandName += '.cmd'
@apmPath ?= path.resolve(__dirname, '..', 'apm', 'node_modules', 'atom-package-manager', 'bin', commandName)
# Public: Get the paths being used to look for packages.
#
+1 -1
Ver Arquivo
@@ -10,7 +10,7 @@ Pane = require './pane'
# Items can be almost anything however most commonly they're {EditorView}s.
#
# Most packages won't need to use this class, unless you're interested in
# building a package that deals with switching between panes or tiems.
# building a package that deals with switching between panes or items.
module.exports =
class PaneView extends View
Delegator.includeInto(this)
+18 -5
Ver Arquivo
@@ -1,13 +1,24 @@
React = require 'react'
{div} = require 'reactionary'
{isEqualForProperties} = require 'underscore-plus'
{extend, isEqualForProperties} = require 'underscore-plus'
module.exports =
ScrollbarComponent = React.createClass
render: ->
{orientation, className, scrollHeight, scrollWidth} = @props
{orientation, className, scrollHeight, scrollWidth, visible} = @props
{scrollableInOppositeDirection, horizontalScrollbarHeight, verticalScrollbarWidth} = @props
div {className, @onScroll},
style = {}
style.display = 'none' unless visible
switch orientation
when 'vertical'
style.width = verticalScrollbarWidth
style.bottom = horizontalScrollbarHeight if scrollableInOppositeDirection
when 'horizontal'
style.height = horizontalScrollbarHeight
style.right = verticalScrollbarWidth if scrollableInOppositeDirection
div {className, style, @onScroll},
switch orientation
when 'vertical'
div className: 'scrollbar-content', style: {height: scrollHeight}
@@ -21,11 +32,13 @@ ScrollbarComponent = React.createClass
throw new Error("Must specify an orientation property of 'vertical' or 'horizontal'")
shouldComponentUpdate: (newProps) ->
return true if newProps.visible isnt @props.visible
switch @props.orientation
when 'vertical'
not isEqualForProperties(newProps, @props, 'scrollHeight', 'scrollTop')
not isEqualForProperties(newProps, @props, 'scrollHeight', 'scrollTop', 'scrollableInOppositeDirection')
when 'horizontal'
not isEqualForProperties(newProps, @props, 'scrollWidth', 'scrollLeft')
not isEqualForProperties(newProps, @props, 'scrollWidth', 'scrollLeft', 'scrollableInOppositeDirection')
componentDidUpdate: ->
{orientation, scrollTop, scrollLeft} = @props
+18
Ver Arquivo
@@ -0,0 +1,18 @@
React = require 'react'
{div} = require 'reactionary'
module.exports =
ScrollbarComponent = React.createClass
render: ->
{visible, measuringScrollbars, width, height} = @props
if measuringScrollbars
height = 25
width = 25
display = 'none' unless visible
div className: 'scrollbar-corner', style: {display, width, height},
div style:
height: height + 1
width: width + 1
+13 -1
Ver Arquivo
@@ -503,11 +503,23 @@ class Selection extends Model
@delete()
# Public: Copies the current selection to the clipboard.
#
# If the `maintainClipboard` is set to `true`, a specific metadata property
# is created to store each content copied to the clipboard. The clipboard
# `text` still contains the concatenation of the clipboard with the
# current selection.
copy: (maintainClipboard=false) ->
return if @isEmpty()
text = @editor.buffer.getTextInRange(@getBufferRange())
if maintainClipboard
text = "#{atom.clipboard.read()}\n#{text}"
{text: clipboardText, metadata} = atom.clipboard.readWithMetadata()
if metadata?.selections?
metadata.selections.push(text)
else
metadata = { selections: [clipboardText, text] }
text = "" + (clipboardText) + "\n" + text
else
metadata = { indentBasis: @editor.indentationForBufferRow(@getBufferRange().start.row) }
+16 -8
Ver Arquivo
@@ -158,10 +158,10 @@ class ThemeManager
# load path.
#
# Returns the absolute path to the required stylesheet.
requireStylesheet: (stylesheetPath, ttype = 'bundled', htmlElement) ->
requireStylesheet: (stylesheetPath, type = 'bundled', htmlElement) ->
if fullPath = @resolveStylesheet(stylesheetPath)
content = @loadStylesheet(fullPath)
@applyStylesheet(fullPath, content, ttype = 'bundled', htmlElement)
@applyStylesheet(fullPath, content, type = 'bundled', htmlElement)
else
throw new Error("Could not find a file at path '#{stylesheetPath}'")
@@ -192,16 +192,24 @@ class ThemeManager
removeStylesheet: (stylesheetPath) ->
fullPath = @resolveStylesheet(stylesheetPath) ? stylesheetPath
@stylesheetElementForId(@stringToId(fullPath)).remove()
@emit 'stylesheets-changed'
element = @stylesheetElementForId(@stringToId(fullPath))
if element.length > 0
stylesheet = element[0].sheet
element.remove()
@emit 'stylesheet-removed', stylesheet
@emit 'stylesheets-changed'
applyStylesheet: (path, text, ttype = 'bundled', htmlElement=$('html')) ->
applyStylesheet: (path, text, type = 'bundled', htmlElement=$('html')) ->
styleElement = @stylesheetElementForId(@stringToId(path), htmlElement)
if styleElement.length
@emit 'stylesheet-removed', styleElement[0].sheet
styleElement.text(text)
else
if htmlElement.find("head style.#{ttype}").length
htmlElement.find("head style.#{ttype}:last").after "<style class='#{ttype}' id='#{@stringToId(path)}'>#{text}</style>"
styleElement = $("<style class='#{type}' id='#{@stringToId(path)}'>#{text}</style>")
if htmlElement.find("head style.#{type}").length
htmlElement.find("head style.#{type}:last").after(styleElement)
else
htmlElement.find("head").append "<style class='#{ttype}' id='#{@stringToId(path)}'>#{text}</style>"
htmlElement.find("head").append(styleElement)
@emit 'stylesheet-added', styleElement[0].sheet
@emit 'stylesheets-changed'
+3 -3
Ver Arquivo
@@ -24,9 +24,9 @@ Editor = require './editor'
# with the model object when possible, but it won't always be possible with the
# current API.
#
# ## Adding Perimiter Panels
# ## Adding Perimeter Panels
#
# Use the following methods if possible to attach panels to the perimiter of the
# Use the following methods if possible to attach panels to the perimeter of the
# workspace rather than manipulating the DOM directly to better insulate you to
# changes in the workspace markup:
#
@@ -64,7 +64,7 @@ class WorkspaceView extends View
@version: 4
@configDefaults:
ignoredNames: [".git", ".svn", ".DS_Store"]
ignoredNames: [".git", ".hg", ".svn", ".DS_Store", "Thumbs.db"]
excludeVcsIgnoredPaths: true
disabledPackages: []
themes: ['atom-dark-ui', 'atom-dark-syntax']
+11
Ver Arquivo
@@ -32,6 +32,17 @@
}
}
.vertical-scrollbar {
overflow-x: hidden;
}
.scrollbar-corner {
position: absolute;
overflow: auto;
bottom: 0;
right: 0;
}
.scroll-view {
overflow: hidden;
}