Change summary
crates/editor/src/editor.rs | 8 +++++++-
crates/vim/src/test.rs | 17 +++++++++++++++++
crates/vim/test_data/test_selection_goal.json | 8 ++++++++
3 files changed, 32 insertions(+), 1 deletion(-)
Detailed changes
@@ -2454,7 +2454,13 @@ impl Editor {
let snapshot = this.buffer.read(cx).read(cx);
let new_selections = resolve_multiple::<usize, _>(new_anchor_selections, &snapshot)
.zip(new_selection_deltas)
- .map(|(selection, delta)| selection.map(|e| e + delta))
+ .map(|(selection, delta)| Selection {
+ id: selection.id,
+ start: selection.start + delta,
+ end: selection.end + delta,
+ reversed: selection.reversed,
+ goal: SelectionGoal::None,
+ })
.collect::<Vec<_>>();
let mut i = 0;
@@ -635,3 +635,20 @@ async fn test_zero(cx: &mut gpui::TestAppContext) {
the lazy dog"})
.await;
}
+
+#[gpui::test]
+async fn test_selection_goal(cx: &mut gpui::TestAppContext) {
+ let mut cx = NeovimBackedTestContext::new(cx).await;
+
+ cx.set_shared_state(indoc! {"
+ ;;ˇ;
+ Lorem Ipsum"})
+ .await;
+
+ cx.simulate_shared_keystrokes(["a", "down", "up", ";", "down", "up"])
+ .await;
+ cx.assert_shared_state(indoc! {"
+ ;;;;ˇ
+ Lorem Ipsum"})
+ .await;
+}
@@ -0,0 +1,8 @@
+{"Put":{"state":";;ˇ;\nLorem Ipsum"}}
+{"Key":"a"}
+{"Key":"down"}
+{"Key":"up"}
+{"Key":";"}
+{"Key":"down"}
+{"Key":"up"}
+{"Get":{"state":";;;;ˇ\nLorem Ipsum","mode":"Insert"}}