Blaž Hrastnik
|
a74ff6bc03
|
Transaction: need to consume insert | delete properly.
|
2021-03-29 14:55:35 +09:00 |
|
Blaž Hrastnik
|
06aca7691c
|
clippy lint
|
2021-03-24 14:58:01 +09:00 |
|
Blaž Hrastnik
|
cbcacb1063
|
Merge some imports.
|
2021-03-22 12:40:07 +09:00 |
|
Blaž Hrastnik
|
798dbd27c5
|
Selection: fail early if new() is called with no ranges.
|
2021-03-22 12:22:33 +09:00 |
|
Blaž Hrastnik
|
f29f01858d
|
Implement iter() and len() directly on Selection.
|
2021-03-19 11:14:13 +09:00 |
|
Blaž Hrastnik
|
59e6024186
|
Remove State from a few more signatures.
|
2021-03-18 14:17:32 +09:00 |
|
Blaž Hrastnik
|
8eaf9a432d
|
Make Transaction::change only rely on the rope.
|
2021-03-18 13:39:56 +09:00 |
|
Blaž Hrastnik
|
1cf887dea9
|
Cleanup: use doc.selection() instead of doc.state.selection().
|
2021-03-14 17:14:34 +09:00 |
|
Blaž Hrastnik
|
af55ebd002
|
transaction: Also modify map_pos to work with insert|delete order.
|
2021-02-18 12:17:33 +09:00 |
|
Blaž Hrastnik
|
9cac44c7c0
|
minor changes
|
2021-02-17 17:26:27 +09:00 |
|
Blaž Hrastnik
|
9821c4dd3b
|
Optimize Changeset::is_empty()
Checked the ASM output for these three options:
pub enum Operation {
/// Move cursor by n characters.
Retain(usize),
/// Delete n characters.
Delete(usize),
/// Insert text at position.
Insert(String),
}
pub struct A {
changes: Vec<Operation>,
len: usize,
}
impl A {
pub fn is_empty1(&self) -> bool {
match self.changes.as_slice() {
[] => true,
[Operation::Retain(_)] => true,
_ => false,
}
}
/// `true` when the set is empty.
pub fn is_empty2(&self) -> bool {
let len = self.changes.len();
len == 0
|| (
len == 1
&& self.changes[0] == Operation::Retain(self.len)
)
}
pub fn is_empty3(&self) -> bool {
match self.changes.as_slice() {
[] | [Operation::Retain(_)] => true,
_ => false
}
}
}
|
2021-02-16 13:39:04 +09:00 |
|
Blaž Hrastnik
|
b0b5451c38
|
Since insert preceedes deletes, follow that ordering in Transaction::changes.
Produces the same output but will take the happy path.
|
2021-02-16 11:09:05 +09:00 |
|
Blaž Hrastnik
|
b4312c9492
|
transaction: Use builder methods to generate compact changesets.
|
2021-02-16 11:03:36 +09:00 |
|
Blaž Hrastnik
|
19fb4ed835
|
transaction: Merge consecutive inserts on compose.
|
2021-02-16 00:15:49 +09:00 |
|
Blaž Hrastnik
|
777a80917d
|
Address clippy lints.
|
2021-01-08 16:37:36 +09:00 |
|
Blaž Hrastnik
|
cc6bdf8f66
|
Text change generation, RPC call handling.
|
2020-12-03 13:10:35 +09:00 |
|
Blaž Hrastnik
|
b39849dde1
|
Refactor: Document type as a wrapper around barebones State.
|
2020-12-03 13:10:35 +09:00 |
|
Blaž Hrastnik
|
0b74d423d0
|
Validate compose len after applying a is same as before applying b.
|
2020-10-14 13:35:54 +09:00 |
|
Blaž Hrastnik
|
7fcc6f8f1b
|
Fix overlapping (insert | delete) compose
|
2020-10-14 11:48:01 +09:00 |
|
Blaž Hrastnik
|
94f9603c74
|
Fix compose not merging certain changesets correctly.
|
2020-10-14 09:38:52 +09:00 |
|
Blaž Hrastnik
|
4a648555ed
|
Don't try to compose zero-width deletes.
|
2020-10-13 23:13:56 +09:00 |
|
Blaž Hrastnik
|
490e23b645
|
Simplify changeset tracking.
|
2020-10-13 23:13:56 +09:00 |
|
Blaž Hrastnik
|
8098279676
|
Cleanup
|
2020-10-13 23:13:56 +09:00 |
|
Blaž Hrastnik
|
1dba0f2b1c
|
Simple yank/paste registers.
|
2020-10-13 23:13:56 +09:00 |
|
Blaž Hrastnik
|
eba5b1ef33
|
Fix changeset composition, lengths don't have to match.
|
2020-10-13 23:13:56 +09:00 |
|
Blaž Hrastnik
|
b765c17896
|
Hacky undo/redo integration.
|
2020-10-13 23:13:56 +09:00 |
|
Blaž Hrastnik
|
fd311fb8ad
|
Undo tree draft.
We keep a tree of transactions. This allows for persistent undo by
simply serializing the changesets.
|
2020-10-13 23:13:56 +09:00 |
|
Blaž Hrastnik
|
883b77bd24
|
Fix transaction.invert()/.apply() using byte counts instead of char counts.
|
2020-10-04 17:37:46 +09:00 |
|
Blaž Hrastnik
|
aa077a07f3
|
Implement Transaction::invert.
|
2020-10-02 18:16:26 +09:00 |
|
Blaž Hrastnik
|
36e7e2133f
|
Split selection on regex, fix InputEdit generation.
|
2020-09-29 01:01:27 +09:00 |
|
Blaž Hrastnik
|
3020077da8
|
Extend selection commands.
|
2020-09-29 01:00:35 +09:00 |
|
Blaž Hrastnik
|
48330ddb5f
|
Command needs access to view information for certain changes.
|
2020-09-19 23:16:00 +09:00 |
|
Blaž Hrastnik
|
3859f6963d
|
More work on the UI.
|
2020-09-19 11:58:08 +09:00 |
|
Blaž Hrastnik
|
088f8a82af
|
Incremental parsing: rough draft.
|
2020-09-17 16:32:40 +09:00 |
|
Blaž Hrastnik
|
96db02742e
|
Simplify some more code.
|
2020-09-13 23:40:11 +09:00 |
|
Blaž Hrastnik
|
0427acd18c
|
Avoid collect() by accepting iterators into Transaction::change.
|
2020-09-13 23:12:14 +09:00 |
|
Blaž Hrastnik
|
b08278807e
|
Add 'A', 'I' commands.
|
2020-09-13 20:04:16 +09:00 |
|
Blaž Hrastnik
|
fb0f56b747
|
Add 'o' command.
|
2020-09-13 19:51:42 +09:00 |
|
Blaž Hrastnik
|
22cb7b3338
|
Change -> Operation, Change2 -> Change
|
2020-09-13 19:18:05 +09:00 |
|
Blaž Hrastnik
|
d86f0feafc
|
Abstract Transaction::change from change_by_selection.
|
2020-09-13 15:48:15 +09:00 |
|
Blaž Hrastnik
|
d466882d04
|
Abstract Transaction::change_by_selection, working del/backspace.
|
2020-09-13 11:32:37 +09:00 |
|
Blaž Hrastnik
|
dd749bb284
|
Expand transaction API.
|
2020-09-07 17:08:28 +09:00 |
|
Blaž Hrastnik
|
8b3e152126
|
cleanup: Make Buffer just a part of State.
|
2020-09-07 11:28:52 +09:00 |
|
Blaž Hrastnik
|
579b6899f1
|
Work on insert mode.
|
2020-09-07 11:21:26 +09:00 |
|
Blaž Hrastnik
|
387fb57c94
|
Allow unused code for the time being.
|
2020-06-02 10:59:02 +09:00 |
|
Blaž Hrastnik
|
6905ff03c2
|
Start swapping from termwiz to crossterm + async.
|
2020-05-28 17:47:35 +09:00 |
|
Blaž Hrastnik
|
1984410ac9
|
Selection mapping over changesets.
|
2020-05-28 14:59:50 +09:00 |
|
Blaž Hrastnik
|
e52e848fd7
|
changeset: Introduce map_pos.
|
2020-05-28 14:48:34 +09:00 |
|
Blaž Hrastnik
|
b5c38812e9
|
address clippy warnings
|
2020-05-28 14:45:44 +09:00 |
|
Blaž Hrastnik
|
23109f1512
|
OT: changeset: Implement compose and apply.
|
2020-05-26 18:11:11 +09:00 |
|