Commit Graph

489 Commits

Author SHA1 Message Date
Nathan Sobo
da6a708b46 Remove LineWrapper and LineFolder
They are supplanted by Renderer
2012-03-06 19:16:50 -07:00
Nathan Sobo
55a5f1b30e Install Renderer in Editor instead of LineWrapper & LineFolder 2012-03-06 19:15:13 -07:00
Nathan Sobo
a5b4c0af2f Add Renderer.clipScreenPosition 2012-03-06 18:27:24 -07:00
Nathan Sobo
fbd4b7e990 Renderer can place a fold placeholder directly before a soft-wrap 2012-03-06 18:27:06 -07:00
Corey Johnson
0703578820 autoIndent is enabled by default. 2012-03-06 16:34:59 -08:00
Corey Johnson
0737529f07 Auto-outdent maintains proper cursor positon. 2012-03-06 16:34:43 -08:00
Corey Johnson
a1a5d9ac75 Add additional auto-indent test 2012-03-06 15:34:39 -08:00
Nathan Sobo
cb23fdbf92 Add spec for position translation with folds + line wrapping 2012-03-06 15:51:04 -07:00
Nathan Sobo
7e4aae7b4f Add position translation methods to Renderer 2012-03-06 15:33:29 -07:00
Nathan Sobo
8b7638998c Add spec for a fold causing a line to unwrap 2012-03-06 15:13:51 -07:00
Corey Johnson
668022fb3b Outdent works with Ace's Mode classes 2012-03-06 11:14:50 -08:00
Nathan Sobo
03d5509cca Renderer handles buffer change events for wrapping & folding 2012-03-06 12:11:21 -07:00
Nathan Sobo
c61510ce99 Ensure line wrapping interacts cleanly with folding 2012-03-05 19:15:03 -07:00
Nathan Sobo
ed13a27821 Add specs for more fold corner cases. 2012-03-05 17:46:55 -07:00
Nathan Sobo
59bcb27079 WIP: Start handling nested folds. 2012-03-05 17:29:12 -07:00
Nathan Sobo
d02817af21 Add spec for single-line folds 2012-03-05 17:09:03 -07:00
Nathan Sobo
764c827134 WIP: Add fold handling to renderer… still needs refinement. 2012-03-05 17:03:06 -07:00
Corey Johnson & Nathan Sobo
53fc625534 Inserting a newline indents the cursor (based on information from previous line) 2012-03-05 15:51:56 -08:00
Nathan Sobo
955bb383dd WIP: Start on Renderer, which combines LineWrapper and LineFolder 2012-03-05 16:07:22 -07:00
Nathan Sobo
fc7a13ce05 Rename Buffer.getLine to lineForRow 2012-03-05 16:06:27 -07:00
Nathan Sobo
95db96b238 Selection rendering accounts for the presence of gutter 2012-03-05 11:17:46 -07:00
Corey Johnson & Nathan Sobo
5a4f4955b2 Set LineWrapper.maxLength based on lines width, not editor with.
Because there's a gutter now that doesn't count.
2012-03-02 17:09:45 -08:00
Corey Johnson & Nathan Sobo
e7f7e121f7 Gutter updates line numbers when buffer lines are inserted/removed 2012-03-02 16:24:03 -08:00
Corey Johnson & Nathan Sobo
696948cc9b Gutter is renders line numbers when buffer is assigned. 2012-03-02 16:13:29 -08:00
Corey Johnson & Nathan Sobo
b3c4fd5cce Add a nonfunctional gutter to editor layout. 2012-03-02 15:42:04 -08:00
Nathan Sobo
98defa865c Cursor screen position is updated when lines are rewrapped. 2012-03-01 18:00:41 -07:00
Nathan Sobo
697ad6570f Don't make assumptions about the character width in specs 2012-03-01 17:31:53 -07:00
Corey Johnson & Nathan Sobo
ebca007ca4 Merge branch 'chrome' 2012-03-01 16:24:01 -08:00
Corey Johnson & Nathan Sobo
f894f11e5f remove references to native 2012-03-01 16:22:05 -08:00
Corey Johnson
e874512284 Move atom.native to $native 2012-03-01 15:44:36 -08:00
Nathan Sobo
c218a10b6b Don't split a fold placeholder when line wrapping. 2012-03-01 16:38:38 -07:00
Nathan Sobo
c2b16ffbf9 Don't raise an exception when folding an empty range 2012-03-01 13:04:32 -07:00
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