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
Nathan Sobo
4274ff4a81
Merge branch 'master' into editor
2012-01-16 21:28:31 -08:00
Nathan Sobo
ba2ed50e87
Also trigger 'attach' on subviews when parent view is attached.
2012-01-16 21:28:18 -08:00
Nathan Sobo
a051e452ea
Merge branch 'master' into editor
2012-01-16 21:17:51 -08:00
Nathan Sobo
5dbdd92e6c
When views are attached to dom, trigger 'attach' events
...
Added this mechanism by augmenting jQuery dom mutation methods. It will
only trigger an event if the element has a truthy value for the
'triggerAttach' data entry. This will allow us to execute actions that
require the view to be physically on the dom at the appropriate time.
2012-01-16 21:15:57 -08:00
Nathan Sobo
bde3a9f5f5
Use requireStylesheet for editor stylesheet.
2012-01-16 20:17:07 -08:00
Nathan Sobo
1a16a755b4
Merge branch 'master' into editor
...
Conflicts:
spec/spec-helper.coffee
2012-01-16 20:04:50 -08:00
Nathan Sobo
f4aa8daa52
Add window.requireStylesheet
...
This allows you to synchronously load a stylesheet into the document's
head whenever it is needed.
2012-01-16 20:03:48 -08:00
Nathan Sobo
7d7b119927
WIP
2012-01-16 19:23:27 -08:00
Nathan Sobo
07a51fb310
Displaying lines and a basic cursor
2012-01-16 17:17:36 -08:00
Nathan Sobo
83cfe70962
Rename Editor.get/setCursor to get/setPosition
...
This makes it more consistent with selectoToPosition. Also... you
weren't getting the cursor. The cursor is a thing on the screen. At the
very least getCursor should return an object you can move around, not
just a row/column struct. Position seems like a better name.
2012-01-14 00:36:15 -08:00
Nathan Sobo
d1869516fd
Implement d3w
...
NumericPrefix now has a .select() method that calls select multiple
times on its operand. Editor.selectToPosition modified to extend
existing selections, and only create a new one if needed. This allows
repetition of a motion's select method to expand the selection.
2012-01-14 00:31:11 -08:00
Nathan Sobo
91cc9cc9a4
Implement dw (delete to beginning of next word)
...
The w motion has a .select() method. When d composes with a motion it
calls select() on it and then deletes the selected text.
2012-01-14 00:10:34 -08:00
Nathan Sobo
d94d387101
Cover other next word cases.
...
Now it moves to words on the next line and also to the next empty line.
2012-01-13 19:47:09 -08:00
Nathan Sobo
1809ba4ef1
💄
2012-01-13 19:18:13 -08:00
Nathan Sobo
7546ddc8cc
'w' moves to next word (not fully functional for multi-line)
2012-01-13 19:18:13 -08:00
Corey Johnson & Nathan Sobo
b2648723de
dd deletes an entire line
2012-01-13 17:38:33 -08:00
Nathan Sobo
712475569d
Can enter multi-digit numeric prefixes in command mode.
2012-01-13 14:49:25 -08:00
Nathan Sobo
b4886bb6d6
In vim command-mode, only eat insertion keys, not other modifiers
2012-01-13 14:23:58 -08:00
Nathan Sobo
13d7f93dd9
GlobalKeyMap adds a 'keystroke' string to events
...
The keystroke is a string representation of the event... like
"alt-ctrl-x" or "q"
2012-01-13 14:03:22 -08:00
Corey Johnson & Nathan Sobo
fd48c67bfa
Add App.bindKey
2012-01-13 12:06:52 -08:00
Corey Johnson & Nathan Sobo
ca2b7c9fd1
Add MoveUp command to VimMode
2012-01-13 10:57:08 -08:00
Corey Johnson & Nathan Sobo
d3d832a740
Add h (move left) monvment to vimMode.
2012-01-13 10:44:51 -08:00
Nathan Sobo
86d7a91dcd
💄
2012-01-12 17:56:49 -08:00
Nathan Sobo
a2cf77892d
Don't insert characters in vim command mode
...
GlobalKeymap.bindKey can take a selector and a custom function that
maps key events to commands. If it returns false, no command is
triggered but event propagation is halted.
2012-01-12 17:51:23 -08:00
Nathan Sobo
ee068a4b84
GlobalKeymap favor most recently declared bindings in case of tie
...
Just like in CSS, when multiple equally-specific selectors match an
element, we favor the most recently declared one, so keybindings
cascade.
2012-01-12 16:35:10 -08:00
Nathan Sobo
2c2423f985
Single-digit numeric prefixes can repeat commands in vim-mode
...
Vim mode has an operator stack. Every time an operator is pushed to the
stack, we ask if it is complete. If it's complete, we compose it with
the operator below it, then pop that operator if its complete. When no
operators remain on the stack, we call execute the final composed
operator. So far we only have DeleteChar (x) and NumericPrefix
operators.
2012-01-11 22:02:47 -08:00
Nathan Sobo
671d862441
💄
2012-01-11 20:21:38 -08:00
Corey Johnson & Nathan Sobo
8471270add
Vim mode supports command mode and insert mode with i, esc, and x bindings
2012-01-11 15:00:40 -08:00
Corey Johnson & Nathan Sobo
17ad7a26e7
Ensure focus returns to the editor when file finder closes.
...
We just capture focusout events on root view… if anything other than the editors text area lost focus, we focus the editor again. This will likely need refinement when we add more widgets to the system, but its enough to make the fuzzy finder behave appropriately.
2012-01-11 13:16:11 -08:00
Corey Johnson & Nathan Sobo
83a68dbbb0
GlobalKeymap.handleKeyEvent does not stop event propagation if no binding matches.
2012-01-11 13:16:11 -08:00
Corey Johnson & Nathan Sobo
278ac6a9f2
Remove bindKey from views. Make FileFinder use atom.bindKeys
2012-01-11 13:16:11 -08:00
Corey Johnson & Nathan Sobo
1aa99c379f
Move GlobalKeymap instance to App. Clear bindings between examples.
2012-01-11 13:16:11 -08:00
Corey Johnson & Nathan Sobo
e58f699681
Remove KeyBinder and CommandMap.
2012-01-11 13:16:11 -08:00
Nathan Sobo
2a80a72d64
Bind keydown on root view to catch events that aren't handled by ace
...
Also fixed a bug where the GlobalKeymap wasn't returning true when it
matched a binding, which caused key events to be processed twice when
they bubbled out of the editor and hit the root view.
2012-01-11 13:16:11 -08:00
Nathan Sobo
7f4120ce36
Toggle file-finder with a new CSS-style keybinding
...
Still doesn't hide when the text field is focused because we need to
handle key events that didn't emerge from Ace. That's next.
2012-01-11 13:16:11 -08:00
Nathan Sobo
51736e7695
Call window.close when window receives the 'close' event.
...
The RootView binds meta-w to the 'close' event.
2012-01-11 13:16:11 -08:00
Nathan Sobo
783e9446e9
Fix bug: Don't call handleKeyEvent with undefined event
...
Ace triggers key handlers for both keydown (onCommandKey) and input
(onTextInput) events. Input events don't pass the event, which was
blowing up the keymap.
2012-01-11 13:16:11 -08:00
Corey Johnson & Nathan Sobo
0346671d18
💄
2012-01-11 13:16:11 -08:00
Corey Johnson & Nathan Sobo
4e7b1b8979
Meta-s triggers save event with the new css-based keymap.
2012-01-11 13:16:10 -08:00
Corey Johnson & Nathan Sobo
6a25dc00c5
Add BindingSetSpec and change keybinding pattern separator.
...
Also, we allow chorded bindings to be surrounded in <…> in preparation of key sequences.
2012-01-11 13:16:10 -08:00
Corey Johnson & Nathan Sobo
11866b90fe
Rename KeyEventHandler to GlobalKeymap
2012-01-11 13:16:10 -08:00
Corey Johnson & Nathan Sobo
e9c0b9903d
Test that global key bindings defined on root view work in the editor.
2012-01-11 13:16:10 -08:00
Corey Johnson & Nathan Sobo
c3b5cd19ea
Editor can have custom key event handler.
...
editor.keyEventHandler.handleKeyEvent is passed all key events. When it returns true, the event is not handled by Ace.
2012-01-11 13:16:10 -08:00
Corey Johnson & Nathan Sobo
7f3396c125
Rename createKeyEvent to keydownEvent
2012-01-11 13:16:10 -08:00
Corey Johnson & Nathan Sobo
6ed0684eed
Fix Project.getFilePaths spec. It returns relative paths.
2012-01-11 13:16:10 -08:00
Nathan Sobo
65605409b0
Favor key bindings with the most specific CSS selectors
...
Now if a keypress event bubbles to an element with bindings for
multiple matching selectors, the most specific selector is chosen. This
allows us to override a keybinding by using a more specific selector.
For example, say we have an editor instance inside of the file-finder
widget, so that the user can use all their normal bindings when they
type the name of the file. Except when they hit <esc> we want to close
the file finder, not do whatever they normally have it bound to. Now we
can just say:
```
.file-finder .editor {
<esc>: close-file-finder
}
```
And we're assured that our binding will take precedence.
2012-01-11 13:16:10 -08:00
Nathan Sobo
f5be55e000
Only trigger bindings on the closest ancestor node of an event target.
...
Say we have a structure like:
div.parent
div.child
div.grandchild
And we have two mappings:
.parent { x: foo }
.child { x:bar }
If there's an event originating on grandchild, it will *only* trigger
bar, because that selector selects a closer ancestor.
2012-01-11 13:16:10 -08:00
Nathan Sobo
9c98e971fc
Key binding selectors match events on descendants
2012-01-11 13:16:10 -08:00
Nathan Sobo
18e614e88d
Start experiment: associate key bindings with CSS selectors
...
KeyEventHandler holds references to BindingSets. The name "binding set"
is based on the concept of a CSS ruleset. The idea is to choose a key
binding for an event based on what selectors (match / most closely
contain) the event's target DOM node.
2012-01-11 13:16:10 -08:00
Nathan Sobo
3a1d167a0f
Command map allows for ambiguous key pattern prefix matches.
...
If we have pattern 'da' and 'dad' both mapped, when 'da' is typed, the KeyMap waits for a given timeout for another character to be entered. If the time elapses, it goes ahead and executes the action for 'da'. But if a 'd' is subsequently entered, it executes 'dad'.
2012-01-11 13:16:10 -08:00
Nathan Sobo
d0ff3c7d4a
Start on CommandMap for Vim-style command mode. Matches patterns involving multiple key events.
2012-01-11 13:16:10 -08:00
Corey Johnson & Nathan Sobo
18b9782b16
Opening a previously opened url restores the same buffer and session.
2012-01-05 16:33:53 -08:00
Corey Johnson & Nathan Sobo
23c3cbf85f
Add Project.open, which returns a buffer for an absolute/relative path.
2012-01-05 12:02:25 -08:00
Corey Johnson & Nathan Sobo
5293ba7469
Add fs.join
2012-01-05 12:01:55 -08:00
Corey Johnson & Nathan Sobo
1c24ad0fdd
Eliminate Editor.open
2012-01-05 11:26:14 -08:00
Corey Johnson & Nathan Sobo
b5b1ac67fa
Remove slow specs
2012-01-05 11:20:18 -08:00
Corey Johnson & Nathan Sobo
aee7df0b9f
Add Editor.setBuffer
2012-01-05 11:13:55 -08:00
Corey Johnson
4121b2076e
Display relative paths in the file finder
2012-01-05 11:01:17 -08:00
Nathan Sobo
192166d61a
Merge branch 'master' of github.com:probablycorey/Atomicity
...
Conflicts:
src/atom/project.coffee
2012-01-04 19:05:01 -08:00
Nathan Sobo
1689824ad7
💄
2012-01-04 19:08:23 -07:00
Nathan Sobo
629c1ef239
If passed a directory path, fs.directory returns the path it is given (not the parent dir)
2012-01-04 19:07:55 -07:00
Nathan Sobo
80e4fda2f9
Filter out directory paths for FileFinder in Objective-C instead of JS.
...
Rename FileSystemHelper-contentsOfDirectoryAtPath… to -listFilesAtPath to make it clear that we're only listing files, not subdirectories. This is a fairly special purpose method but it saves us from calling back into objective-c a ton of times to filter them in JS, and makes bringing up the file finder ~2x as fast.
2012-01-04 18:22:22 -07:00
Nathan Sobo
be0fa84f1f
Move fs support methods out of AtomController into FileSystemHelper
2012-01-04 18:01:31 -07:00
Nathan Sobo
ee53616d82
Ensure that all windows are closed before proceeding to next spec.
2012-01-04 17:33:06 -07:00
Corey Johnson
7e270d641d
FileFinder removes itself when item is selected.
2012-01-04 15:47:41 -08:00
Corey Johnson
3ffe57f228
Project.getFilePaths returns full urls.
...
FileFinder.initialize takes a 'selected' callback.
2012-01-04 15:30:41 -08:00
Corey Johnson
9419a9ec86
Spread the app specs out.
2012-01-04 15:25:57 -08:00
Nathan Sobo
816f3774e1
Merge branch 'master' into asyncfs
2012-01-04 13:58:10 -07:00
Corey Johnson & Nathan Sobo
236ea5e906
RootView handles opening directories
2012-01-04 10:51:41 -08:00
Corey Johnson & Nathan Sobo
44802e9647
Hitting enter on FileFinder opens file in new window.
2012-01-03 17:08:13 -08:00
Corey Johnson & Nathan Sobo
f0976d4650
FileFinder requires the full filePath.
2012-01-03 17:08:04 -08:00
Nathan Sobo
1420ca9adb
Rename Project.list -> Project.getFilePaths, and change its behavior.
...
getFilePaths only resolves to the project-relative paths of all files in the project, excluding directories.
2012-01-03 17:22:03 -07:00
Nathan Sobo
6dddb1aa26
RootView.toggleFileFinder scans urls asynchronously.
2012-01-03 16:39:09 -07:00
Nathan Sobo
07b40cdbeb
RootView opens a project for the directory of the url passed to initialize.
...
Rename fixtures/file-finder-dir to fixtures/dir, because it's not really file-finder specific.
2012-01-03 16:01:46 -07:00
Corey Johnson & Nathan Sobo
f8b04cd902
RootView is initialized with a url and opens it with its editor
2012-01-03 13:57:10 -08:00
Corey Johnson & Nathan Sobo
2cfea9fa42
Fix broken specs
2012-01-03 14:40:31 -07:00
Corey Johnson & Nathan Sobo
5b3e0e9f83
fs.async.list takes a boolean 'recursive' flag.
2012-01-03 14:23:18 -07:00
Corey Johnson & Nathan Sobo
3822549007
Spec passes for fs.async.list.
2012-01-03 14:03:03 -07:00
Corey Johnson & Nathan Sobo
b3a7e1e097
Add failing fs.async.list spec.
2012-01-03 11:18:08 -07:00
Corey Johnson & Nathan Sobo
fe0c6f9a61
Remove common path prefix from FileFinder matches
2011-12-30 11:50:29 -08:00
Corey Johnson & Nathan Sobo
e6053a2d66
FileFinder only returns up to maxResults
2011-12-30 11:37:11 -08:00
Nathan Sobo
ad024bc1e6
Move window-global key bindings from window object to RootView.
...
This makes it simpler to discard bindings between specs: just throw away the RootView. It's also more straightforward to call @bindKey on self in the initialization of RootView, rather than binding to document on window.startup.
2011-12-30 13:26:48 -06:00
Nathan Sobo
a1e0039890
Centralize key binding logic in KeyBinder and jQuery.fn.bindKey extension.
...
This commit removes window.bindKey in favor of binding keys on dom elements. It also refactors pattern parsing in the test helper to use KeyBinder.parseKeyPattern.
2011-12-30 13:19:41 -06:00
Nathan Sobo
5273cb0638
Add $.fn.bindKey, which works on any jquery-wrapped element.
...
If given a string as an action, it attempts to call a method by that name on the element's view object. If given a function, it calls it directly.
2011-12-30 12:33:55 -06:00
Nathan Sobo
dc38a0e375
Add $.fn.view method, which links any jquery element to its parent view.
...
When generating a jQuery fragment with the templating framework, I store the fragment in the 'view' data property on all the fragments elements. This allows us to query an element from the DOM and determine what view object it belongs to.
2011-12-30 12:05:11 -06:00
Corey Johnson & Nathan Sobo
e4d73ace25
Bound up / down keys to moveUp / moveDown in fileFinder
2011-12-29 17:38:08 -08:00
Corey Johnson & Nathan Sobo
98458806ea
Add moveUp and moveDown to FileFinder
2011-12-29 16:43:22 -08:00
Corey Johnson & Nathan Sobo
0f772c0858
Template framework can bind events on the root of views, in addition to descendant elements.
2011-12-29 16:13:16 -08:00
Corey Johnson & Nathan Sobo
5aee51eb35
FileFinder tests pass
2011-12-29 15:37:08 -08:00
Corey Johnson & Nathan Sobo
b279063550
Fix bug where subviews could clobber outlets on superviews.
...
Now we wire outlets before the subviews are attached, preventing any outlets on the subview from overwriting outlets on the superview.
2011-12-29 16:29:06 -06:00
Corey Johnson & Nathan Sobo
2eb7d2a215
FileFinder loads files from editor.url's directory
2011-12-29 12:23:04 -08:00
Corey Johnson & Nathan Sobo
35e4b0e969
Incorporate Editor into templating framework.
2011-12-29 13:12:13 -06:00
Corey Johnson & Nathan Sobo
0285c3d94d
Builder.subview wires an outlet directly, rather than assigning an outlet property.
2011-12-29 13:10:44 -06:00
Corey Johnson & Nathan Sobo
b25fc80c9a
Template.subview expects a view instance instead of a template and params hash.
2011-12-29 12:17:52 -06:00
Corey Johnson & Nathan Sobo
8455507566
Use _.uniqueId to generate temporary subview divs.
2011-12-29 11:58:59 -06:00
Corey Johnson & Nathan Sobo
79ead1fefb
Add Builder.subview / Template.subview
2011-12-29 11:43:14 -06:00
Corey Johnson & Nathan Sobo
81dbe51851
Editor.buildAceEditor is causing root-view-spec to fail because it expects the DOM to have a #main element. I think we need to implement subviews for this to work, but didn't have time to get that working.
2011-12-28 17:30:34 -08:00
Corey Johnson & Nathan Sobo
e617e129e0
Rename Layout to RootView
2011-12-28 17:14:32 -08:00
Corey Johnson & Nathan Sobo
c6fbad8e9e
FileFinder is toggleable
2011-12-28 16:21:38 -08:00
Corey Johnson
7c2f4ff1be
Remove focused spec
2011-12-28 15:17:42 -08:00
Corey Johnson & Nathan Sobo
c6d90748f7
Meta-t adds file finder to bottom of layout.
2011-12-28 16:30:08 -06:00
Nathan Sobo
0fe85355f8
Merge branch 'view'
2011-12-28 14:22:12 -06:00
Nathan Sobo
886c435b43
Populate url list of file finder as user types.
2011-12-28 14:21:43 -06:00
Nathan Sobo
51c89acc5b
Add FileFinder with a findMatches method that returns ranked urls.
...
Change stringscore.js to be a function that takes a string, rather than extending the prototype.
2011-12-28 13:53:39 -06:00
Nathan Sobo
28ef202a6a
Un-focus and fix Layout template.
2011-12-28 12:47:04 -06:00
Corey Johnson
4d9e1d94aa
Remove test that is not used
2011-12-27 17:29:59 -08:00
Corey Johnson
06fd50de96
Bind keyPatterns to menuItems.
...
I don't like the implementation of this, but it works. Next step is cleaning it up.
2011-12-27 17:28:32 -08:00
Nathan Sobo
a622da2904
💄
2011-12-27 19:14:29 -06:00
Nathan Sobo
eeb20673b3
Pass the event and element to event-handling methods on the view.
2011-12-27 19:13:54 -06:00
Nathan Sobo
ba18614c2f
Bind DOM events to view methods based on element attributes.
...
For example, if you give an element the attribute click: 'elementClicked', the template will bind a click event to that element which calls the elementClicked method on the view.
2011-12-27 19:00:00 -06:00
Nathan Sobo
7948543a5b
Template extends view with @viewProperties and calls initialize with attributes passed to build.
2011-12-27 18:36:54 -06:00
Corey Johnson
a0fc994dcb
addMenuItem
can take a key pattern and set it as the key equivalent.
2011-12-27 16:30:48 -08:00
Nathan Sobo
08c1d33836
Switch Template to use builder. Wire outlets in Template.
2011-12-27 18:21:00 -06:00
Nathan Sobo
43ddb6b16a
Builder.toFragment creates outlet references on the fragment.
2011-12-27 17:43:05 -06:00
Nathan Sobo
a7aa1d2b75
Add jasmine jquery matchers.
2011-12-27 17:42:29 -06:00
Nathan Sobo
bd79d9cd5d
Builder correctly generates void (self-closing) tags.
2011-12-27 16:43:28 -06:00
Nathan Sobo
21fb88141e
Builder can generate tags with attributes.
2011-12-27 16:16:35 -06:00
Nathan Sobo
b5a06c288e
Tags can take textual content.
2011-12-27 16:05:01 -06:00
Nathan Sobo
e570c5d454
Tags can take a function for their content.
2011-12-27 15:57:29 -06:00
Nathan Sobo
22167faf28
Add template/Builder. It generates basic tags.
2011-12-27 15:50:39 -06:00
Nathan Sobo
a48a1b24f4
Don't add the same menu item more than once.
2011-12-26 23:33:05 -06:00
Nathan Sobo
b9f844ab18
Listen for focus/blur on window, not document.
2011-12-26 23:32:54 -06:00
Nathan Sobo
90188a871c
Only show menu items for a window/document when it is the key window.
...
Also add "File > Save" menu item. When document is focused, all menu items associated with its window are added to the main menu. When it is blurred, main menu is reset.
2011-12-26 14:49:51 -06:00
Nathan Sobo
a010c8e3c6
Add window.bindMenuItem, which adds a menu item that invokes a given function.
...
Every menu item is created with a path (File > Save). The functions are stored in a hash from (menu item path -> action) on the window. When an AtomMenuItem is selected, it looks up the action on the current window based on its path.
2011-12-26 13:12:27 -06:00
Nathan Sobo
0cc29a0319
Beef up Native.addMenuItem spec
2011-12-23 16:59:02 -06:00
Nathan Sobo
11d502b511
Unfocus spec. Fix spec.
2011-12-23 16:50:35 -06:00
Nathan Sobo
00bccdca96
Add partial implementation Native.addMenuItem.
...
It takes a path like "Menu 1 > Menu 2 > Item", and builds a series of submenus if needed along that path, then adds the final item at its terminus. Specs still need to be fleshed out further.
2011-12-23 16:45:04 -06:00
Nathan Sobo
68ce5544a7
Merge branch 'master' into wip
2011-12-23 15:58:11 -06:00
Nathan Sobo
c2b102d9f4
💄
2011-12-23 15:38:38 -06:00
Nathan Sobo
5b7a80f707
fdescribe / fit can be used to focus specs manually
2011-12-23 15:38:22 -06:00
Nathan Sobo
ae4fdf8812
Add Native.resetMainMenu and call it in global afterEach
...
This method removes any AtomMenuItems that aren't marked as 'global'. It ignores menu items that aren't instances of our custom subclass. This is needed by specs to clear any menu items added during tests. It will also be needed when a window loses focus and we want to remove any non-global menus associated with the window.
2011-12-23 12:43:32 -06:00
Nathan Sobo
deb088f1ed
Merge branch 'master' of github.com:probablycorey/Atomicity
2011-12-23 10:48:22 -06:00
Nathan Sobo
7d524f5f54
Editor.open assigns the url on the atom controller so refresh works properly.
2011-12-23 10:48:11 -06:00
Corey Johnson
2d6ddcedfd
Add window.bindKey which matches a pattern to an action.
2011-12-22 16:24:09 -08:00
Corey Johnson
b15c493693
Remove meta-o handler from window.
2011-12-22 14:58:34 -08:00
Corey Johnson
d0ed5992ca
'meta-o' presents open dialog.
2011-12-20 10:41:31 -08:00
Corey Johnson
f2d9f818a8
Add spec to verify mode is set on the aceEditor session.
2011-12-20 09:27:32 -08:00
Corey Johnson
f78d1461d3
Sobo'd the spec.
2011-12-20 09:25:15 -08:00
Corey Johnson
1abccbf9eb
Buffer with no url returns Text as its mode.
2011-12-19 16:40:55 -08:00
Corey Johnson
a72fb416f8
Buffer.getMode returns the ace mode based on the url.
2011-12-19 16:26:55 -08:00
Corey Johnson
ce9f5b7f5d
Better spec name
2011-12-19 13:20:45 -08:00
Corey Johnson
8efbd8c281
Move keybindings to window.
...
Window has startup and shutdown methods.
2011-12-19 12:59:11 -08:00
Corey Johnson
5ec94fc28c
Triggers the event created with window.keydown.
2011-12-19 12:58:35 -08:00
Nathan Sobo
7dcb00f0ec
When saving buffer with no url, pop up 'save as' dialog.
...
Remove a lot of old code.
2011-12-16 16:31:02 -08:00
Nathan Sobo
c75c3555bb
Meta+s triggers save on Editor.
...
Still can't save buffers that don't have a url.
2011-12-16 16:30:51 -08:00
Nathan Sobo
4ce635d539
Always assign the app to a global in specs console.
2011-12-15 19:11:20 -08:00
Corey Johnson & Nathan Sobo
a07daf26ca
Add Buffer.save
2011-12-15 15:59:32 -08:00
Corey Johnson & Nathan Sobo
5fbb320957
Buffer is empty when created with no url.
2011-12-15 15:16:44 -08:00
Corey Johnson & Nathan Sobo
c16c25b69b
ace Editor uses Document held by Buffer.
2011-12-15 15:06:34 -08:00
Corey Johnson & Nathan Sobo
27dd97069a
Attach and populate the ace editor with buffer text when an editor is created.
2011-12-15 14:13:34 -08:00
Corey Johnson & Nathan Sobo
32631468e7
Recursively require all -spec.coffee files in spec suite.
2011-12-15 14:11:00 -08:00
Corey Johnson & Nathan Sobo
71d9dfb147
Rename jasmine_content to jasmine-content.
2011-12-15 14:09:40 -08:00
Corey Johnson & Nathan Sobo
cf02d1183a
App.open opens a new window with an editor pointing at the given url.
2011-12-15 10:45:15 -08:00
Corey Johnson
9e55a00a56
Closes all non-spec windows opened by the app.
2011-12-14 18:30:17 -08:00
Corey Johnson
fbb3efacf4
wii - gettings specs on App.open. Window closing not working quite right.
2011-12-14 16:24:30 -08:00
Corey Johnson & Nathan Sobo
607149a07d
Half-baked template experiment
2011-12-12 16:24:55 -08:00
Corey Johnson & Nathan Sobo
0dd6df1ab6
Empty test suite runs when you hit ctr-alt-cmd-s
2011-12-12 15:05:59 -08:00