Unify selection directions when performing `editor: select all selections` (#23993)
Joseph T. Lyons
and
Marshall Bowers
created
Closes https://github.com/zed-industries/zed/issues/19569
Current behavior:
https://github.com/user-attachments/assets/1de764c9-7c62-49ad-b24b-6e85760857db
After PR:
https://github.com/user-attachments/assets/651d8e50-95e2-4513-852b-9557d00d2b62
Release Notes:
- Unified selection directions when performing `editor: select all
selections`.
---------
Co-authored-by: Marshall Bowers <git@maxdeviant.com>
Change summary
crates/editor/src/editor.rs | 6 ++++++
crates/editor/src/editor_tests.rs | 16 ++++++++++++++++
2 files changed, 22 insertions(+)
Detailed changes
@@ -8827,6 +8827,12 @@ impl Editor {
}
}
+ let reversed = self.selections.oldest::<usize>(cx).reversed;
+
+ for selection in new_selections.iter_mut() {
+ selection.reversed = reversed;
+ }
+
select_next_state.done = true;
self.unfold_ranges(
&new_selections
@@ -5236,11 +5236,27 @@ async fn test_select_all_matches(cx: &mut gpui::TestAppContext) {
init_test(cx, |_| {});
let mut cx = EditorTestContext::new(cx).await;
+
+ // Test caret-only selections
cx.set_state("abc\nˇabc abc\ndefabc\nabc");
cx.update_editor(|e, window, cx| e.select_all_matches(&SelectAllMatches, window, cx))
.unwrap();
cx.assert_editor_state("«abcˇ»\n«abcˇ» «abcˇ»\ndefabc\n«abcˇ»");
+
+ // Test left-to-right selections
+ cx.set_state("abc\n«abcˇ»\nabc");
+
+ cx.update_editor(|e, window, cx| e.select_all_matches(&SelectAllMatches, window, cx))
+ .unwrap();
+ cx.assert_editor_state("«abcˇ»\n«abcˇ»\n«abcˇ»");
+
+ // Test right-to-left selections
+ cx.set_state("abc\n«ˇabc»\nabc");
+
+ cx.update_editor(|e, window, cx| e.select_all_matches(&SelectAllMatches, window, cx))
+ .unwrap();
+ cx.assert_editor_state("«ˇabc»\n«ˇabc»\n«ˇabc»");
}
#[gpui::test]