From 4c8b5ea4f7260ba3d52afcc2f278830c61cc197b Mon Sep 17 00:00:00 2001 From: "Joseph T. Lyons" Date: Thu, 30 Jan 2025 20:48:37 -0500 Subject: [PATCH] Unify selection directions when performing `editor: select all selections` (#23993) 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 --- crates/editor/src/editor.rs | 6 ++++++ crates/editor/src/editor_tests.rs | 16 ++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/crates/editor/src/editor.rs b/crates/editor/src/editor.rs index dff1c55f15..491b9c44d3 100644 --- a/crates/editor/src/editor.rs +++ b/crates/editor/src/editor.rs @@ -8827,6 +8827,12 @@ impl Editor { } } + let reversed = self.selections.oldest::(cx).reversed; + + for selection in new_selections.iter_mut() { + selection.reversed = reversed; + } + select_next_state.done = true; self.unfold_ranges( &new_selections diff --git a/crates/editor/src/editor_tests.rs b/crates/editor/src/editor_tests.rs index c5336e10f6..bbf631c671 100644 --- a/crates/editor/src/editor_tests.rs +++ b/crates/editor/src/editor_tests.rs @@ -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]