Commit Graph

109 Commits

Author SHA1 Message Date
Nathan Sobo
628701fd3a Finish converting cursors to use markers.
The model layer works at least… haven't tested the view. Will test out
the view once I get the selection model working.
2013-01-31 15:52:28 -07:00
Nathan Sobo
bc44540b10 Start adding ability to observe marker head positions 2013-01-31 14:00:01 -07:00
Nathan Sobo
1d1c613f5b Allow buffer marker head and tail positions to be manipulated 2013-01-30 22:16:08 -07:00
Nathan Sobo
5dd142b966 Allow markers to be created in a reverse orientation
This means that the head of the marker precedes its tail in the buffer.
This will be important if we want to build selections on top of markers.
2013-01-30 21:44:57 -07:00
Nathan Sobo
d8ffdcd6bd Allow markers to be created with just a position
When a marker is created with just a position, it only gets a head
position and has no tail position.
2013-01-30 21:37:57 -07:00
Nathan Sobo
e02f9cd830 Rename Buffer.createMarker to markRange 2013-01-30 17:41:04 -07:00
Nathan Sobo
dfe0cad217 Replace anchor point/range with a single concept: markers
A "marker" is basically like a persistent selection/cursor composite,
having a head and a tail. The "head" is like the cursor in a selection,
and the "tail" is like the part of the selection that doesn't move. My
goal is for markers to be the only construct used to track regions
in the buffer. I want to replace anchors with them.
2013-01-30 16:52:09 -07:00
Nathan Sobo
bcd9d5d2b9 Rename addAnchorPoint to createAnchorPoint 2013-01-30 13:57:39 -07:00
Nathan Sobo
113a8fa279 Merge remote-tracking branch 'origin/dev' into better-anchors
Conflicts:
	src/app/cursor.coffee
	src/app/editor.coffee
2013-01-30 12:59:04 -07:00
Nathan Sobo
30909a8e8f Move anchor points to buffer; restore invalidated points on undo 2013-01-30 12:23:42 -07:00
Kevin Sawicki
05314ae215 Call delete() from deleteRows() 2013-01-29 17:16:33 -08:00
Kevin Sawicki
4bfa5dd7a0 Remove unneeded Range.fromObject call 2013-01-29 15:40:34 -08:00
Kevin Sawicki
1a04fa31d1 Clip range specified to Buffer.getTextInRange() 2013-01-29 15:35:14 -08:00
Kevin Sawicki
66df860329 💄 2013-01-29 14:58:51 -08:00
Kevin Sawicki & Nathan Sobo
f6fe2bdc97 Don't normalize line endings from Buffer.setText
BufferChangeOperation now takes an options hash that
can specify whether line endings should be normalized.

This option is set to false when Buffer.setText is called.
This replaces the previous assignment of lineEndings to []
with a more explicit mechanism.
2013-01-27 16:01:22 -08:00
Kevin Sawicki & Nathan Sobo
98614592af Store line endings on a per-line basis in Buffer
The line ending for each line is recorded and reused
when lines are modified or inserted.

Closes #166
2013-01-27 16:01:22 -08:00
Kevin Sawicki
a77623c118 Always subscribe to created file 2013-01-22 14:52:08 -08:00
Kevin Sawicki
39fd4f7059 Remove extra subscribeToFile() call
This was causing an event listener to leak
on each call to save()

Closes #152
2013-01-22 14:44:34 -08:00
Kevin Sawicki
62f1155706 Don't prompt to save on close if buffer is opened elsewhere
Only prompt to save when the buffer is dirty and the last
open session on it is being destroyed.
2013-01-17 17:25:52 -08:00
Nathan Sobo
b6b8f235fd Move and rename Buffer's 'anchors-updated' event 2013-01-04 14:03:37 -07:00
Kevin Sawicki & Nathan Sobo
ec13c38c7d Add EditSession.transact and friends
`EditSession.transact` adds more semantics on top of `UndoManager`'s
version pertaining to restoring selections on undo/redo of the
transaction.
2013-01-04 12:42:09 -07:00
Kevin Sawicki & Nathan Sobo
428900fdba Rename File 'remove' & 'move' events to passive voice
'remove' -> 'removed'
'move' -> 'moved'
2013-01-04 11:25:46 -07:00
Kevin Sawicki & Nathan Sobo
8e835acea4 Rename Buffer 'will-save' event to 'will-be-saved' 2013-01-04 11:25:45 -07:00
Nathan Sobo
5a409dde3c Rename File and Directory 'contents-change' to 'contents-changed' 2013-01-03 18:16:19 -07:00
Kevin Sawicki
2971716060 Always use Git instance from project
This removes the need to open a new repository
each time a directory-view or file-view is displayed
and also when a status-bar is displayed for a buffer.
2013-01-02 17:21:42 -08:00
Nathan Sobo
6d9402b5c9 Rename Anchor and Buffer events to passive-voice scheme 2013-01-02 13:48:10 -07:00
Nathan Sobo
bb710d0ae0 Buffer.save only writes to disk if the buffer is modified
This prevents autosave from writing unmodified buffers to disk, which
was causing the tree view to rebuild directory contents based on the
write event just when switching tabs.
2013-01-02 04:23:03 -07:00
Nathan Sobo
acc0503684 Merge remote-tracking branch 'origin/master' into config
Conflicts:
	src/app/keymap.coffee
	src/extensions/outline-view/src/keymap.coffee
	src/extensions/outline-view/src/tag-reader.coffee
	src/packages/fuzzy-finder/spec/fuzzy-finder-spec.coffee
	src/packages/fuzzy-finder/src/fuzzy-finder.coffee
2012-12-18 20:32:05 -07:00
Nathan Sobo
4b88a9f5ea Expanded snippets are destroyed when the cursor leaves a tab stop
For this to work, I needed to make the updating of anchors transactional. Now, all anchors are updated and *then* they emit their events. That way when the cursor moves based on the user typing, the tab stop they're in has a chance to expand before we handle the move event. This prevents spurious cancellation of the snippet when typing on a tab stop.
2012-11-29 13:39:00 -07:00
Corey Johnson
69485724cd Buffer emits a contents-modified event when it's contents differ from disk.
Including when the Buffer's file is removed via another process.
2012-11-29 12:05:05 -08:00
Corey Johnson
ada14a1cba No longer read a File's contents from disk on creation 2012-11-29 11:26:42 -08:00
Corey Johnson & Nathan Sobo
e98b4f9a9b Use file contents instead of md5 to determine disk change 2012-11-28 17:16:44 -08:00
Corey Johnson & Nathan Sobo
d6009df44e Buffers retain path when file is deleted and can be re-saved
Path watching resumes once the file is saved again. This commit allows files to be created for as-yet nonexistent paths. We won't call `$native.watchPath` until we have at least 1 subscription to the file in JS and the file exists on disk.

Also, we moved execution of the path watcher callbacks until after the callbacks data structure is updated in order to avoid confusing behavior in specs.
2012-11-28 16:55:10 -07:00
Corey Johnson & Nathan Sobo
eb0414f4e7 Emit a contents-conflicted` event instead of contents-change-on-disk 2012-11-28 15:21:12 -07:00
Corey Johnson & Nathan Sobo
d5d4751776 Don't set Buffer's file to null when the file is deleted (retain path) 2012-11-28 13:40:37 -07:00
Corey Johnson & Nathan Sobo
bfb1742285 ctrl-a on an empty line stays on that same line.
Fixes #95
2012-11-19 10:02:31 -08:00
Nathan Sobo
4a84c5f8f9 Add 'stopped-changing' event to buffer. Fires 300ms after last change.
This will be used by the status bar and other expensive code that needs to respond to the buffer changing, but that we don't want running on every single keystroke when the user is typing quickly.
2012-11-14 15:33:44 -07:00
Kevin Sawicki
3df28ab375 Store Git instance in Buffer
Access it from StatusBar for checking
path status and current branch.
2012-11-05 12:03:59 -08:00
Kevin Sawicki
c8258894c7 Add Buffer.checkoutHead()
Move implementation from Editor
to Buffer for checking out the
HEAD revision of the current path
2012-11-05 11:52:33 -08:00
Nathan Sobo
aa3405cb2b Cache the memory contents of Buffer for better performance 2012-11-01 14:09:58 -06:00
Nathan Sobo
887200de86 Use cached disk contents instead of signature for Buffer.isModified
Computing the signature was really slow for large files. Keeping a cached copy of the disk contents and comparing directly costs less in the benchmark. We'll have to turn on the status bar in benchmarks to see if the comparison is too expensive.
2012-10-31 12:36:14 -06:00
Nathan Sobo
007e032224 Expand selection linewise after triple-click (dragging or shift-click) 2012-10-30 14:48:33 -06:00
Kevin Sawicki
2531665570 Add Buffer.isEmpty()
To be used by Buffer.isModified() for when the
buffer has no backing file
2012-10-27 08:57:55 -07:00
Kevin Sawicki
acb5207d28 Treat file-less buffers as unmodified when empty 2012-10-26 13:56:21 -07:00
Corey Johnson & Nathan Sobo
adf00b60f3 Detect softTabs/hardTabs when an EditSession is created 2012-10-26 12:20:14 -06:00
Corey Johnson & Nathan Sobo
29351ee5fc Move setIndentationForBufferRow and indentationForBufferRow to EditSession 2012-10-26 11:15:55 -06:00
Nathan Sobo
d310297fe7 Radically simplify the definition of "modified" for buffers
Now, we maintain md5 signatures for the on-disk and in-memory contents of the buffer. Whenever either contents change, we recompute the signature and store it on the buffer. We can tell if the buffer is modified by comparing these signatures. When the disk contents change, we compare the memory and disk signatures *before* recomputing the disk signature to determine whether to update the buffer or mark it as a conflict.
2012-10-25 13:08:38 -06:00
Kevin Sawicki
0da869589e Use change event instead of buffer-change event
This will update the modified indicator after operations
are undone
2012-10-12 15:08:01 -07:00
Will Farrington
d5b0e7acd2 memoize Buffer @contentOnDisk so we don't re-read the whole file on every buffer-change event 2012-10-08 18:17:15 -10:00
Will Farrington
4b3505d9b5 Disable buffer modified indicator if buffer content matches content on disk 2012-10-08 17:55:35 -10:00