diff options
author | gibbz00 | 2023-03-09 04:08:28 +0000 |
---|---|---|
committer | GitHub | 2023-03-09 04:08:28 +0000 |
commit | 2cf4ce235662fcb272c684751b844b2ebc1b757f (patch) | |
tree | 9c794c941f6fd78ad6a3e2448c0e7844e08cde78 | |
parent | aabc8af95dd1c093da4b67151f6a7026a85e9c0e (diff) |
Fix `shrink_selection` with multiple cursors. (#6093)
* Fix #6092
Cause were some incorrect assumptions that missed an edge case in the
`Selection.contains()` calculation. Tests were added accordingly.
* Fix Selection.contains() edge-case handling.
Removing the len check short-circuit was the only thing needed as
pointed out by @dead10ck.
-rw-r--r-- | helix-core/src/selection.rs | 11 | ||||
-rw-r--r-- | helix-term/src/commands.rs | 1 |
2 files changed, 6 insertions, 6 deletions
diff --git a/helix-core/src/selection.rs b/helix-core/src/selection.rs index 0db7634c..0eb2b755 100644 --- a/helix-core/src/selection.rs +++ b/helix-core/src/selection.rs @@ -625,11 +625,6 @@ impl Selection { // returns true if self ⊇ other pub fn contains(&self, other: &Selection) -> bool { - // can't contain other if it is larger - if other.len() > self.len() { - return false; - } - let (mut iter_self, mut iter_other) = (self.iter(), other.iter()); let (mut ele_self, mut ele_other) = (iter_self.next(), iter_other.next()); @@ -1240,5 +1235,11 @@ mod test { vec!((3, 4), (7, 9)) )); assert!(!contains(vec!((1, 1), (5, 6)), vec!((1, 6)))); + + // multiple ranges of other are all contained in some ranges of self, + assert!(contains( + vec!((1, 4), (7, 10)), + vec!((1, 2), (3, 4), (7, 9)) + )); } } diff --git a/helix-term/src/commands.rs b/helix-term/src/commands.rs index 6817bc5c..803f4051 100644 --- a/helix-term/src/commands.rs +++ b/helix-term/src/commands.rs @@ -4371,7 +4371,6 @@ fn shrink_selection(cx: &mut Context) { // try to restore previous selection if let Some(prev_selection) = view.object_selections.pop() { if current_selection.contains(&prev_selection) { - // allow shrinking the selection only if current selection contains the previous object selection doc.set_selection(view.id, prev_selection); return; } else { |