Commit Graph

607 Commits

Author SHA1 Message Date
Nathan Sobo
eeae6c4ee2 Corretly select word and line w/ mouse with wraps and folds 2012-03-01 12:44:26 -07:00
Nathan Sobo
eaf76798ae Eliminate weird behavior with wrapping + folding 2012-03-01 11:52:37 -07:00
Nathan Sobo
eb0df2f21d Fix bug in LineMap.spliceByDelta with multi-fragment screen lines
If the row following a row being replaced had multiple fragments, some
of these fragments would be accidentally deleted.
2012-03-01 11:52:27 -07:00
Nathan Sobo
32a6a2cd7f Refer to "buffer" and "screen" coordinate spaces as "input" and "output"
Since we compose the line wrapper and the line folder together, the
line map is not always translating between screen and buffer coordinate
spaces. It's translating one step in the chain, with output closer to
the screen and input closer to the buffer.
2012-02-29 18:39:45 -07:00
Nathan Sobo
f394716508 Implement clipScreenPosition in terms of translatePosition 2012-02-29 16:47:56 -07:00
Corey Johnson & Nathan Sobo
ffeaf7ed17 Remove menu code and tests 2012-02-29 13:47:48 -08:00
Corey Johnson & Nathan Sobo
bce834aea0 Chrome has a different default charWidth 2012-02-29 13:27:12 -08:00
Nathan Sobo
78c2ff7801 Express LineMap insertion in terms of spliceByDelta 2012-02-29 13:57:57 -07:00
Corey Johnson & Nathan Sobo
632a2cb64a Stop listening or trigger events from App
It causes DOM errors when you reload.
2012-02-29 12:04:41 -08:00
Corey Johnson & Nathan Sobo
be463abe42 Move keymap from app to window 2012-02-29 11:33:15 -08:00
Nathan Sobo
634b90d17a Remove unused eagerWrap option from position translation 2012-02-29 12:19:16 -07:00
Nathan Sobo
69531282bf Remove ability to pass single fragments to LineMap.insertAtBufferRow 2012-02-29 12:00:36 -07:00
Nathan Sobo
7f13f9b946 Folds can start at the same position as their nested folds 2012-02-29 11:47:55 -07:00
Nathan Sobo
20dff5e79d Can start folds earlier on the same line as other folds. 2012-02-29 11:41:53 -07:00
Nathan Sobo
0510989e1c 💄 2012-02-28 22:46:32 -07:00
Nathan Sobo
f785b6168d Correctly handle folds that end at the start of a line
The falsyness of 0 was again biting us
2012-02-28 22:46:26 -07:00
Nathan Sobo
adea60dd4d Folds starting on the first line of the buffer can be unfolded 2012-02-28 22:36:29 -07:00
Nathan Sobo
156cfabbf1 LineMap.spliceScreenRow can replace multiple fragments at row 0
Subtle bug where the falsiness of 0 was causing line fragments on the
0th row to be skipped
2012-02-28 22:36:12 -07:00
Nathan Sobo
478971f18f Folds containing nested folds can be unfolded
There are still problems with nested folds that start on the same line.
2012-02-28 22:10:52 -07:00
Nathan Sobo
cf850b8e7e Move the cursor to start of folded range on unfold 2012-02-28 19:53:02 -07:00
Nathan Sobo
17e78f41ae Clicking a fold placeholder removes the associated fold
There are some problems with nested folds that still need to be ironed
out.
2012-02-28 19:46:41 -07:00
Nathan Sobo
da53eeb80d Folds can start at the beginning of a line 2012-02-28 19:02:26 -07:00
Corey Johnson & Nathan Sobo
c84320b536 window-bootstrap is called when a file is opened. 2012-02-28 17:24:58 -08:00
Corey Johnson & Nathan Sobo
4b8bf90a20 Merge remote-tracking branch 'origin/folding' into chrome 2012-02-28 16:07:35 -08:00
Corey Johnson & Nathan Sobo
b37b45b4b1 atom variable holds all global state and is shared across contexts. 2012-02-28 13:14:35 -08:00
Nathan Sobo
65c7a6126e Style the fold placeholder. 2012-02-28 12:27:35 -07:00
Corey Johnson & Nathan Sobo
6e46b97a5c Cursor moves correctly between wrapped lines
Added explicit options for controlling line wrapping, and skipping of
atomic tokens to the LineWrap.clipScreenPosition. These are used when
moving right to wrap to the next line.
2012-02-27 16:56:02 -07:00
Corey Johnson
e689d78231 Merge branch 'master' into chrome 2012-02-27 14:09:24 -08:00
Corey Johnson
0845fc15c8 Ignore menu items for now. 2012-02-27 13:57:52 -08:00
Corey Johnson
71cab248cf rename listFiles to list 2012-02-27 13:42:54 -08:00
Nathan Sobo
f2f401e5a1 Rely on clipScreenPosition in vertical movement methods
Before, we were manually clipping the position of the cursor in
vertical movement methods. Now we can just increment / decrement the
row and the position will be clipped when it is assigned.

Also, changed the definition of clip screen position to always 0 out
the column when the row is negative.
2012-02-27 13:16:21 -07:00
Nathan Sobo
f24a045e11 Cursor can move to last row when lines are wrapped 2012-02-27 13:07:59 -07:00
Nathan Sobo
22305f350f Skip fold placeholders when moving right
This relies on a new `eagerWrap` option to clipScreenPosition which
will wrap positions inside of atomic line fragments (which is what fold
placeholders are) to the end of the fragment rather than the beginning.
It also wraps positions beyond the end of a hard line to the next line,
which means Cursor.moveRight just has to increment the column, then
call clipPosition with eager wrap set to true to get all the correct
behavior.
2012-02-27 12:45:26 -07:00
Corey Johnson
8cbf4331e4 Remove references to OSX from fs.coffee and make fs specs pass. 2012-02-27 11:38:25 -08:00
Nathan Sobo
c2cba8bdcd Add failing spec for rightward movement over folds. 2012-02-27 11:22:20 -07:00
Nathan Sobo
8e107359f3 Changes correctly update cursor position when there are folds 2012-02-24 22:08:34 -07:00
Nathan Sobo
0bc510ab58 Properly translate positions when wrapper and folder are composed
The key was in LineMap.linesForScreenRows. For each screen line, it
concatenates all line fragments (if there are indeed more than 1) that
traverse that line to return a single line fragment representing the
line. The key was to update the buffer delta for that fragment to
always be 1,0. Because the wrapper is treating the folder as if it's
the buffer, the lines it stores in its map need to traverse only a
single "buffer" line (that's a single line after folds are taken into
account). We may need better language than "screen" and "buffer"
because the wrapper treats the folder as the "buffer" but that's
confusing because it isn't.
2012-02-24 21:56:18 -07:00
Nathan Sobo
17205cae3f WIP: Working on position translation. Pretty broken right now.
The layered relationship between the line wrapper and the folder is
still not quite ironed out yet. The editor behaves pretty erratically
when text is folded.
2012-02-24 21:05:49 -07:00
Nathan Sobo
33ff32f9a4 Add clipScreenPosition to LineFolder & LineMap 2012-02-24 15:35:28 -07:00
Nathan Sobo
b8ef7685de LineWrapper translates positions correctly with respect to folding. 2012-02-24 14:20:06 -07:00
Nathan Sobo
63be776837 LineFolder emits 'fold' and 'unfold' events 2012-02-24 14:18:55 -07:00
Nathan Sobo
c8c7033550 Rename Cursor.set/getPosition to set/getScreenPosition
Now that buffer positions don't always line up with screen positions, it's important that it's clear which one we're talking about.
2012-02-24 11:53:18 -07:00
Nathan Sobo
dfcf4a1629 Alt-meta-f folds the current selection 2012-02-24 11:30:32 -07:00
Nathan Sobo
0bdc45037f Install the LineFolder into the editor
LineWrapper now takes a LineFolder instead of a Highlighter. It's a
cascade of processing steps.
2012-02-23 22:19:42 -07:00
Nathan Sobo
8eed1a4c94 💄 2012-02-23 22:18:27 -07:00
Nathan Sobo
c0d0768df8 A change to a range surrounding a fold removes the fold 2012-02-23 22:12:21 -07:00
Nathan Sobo
422df7989a Handle changes inside of folds.
Don't emit an event since nothing changes (since it's all folded). But update the position of the fold's end marker so when it's unfolded, things render correctly.
2012-02-23 17:28:55 -07:00
Nathan Sobo
de5eab13d2 Insertions at beginning/end of a fold are considered to be outside it.
Also added a spec where text is changed on a line in between two
placeholders and handled correctly.
2012-02-23 17:08:54 -07:00
Nathan Sobo
d229585cd4 Handle changes to unfolded text directly preceding a fold placeholder 2012-02-23 16:32:57 -07:00
Nathan Sobo
16a2fd0bb3 WIP: Start handling buffer updates w/ LineFolder
Still a ways to go here, but folds are moved correctly when there are
buffer updates. Many unfinished specs.
2012-02-23 16:12:22 -07:00
Nathan Sobo
43c66a02a4 Merge Delta into Point
Point and delta were really pretty much the same thing. Point might need to be renamed… I'm thinking now it should be called offset, and have rows and columns instead of a row and column. Then you could interpret it as an offset from the beginning of the buffer, or an offset from any other location.
2012-02-23 15:38:03 -07:00
Nathan Sobo
e8ba72c3ec Fixes for screenLineCount rename 2012-02-22 22:42:17 -07:00
Nathan Sobo
5bb539df27 💄 2012-02-22 17:36:38 -07:00
Nathan Sobo
237c03be7b 💄
More consistent method names among Highlighter, LineWrapper,
LineFolder, and LineMap
2012-02-22 17:24:27 -07:00
Corey Johnson
947b06b063 Stop app specs from running.
These will be the last thing to implement.
2012-02-22 16:08:11 -08:00
Nathan Sobo
852d066378 💄 2012-02-22 16:53:08 -07:00
Nathan Sobo
7bf12430cd Folds can be created and destroyed; Folder emits change events
Reorganized the line folder spec around creating and destroying folds
2012-02-22 16:52:18 -07:00
Corey Johnson
b99c4deb49 Fix path to specs. Now spec-suite runs. 2012-02-22 15:08:19 -08:00
Nathan Sobo
cf00753c9c WIP: can destroy folds. emits change events. 2012-02-22 14:02:51 -07:00
Nathan Sobo
3ba17d28e8 Un F 2012-02-22 12:20:50 -07:00
Nathan Sobo
e42a8878e9 Fix position translation 2012-02-22 12:17:08 -07:00
Nathan Sobo
2132b5f8f4 Buffer positions inside folds translate to screen positions preceding fold placeholder 2012-02-22 11:15:15 -07:00
Nathan Sobo
8ef270f797 Add more position translation specs to LineFolder spec 2012-02-22 10:48:35 -07:00
Nathan Sobo
526f15bcd2 Remove SpanIndex. Fully replaced by LineMap 2012-02-22 10:29:07 -07:00
Nathan Sobo
ab9a93b390 Eliminate old ScreenLine 2012-02-22 10:27:49 -07:00
Nathan Sobo
29543c73b7 Add LineMap.lineForBufferRow to support LineWrapper
LineWrapper uses lineForBufferRow to expand ranges to encompass the
entire span of the lines that contain them when emitting change events.
2012-02-21 23:33:55 -07:00
Nathan Sobo
c13b90b6b6 Back LineWrapper.bufferPositionForScreenPosition with LineMap
Also rename From -> For
2012-02-21 09:46:30 -07:00
Nathan Sobo
8c810bbbcf Use LineMap in LineWrapper.screenPositionForBufferPosition
Also rename from screenPositionFrom… to screenPositionFor… and rename allowEOL parameter (which defaults to false) to eagerWrap (which defaults to true).
2012-02-20 22:14:59 -07:00
Nathan Sobo
a05c0e077f Add eagerWrap option to LineMap.screenPositionForBufferPosition
If eagerWrap is true, the default, then a position at the end of a wrapped line will move to the next screen line. If it's false, it will hang on the end of the screen line. This support the line wrapper, which needs to convert ranges to not wrap (so selections can go to the end of wrapped lines) but otherwise needs to wrap the cursor to the beginning of a wrapped line.
2012-02-20 22:11:15 -07:00
Nathan Sobo
6bda6d4de5 Use LineMap for LineWrapper.screenLineCount
Also set screenDelta to [1, 0] for wrapped lines.
2012-02-17 18:27:35 -07:00
Nathan Sobo
3df3f47483 WIP: LineWrapper maintains a LineMap in parallel w/ SpanIndex.
Planning to convert method at a time to use the LineMap instead of the SpanIndex.
2012-02-17 18:07:51 -07:00
Nathan Sobo
312bb34c0b Use LineMap in LineFolder. All specs pass. 2012-02-17 16:52:12 -07:00
Nathan Sobo
d1d48f8fca WIP: Starting on LineMap 2012-02-16 20:52:12 -07:00
Nathan Sobo
6cc46d959b Start on rough version of LineFolder.screenPositionForBufferPosition
Still pretty ugly and not working quite right.
2012-02-15 19:06:53 -07:00
Nathan Sobo
cdd2b7faf5 Line folder handles folds starting and ending on same line. 2012-02-15 17:11:28 -07:00
Nathan Sobo
6de6852e92 SpanIndex.spanForIndex returns span of elements up to and *including* index. 2012-02-15 17:11:06 -07:00
Corey Johnson & Nathan Sobo
3782119a0a LineFolder renders a placeholder in place of a folded region. 2012-02-15 15:20:27 -07:00
Corey Johnson & Nathan Sobo
0b5f6c3af0 SpanIndex accepts a single index when inserting multiple values. 2012-02-15 15:19:39 -07:00
Corey Johnson & Nathan Sobo
b5d5b52dc6 💄 2012-02-15 15:19:13 -07:00
Corey Johnson & Nathan Sobo
f30f028868 Add replace and updateSpans to SpanIndex. 2012-02-15 15:18:52 -07:00
Corey Johnson & Nathan Sobo
9324c5a7ee Add ScreenLine.pushToken and .concat
These are used by the LineFolder to splice in a placeholder between folds.
2012-02-15 15:16:50 -07:00
Corey Johnson
a41676e84e Use event.originalEvent.keyIdentifier instead of event.which.
Events match patterns if event.keyStroke == key pattern.
2012-02-15 10:04:02 -08:00
Corey Johnson & Nathan Sobo
f9b7c02b81 Add methods to SpanIndex to support LineWrapper 2012-02-14 16:42:48 -07:00
Corey Johnson & Nathan Sobo
0ee1eeef75 Add SpanIndex, which will support line wrapping and line folding
SpanIndex keeps a sorted list of entries, each associated with a span. It can retrieve elements by aggregated span as well as their position in the list.
2012-02-14 15:49:16 -07:00
Nathan Sobo
b0c67741e0 💄 2012-02-13 15:35:06 -07:00
Nathan Sobo
2d3822dc90 LineWrapper exposes screenLinesForRow instead of tokensForScreenRow
I *think* this is a good idea. It makes us more consistent in always passing around ScreenLine instances. We'll be able to put nice metadata on these objects, like the buffer line they correspond to etc.
2012-02-13 15:29:16 -07:00
Nathan Sobo
a293a41ac7 Highlighter stores ScreenLine objects instead of token arrays. 2012-02-13 15:24:05 -07:00
Nathan Sobo
c89a8fbb37 Add ScreenLine & refactor LineWrapper to use it.
ScreenLine encapsulates the idea of a single line on screen. ScreenLines are first generated by the highlighter. A ScreenLine contains tokens and text, and currently has a method called splitAt which the LineWrapper, and soon the LineFolder, use to fragment the line.
2012-02-13 15:05:33 -07:00
Nathan Sobo
68d08acc1b Soft-wrap can be enabled before editor is attached to DOM. 2012-02-10 15:18:02 -07:00
Nathan Sobo
432f0e11a8 Merge branch 'softwrap' 2012-02-10 14:33:40 -07:00
Nathan Sobo
12a404fe5d Re-wrap lines when window size changes. 2012-02-10 13:14:17 -07:00
Nathan Sobo
90e019a4ac Merge branch 'softwrap' of github.com:github/atom into softwrap
Conflicts:
	spec/atom/editor-spec.coffee
2012-02-10 12:53:45 -07:00
Nathan Sobo
220deb88e9 Meta-alt-w toggles soft-wrap. Fix insert line element bug. 2012-02-10 12:52:12 -07:00
Corey Johnson
f5da211ad3 mouse clicks should correctly position the cursor on wrapped lines 2012-02-10 11:35:42 -08:00
Nathan Sobo
479b64b654 LineWrapper.setMaxLength emits a change event for all screen lines. 2012-02-10 12:21:42 -07:00
Corey Johnson
418dae11aa 💩 2012-02-10 10:51:53 -08:00
Corey Johnson & Nathan Sobo
9a922b1c2d Implemented MoveToNextParagraph motion 2012-02-10 10:41:02 -08:00
Nathan Sobo
b70acf2006 Un-F 2012-02-10 11:39:31 -07:00
Nathan Sobo
80d42ddb46 Selections render correctly with wrapped lines. 2012-02-10 11:32:46 -07:00
Nathan Sobo
ea4f122e19 Editor handles changes to wrapped lines. 2012-02-10 11:15:57 -07:00
Nathan Sobo
9fef75cb5f All tests passing. Editor gets lines from LineWrapper.
Line wrapping still not fully functional. Need to fix many aspects of the LineWrapper integration.
2012-02-10 10:50:01 -07:00
Nathan Sobo
5809a59e7a Add LineWrapper.screenLineCount and fix .splitTokens
splitTokens now returns a single empty screenLine when called with an empty buffer line, instead of no screen lines at all.
2012-02-10 10:38:35 -07:00
Nathan Sobo
672dc5a3c0 LineWrapper handles changes that remove lines. 2012-02-09 22:27:14 -07:00
Nathan Sobo
06e71bb42f 💄 Clean up LineWrapper spec 2012-02-09 18:30:57 -07:00
Corey Johnson & Nathan Sobo
0ec6b452ad LineWrapper handles changes that insert lines 2012-02-09 18:21:17 -07:00
Nathan Sobo
8338d37dde WIP: LineWrapper change events cover all screen lines.
Because the editor only repaints entire lines at a time, the loss of
precision shouldn't matter.
2012-02-09 17:45:18 -07:00
Corey Johnson & Nathan Sobo
8ce3c6ca9d Emit correct change events when replaced spans multiple screen lines 2012-02-09 15:17:59 -08:00
Corey Johnson & Nathan Sobo
785b800d5b Add allowEOL param to screenPositionFromBufferPosition 2012-02-09 14:19:54 -08:00
Nathan Sobo
4ea62a83a2 WIP: failing spec for change event causing line to wrap 2012-02-09 13:37:57 -07:00
Nathan Sobo
6c0a0e4bd2 Simplify splitTokens and make it work better too
We consider the line as a whole string and decide where we want to
split it before working with tokens. findSplitColumn just looks at the
character at the boundary... if it's a whitespace it looks forward for
a word. If it's not whitespace it looks backward for whitespace. This
ensures we always break on whitespace boundaries if possible.
2012-02-09 12:26:06 -07:00
Nathan Sobo
8232c7b153 Use splitTokens to build screen lines in LineWrapper. 2012-02-09 10:57:25 -07:00
Nathan Sobo
93bce8ccdf Add metadata to screenLines returned by splitTokens 2012-02-09 10:18:37 -07:00
Nathan Sobo
2dcdf82fc9 LineWrapper.splitTokens handles the cases I can think of
Basically... splitTokens will never put whitespace at the beginning of
wrapped display line. It also splits tokens without regard for
whitespace if the token has no whitespace but is too wide to display on
a single line.
2012-02-08 21:37:35 -07:00
Nathan Sobo
34922a18fe When splitting lines, keep leading whitespace on current line.
If we detect leading whitespace, we replace the next token with the
result of splitting the next token into two tokens, one containing any
leading whitespace and one with the rest. Then the leading whitespace
is added to the current line. When the second half of the split is
processed, it no longer has leading whitespace and is split to the next
line.
2012-02-08 19:15:00 -07:00
Corey Johnson
21e05f7218 LineWrapper.splitTokens splits line when tokens exceed LineWrapper.maxLength 2012-02-08 15:42:16 -08:00
Corey Johnson
3742700810 handle changes that cause line to wrap once 2012-02-08 14:05:52 -08:00
Nathan Sobo
1f6ab6f2b6 💄 2012-02-08 14:33:23 -07:00
Nathan Sobo
4b350598a5 WIP: Testing changes that cause lines to wrap 2012-02-08 14:25:47 -07:00
Nathan Sobo
5ab91c3f47 WIP: Handle changes that aren't affected by wrapping 2012-02-08 14:04:55 -07:00
Corey Johnson & Nathan Sobo
0daecb6047 More 💄 2012-02-08 13:21:00 -07:00
Corey Johnson & Nathan Sobo
82fb49fd1e 💄 Internal LineWrapper makeover
Feeling good on the inside.
2012-02-08 13:15:27 -07:00
Corey Johnson & Nathan Sobo
1566b12ecc Add LineWrapper.tokensForScreenRow 2012-02-08 12:55:51 -07:00
Corey Johnson & Nathan Sobo
1ec29e29d7 super 💄 2012-02-08 12:45:02 -07:00
Nathan Sobo
e24b5fbc24 Add LineWrapper.displayPositionFromBufferPosition 2012-02-08 12:30:46 -07:00
Nathan Sobo
bb72c839da Use LineWrapper to calculate pixelPositionFromPoint 2012-02-08 09:49:51 -07:00
Corey Johnson
6d39306fb2 When trying to compose operators that don't compose, the op stack is cleared 2012-02-07 18:01:35 -08:00
Nathan Sobo
a16bc99249 WIP: Start on LineWrapper.displayPositionFromBufferPosition
It takes a row, column from the buffer and converts it to coordinates
that account for line wrapping.
2012-02-07 18:40:59 -07:00
Nathan Sobo
b21595f037 WIP: Add a LineWrapper object
Only passing specs are focused. Everything is still broken. Editor uses
the line wrapper to render lines, but the line wrapper isn't updating
on buffer change events yet. Still moving vertically and clipping
positions based on unwrapped lines as well.
2012-02-07 18:07:12 -07:00
Corey Johnson
0efb129e32 Removed unused compiled coffeescript files 2012-02-07 15:41:04 -08:00
Corey Johnson
3b14147fe6 Add more db specs 2012-02-07 15:41:04 -08:00
Nathan Sobo
62470f61ab WIP: Wrap lines at token boundaries when soft wrap is on
This is still really rough... cursor positioning isn't working properly
yet. Nor does anything adjust when the window is resized.
2012-02-07 14:43:33 -07:00
Nathan Sobo
525116a80b Merge branch 'master' of github.com:github/atom 2012-02-07 12:10:34 -07:00
Nathan Sobo
dd04475756 Shift-meta-z to redo. 2012-02-07 12:10:14 -07:00
Corey Johnson
6835659916 Implement db 2012-02-07 10:52:09 -08:00
Nathan Sobo
b3d1291643 Add UndoManager. Pressing meta-z undoes last change. 2012-02-07 11:22:19 -07:00
Nathan Sobo
cdd296bb40 Add 'oldText' to buffer change events.
Also make assertions about events for different cases of Buffer.change,
and add a spec for calling Buffer.change with a non-empty range and
non-empty string.
2012-02-07 10:52:41 -07:00
Nathan Sobo
fc84075d13 In buffer change event objects, rename 'string' to 'newText'
In preparation for adding an 'oldText' value.
2012-02-07 10:33:36 -07:00
Nathan Sobo
022bdfaeb0 Rename pre/postRange to old/newRange 2012-02-07 10:31:06 -07:00
Corey Johnson
945ba38cca Implement b 2012-02-06 17:55:15 -08:00
Corey Johnson
b7dfb93540 Turn off moveCursorBeforeNewline event when entering insert mode. 2012-02-06 15:41:13 -08:00
Corey Johnson
b8f6dd1c2a spelling 2012-02-06 15:41:13 -08:00
Nathan Sobo
bb640dd342 Use $$ -> to render ad-hoc document fragments
Also eliminate stdlib/template directory which held code related to
SpacePen's precursor framework.
2012-02-06 16:19:43 -07:00
Corey Johnson
bac59b7abf Use cursor:position-changed to make sure cursor never gets to end of line in command mode.
The exception being an empty line.
2012-02-06 14:56:05 -08:00
Corey Johnson
f3eb6fc66c Add isOnEOL method to cursor 2012-02-06 12:01:52 -08:00
Nathan Sobo
4a8d03b966 Un-F the specs 2012-02-06 12:38:06 -07:00
Nathan Sobo
6a963e8845 Merge remote-tracking branch 'origin/master'
Conflicts:
	src/atom/cursor.coffee
	src/atom/editor.coffee
	src/atom/selection.coffee
2012-02-06 12:37:26 -07:00
Nathan Sobo
64a97b9427 Use SpacePen for all views
SpacePen is better because its objects inherit directly from the jQuery
prototype, meaning you can create them with `new`.
2012-02-06 12:12:45 -07:00
Nathan Sobo
f1a5368eb3 Remove Coffeekup and Handlebars 2012-02-06 12:11:45 -07:00
Corey Johnson
ea48ae626c l can't move the cursor past the last character. 2012-02-06 10:38:56 -08:00
Corey Johnson
425e2b4f59 💄 2012-02-06 10:37:37 -08:00
Corey Johnson
3ef3933d06 💩 2012-02-06 10:20:37 -08:00
Corey Johnson
dd9723e256 x will not allow the newline to be deleted 2012-02-06 10:19:17 -08:00
Corey Johnson
7cdcf2b358 When dd is called on the last line, it removes the \n from the previous line
Treat dd as a special, completing version of d.
2012-02-03 17:31:39 -08:00
Corey Johnson
88cf574bc6 Positioning the cursor beyond the bottom of the buffer will clip it to the last column of the last row 2012-02-03 16:07:54 -08:00
Corey Johnson
b45c00d90e If an object implements inspect jasmine will use it in test output 2012-02-03 16:05:57 -08:00
Corey Johnson
53c14722aa Selection.selectLine takes a row as an argument. 2012-02-03 15:03:13 -08:00
Corey Johnson
97aa3b6e82 Triple click works with selections made with moused dragging. 2012-02-03 13:33:22 -08:00
Corey Johnson
bbf892de96 Triple click selects line under cursor 2012-02-03 13:11:42 -08:00
Nathan Sobo
94f7296999 Highlighter resumes from last unchanged line's state
This allows for new a new line inserted inside a comment to be
highlighted correctly, for example.
2012-02-03 11:19:50 -07:00
Corey Johnson
2b6b4b1717 Make sure all specs are run 2012-02-03 10:03:02 -08:00
Corey Johnson
7c778d197e Text is selected when mouse is moved after double click 2012-02-03 09:55:10 -08:00
Nathan Sobo
37dc813a56 Backfill spec coverage for handling highlighter change events. 2012-02-03 10:39:13 -07:00
Corey Johnson & Nathan Sobo
84c104b0b9 Highlighter emits change events.
Changes to the buffer may cause lines beyond the scope of the textual
change to be re-highlighted. If so so, this is reflected in the
pre/post range of Highlighter's change events.
2012-02-02 17:45:57 -08:00
Corey Johnson & Nathan Sobo
82366b1226 Jasmine will call toString() if available to print an object. 2012-02-02 17:00:10 -08:00
Corey Johnson & Nathan Sobo
bb2af7333a Point -> pixel conversion should be relative to editor.lines 2012-02-02 17:25:23 -07:00
Corey Johnson & Nathan Sobo
ec6ed285b1 Merge branch 'editor' 2012-02-02 17:06:18 -07:00
Corey Johnson & Nathan Sobo
0120df540a Lines remain syntax-highlighted when they are updated. 2012-02-02 17:04:37 -07:00
Corey Johnson & Nathan Sobo
a62bd4b304 Double clicking selects a word. 2012-02-02 14:57:05 -08:00
Corey Johnson
c6c762ba23 Double mouse click selects word
The mousedown event on editor is causing this to fail right now.
2012-02-02 14:13:28 -08:00
Nathan Sobo
2b748dd8a7 Merge branch 'editor' into highlight
Conflicts:
	src/atom/buffer.coffee
2012-02-02 12:31:35 -07:00
Nathan Sobo
5e95fc482d Buffer.setText emits the proper change events 2012-02-02 12:30:25 -07:00
Corey Johnson
d8975e7a94 SpecHelper has a method for getting pixel points from a row/column 2012-02-02 11:14:50 -08:00
Corey Johnson
d2a6eca8f3 meta-x removes text from buffer and places it on the clipboard 2012-02-02 09:35:18 -08:00
Nathan Sobo
104e75e0d7 WIP: Handle changes that affect highlighting of subsequent lines.
Entering a /* at the top of the document will cause lines below to be
interpreted as comments. Still needs cleanup. There are some unrelated
failures associated with Buffer.setText not firing events correctly,
which is causing the highlighter to get into an invalid state.
2012-02-01 21:52:07 -07:00
Nathan Sobo
2f6c16c941 Merge branch 'editor' into highlight
Conflicts:
	src/atom/editor.coffee
2012-02-01 20:24:42 -07:00
Corey Johnson
3c37c0ebeb Test the correct line 2012-02-01 18:13:22 -08:00
Corey Johnson
8882c060f1 e
spelling is hard, let's go shopping
2012-02-01 18:02:12 -08:00
Corey Johnson
86d23c775d meta-v inserts text at cursor position 2012-02-01 18:00:47 -08:00
Corey Johnson
27ee0792a4 💄 2012-02-01 17:59:59 -08:00
Corey Johnson
16cfcd9396 Move the copy event test to editor, make selection test copy implementation 2012-02-01 17:46:22 -08:00
Corey Johnson
53d68d93ca Rename old methods and make the specs pass! 2012-02-01 16:50:10 -08:00
Nathan Sobo
23bcc68ac5 Highlighter updates when the buffer is changed 2012-02-01 17:38:16 -07:00
Corey Johnson
a3332571a9 Remove backspace and change implementation of delete.
A selection will only delete what is selected. Otherwise it will leave
the buffer unmodified.
2012-02-01 15:57:37 -08:00
Corey Johnson
cc3b5732e7 Point.toEqual will return true if it matches an array
`new Point(1,2)` is equivalent to `[1,2]`.
2012-02-01 15:54:28 -08:00
Nathan Sobo
77f227c7e9 WIP: Using ace tokenizer to break lines into tokens.
Breaks some specs because the highlighter doesn't update when the
buffer changes. Not loading the ace theme CSS yet, so you can't see any
colors yet either.
2012-01-31 21:59:58 -07:00
Nathan Sobo
677df675fb 💄 reorganize editor spec a bit 2012-01-31 20:57:43 -07:00
Nathan Sobo
a72dc17b87 Move hidden input to follow cursor to stop spurious scrolling
Commit 8e77c05c fixed scrolling *up* when clicking the buffer while
scrolled down. But it was still scrolling to the far left when typing /
clicking on a really long line. This commit solves both issues by
always positioning the hidden input to the same location as the cursor,
so it doesn't tell webkit to scroll away from the current focus when it
is focused or the user types.
2012-01-31 11:21:13 -07:00
Corey Johnson
d42cdaf157 Selection spec uses copy event to test copying.
Also added a some multiline tests.
2012-01-31 10:10:18 -08:00
Corey Johnson
84d9824b19 buffer.getTextInRange handles multiple lines. 2012-01-31 09:56:16 -08:00
Nathan Sobo
4575483d80 Selection expands flexibly when window is resized
If a region of the selection needs to span the full line, I assign
right: 0 instead of a width so that it always stretches across the
entire editor, even after a resize.
2012-01-31 10:55:17 -07:00
Nathan Sobo
666ef76c83 Never use more than 3 divs to render a selection
This should hopefully improve performance for large selections.
2012-01-31 10:44:10 -07:00
Nathan Sobo
21a5f25d93 Merge branch 'master' of github.com:github/atom into editor
Conflicts:
	src/atom/editor.coffee
2012-01-30 19:47:51 -07:00
Corey Johnson
7dba7dc3de meta-c copies text in selection 2012-01-30 17:46:03 -08:00
Nathan Sobo
a77dd28e47 Fix bug: can now delete multiple lines
Before, we were traversing through lines to remove in ascending order
and then calling remove(n) for each. But when we removed line 10, line
11 became the *new* line 10. So when we removed line 11 we ended up
skipping the old line 11. I solved this by traversing in reverse when
we need to delete lines.
2012-01-28 22:05:35 -07:00
Nathan Sobo
1dd718f896 Can select text with the mouse 2012-01-28 17:00:59 -08:00
Nathan Sobo
6dad8c448a 💄 2012-01-28 15:58:59 -08:00
Nathan Sobo
3e5cef9672 Cursor can be re-positioned with the mouse 2012-01-28 15:54:01 -08:00
Nathan Sobo
cb3d97692e Auto-scroll horizontally after exceeding editor.hScrollMargin
Rename previous editor.scrollMargin to vScrollMargin to indicate it's
for vertical scrolling.
2012-01-27 18:42:20 -08:00
Corey Johnson & Nathan Sobo
dea99216d4 Cursor blinks 2012-01-27 17:33:02 -08:00
Corey Johnson & Nathan Sobo
900f745b65 Delete removes character in front of cursor. 2012-01-27 14:16:17 -08:00
Corey Johnson & Nathan Sobo
3b64b78336 Backspace with a selection only deletes the selected text 2012-01-27 13:48:20 -08:00
Corey Johnson & Nathan Sobo
29e7a6d774 Moving the cursor without holding shift clears selection 2012-01-27 12:42:33 -08:00
Nathan Sobo
6bf82a27c9 Selections render themselves on screen (1 div per line)
Still a lot of details to cover, but basic selection creation is
working.
2012-01-26 18:54:18 -08:00
Nathan Sobo
5aeef9e58f WIP: Starting on creating a selection with shift-arrows
Introduce Point and Range objects. Selection.selectRight places an
anchor object before moving right if no anchor yet exists. Still no
visual treatment.
2012-01-26 15:45:49 -08:00
Nathan Sobo
4c7441326c Move text manipulation methods to selection
Ultimately, the current selection will control the location / extent of
any manipulation, so it makes sense to put these methods there.
2012-01-26 14:16:17 -08:00
Nathan Sobo
2825c945e5 💄 2012-01-26 13:46:12 -08:00
Nathan Sobo
c70206fc9c Introduce Selection object that contains the cursor
All cursor operations will be proxied through the selection, so that
the selection can be cleared if necessary.
2012-01-26 13:23:59 -08:00
Corey Johnson
83c8684f80 Uncommented a spec 2012-01-26 10:47:22 -08:00
Corey Johnson
b8776fc010 Uncommented a test 2012-01-26 10:40:04 -08:00
Corey Johnson
902c714f00 Rename col to column 2012-01-26 10:16:43 -08:00
Corey Johnson & Nathan Sobo
90faddf9f1 Refactor all buffer manipulation to use Buffer.change
Change takes a range and a string and replaces the range with the
string, then emits a change event with the range of text that was
changed, the range of text occupied by the new string, and the string
itself. This can be used to implement backspace, insert, as well as
various cut and paste manipulations.
2012-01-25 17:59:15 -08:00
Corey Johnson & Nathan Sobo
b5317b83a5 Implement backspace on Editor 2012-01-25 16:07:04 -08:00
Corey Johnson & Nathan Sobo
3a423e2a16 Implement backspace on Buffer 2012-01-25 14:33:47 -08:00
Corey Johnson & Nathan Sobo
045c3c39bf Render empty lines correctly when inserting newlines 2012-01-25 13:36:32 -08:00
Corey Johnson & Nathan Sobo
c536933c0b Newline chars can be inserted into the buffer. 2012-01-25 12:58:36 -08:00
Corey Johnson & Nathan Sobo
c11a618a9f X and Y were inverted 2012-01-25 12:20:58 -08:00
Corey Johnson & Nathan Sobo
f6ec9daf39 Rename col/row to x/y 2012-01-25 09:35:33 -08:00
Corey Johnson & Nathan Sobo
3534f463a6 Unfocus test 2012-01-25 08:39:36 -08:00
Nathan Sobo
92f7b51cd4 💄 2012-01-24 18:14:44 -08:00
Corey Johnson & Nathan Sobo
90656aaffb 💩 2012-01-24 17:30:40 -08:00
Corey Johnson & Nathan Sobo
0fe70f0920 Focus Editor on DOM attachement 2012-01-24 17:26:38 -08:00
Corey Johnson & Nathan Sobo
b4d91f2bc7 Typing inserts a character at the cursor position 2012-01-24 17:19:01 -08:00
Corey Johnson & Nathan Sobo
4ca3bbdbca Fix fileFinder test 2012-01-24 15:29:33 -08:00
Corey Johnson & Nathan Sobo
6af33c3337 Editor directs focus to a hidden input element.
Now we'll be able to listen for textInput events, which give us better
information about what character is being entered in the presence of
multi-keystroke compositions like alt-u,u for ü
2012-01-24 15:27:05 -08:00
Nathan Sobo
18f09aad9e 💄 2012-01-24 14:21:43 -08:00
Corey Johnson & Nathan Sobo
59086a1131 Map h to MoveRight 2012-01-24 10:06:25 -08:00
Corey Johnson & Nathan Sobo
10bf803fe0 Make tests green
Some need to be disabled because they rely on ace. Others fixed. Others
deleted.
2012-01-23 17:28:16 -08:00
Corey Johnson & Nathan Sobo
5ddf4e1a0b Ensure combined scroll margins are smaller than editor height.
This prevents jerky scrolling when the window is very short.
2012-01-23 17:15:11 -08:00
Corey Johnson & Nathan Sobo
1a52890d19 Cursor scrolls editor as it moves 2012-01-23 16:45:00 -08:00
Corey Johnson & Nathan Sobo
81fc69120f Retain goal column when moving up on first line.
Also: Respect a goal column of 0 when moving down on last line and then
back up. (Unlike TextMate)
2012-01-23 14:56:30 -08:00
Corey Johnson & Nathan Sobo
101d20692d Don't nuke goalColumn when moving down on last line 2012-01-23 14:37:03 -08:00
Corey Johnson & Nathan Sobo
713615d515 Retain goal column when moving cursor up. 2012-01-23 14:18:34 -08:00
Corey Johnson & Nathan Sobo
5f058e690c Goal column is cleared when not moving vertically
This allows left/right movements to choose a new goal.
2012-01-23 13:58:26 -08:00
Corey Johnson & Nathan Sobo
1dcebbae45 WIP: Use a goal column when moving down
Still needs to be cleared when moving horizontally.
2012-01-23 13:40:37 -08:00
Corey Johnson & Nathan Sobo
3d45a5201d Move movement logic to cursor subview. 2012-01-23 12:50:07 -08:00
Corey Johnson & Nathan Sobo
a647fa4220 Implement d3d
Delete line can take a count before the second d. When the second d is
typed it pushed a SelectLines operation. When a numeric prefix is
composed with SelectLines, it assigns its count on select lines, which
uses it to determine how many lines to select. This bypasses the normal
"repeat command" semantics of numeric prefix.
2012-01-23 11:37:00 -08:00
Corey Johnson & Nathan Sobo
9b3fc10130 Make dh keybinding work. 2012-01-23 10:06:56 -08:00
Corey Johnson & Nathan Sobo
261db5189c Add tests 2012-01-23 09:27:18 -08:00
Danny Greg & Nathan Sobo
98947877e5 Properly html escape rendered text in editor and render empty lines. 2012-01-19 19:08:40 -08:00
Danny Greg & Nathan Sobo
62d8aa72e2 Merge branch 'master' into editor 2012-01-19 18:54:34 -08:00
Danny Greg & Nathan Sobo
0e9bfe4d1a Builder has class methods for every tag
Shorthand: If you know the top-level tag you want to render, you can
call `Builder.div class: "foo", -> ...` instead of calling render.
2012-01-19 18:54:09 -08:00
Danny Greg & Nathan Sobo
aec88e3404 Add Builder.render and instance methods for tags
Builder.render takes a function that calls tag methods and returns a
view fragment.
2012-01-19 18:30:32 -08:00
Danny Greg & Nathan Sobo
7d0c5ff2f0 Merge branch 'master' into editor 2012-01-19 16:47:12 -08:00
Danny Greg & Nathan Sobo
5e41f82985 Add a raw call to builder. 2012-01-19 16:46:32 -08:00
Danny Greg & Nathan Sobo
597e4c54b2 Merge branch 'master' into editor 2012-01-19 16:37:58 -08:00
Danny Greg & Nathan Sobo
660beb9f65 Text inside of tags is HTML escaped. 2012-01-19 16:36:32 -08:00
Danny Greg & Nathan Sobo
030e241c75 Don't spill out of document when moving right and left 2012-01-19 15:40:26 -08:00
Danny Greg & Nathan Sobo
a606fe55b3 Keep cursor inside the lines when moving. 2012-01-19 14:39:16 -08:00
Danny Greg & Nathan Sobo
cd127c009e Cursor can move around screen
Still not handling corner cases like moving off the edge of screen,
line, etc.
2012-01-17 18:13:50 -08:00
Nathan Sobo
5198a88cce Half-baked: Have a lines reasonably looking cursor working.
A bunch of tests are failing but you can load a buffer and display its
lines.
2012-01-16 22:11:38 -08:00