From 95dd55ba943f3667bac3acecb2c65ee7f69d42cd Mon Sep 17 00:00:00 2001 From: Blaž Hrastnik Date: Sat, 10 Apr 2021 12:01:49 +0900 Subject: Fix overlap calculation. --- helix-core/src/selection.rs | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) (limited to 'helix-core/src') diff --git a/helix-core/src/selection.rs b/helix-core/src/selection.rs index ca1a6d32..dfd95bdd 100644 --- a/helix-core/src/selection.rs +++ b/helix-core/src/selection.rs @@ -59,11 +59,12 @@ impl Range { #[must_use] pub fn overlaps(&self, other: &Self) -> bool { // cursor overlap is checked differently - // if self.is_empty() { - // self.from() <= other.to() - // } else { - self.to() >= other.from() && other.to() >= self.from() - // } + if self.is_empty() { + let pos = self.head; + pos >= other.from() && other.to() >= pos + } else { + self.to() > other.from() && other.to() > self.from() + } } pub fn contains(&self, pos: usize) -> bool { @@ -159,13 +160,12 @@ impl Selection { } } - pub fn add(mut self, range: Range) -> Self { + pub fn push(mut self, range: Range) -> Self { let index = self.ranges.len(); self.ranges.push(range); Self::normalize(self.ranges, index) } - // add_range // push // replace_range /// Map selections over a set of changes. Useful for adjusting the selection position after @@ -223,6 +223,9 @@ impl Selection { // if previous value exists if let Some(prev) = result.last_mut() { // and we overlap it + + // TODO: we used to simply check range.from() <(=) prev.to() + // avoiding two comparisons if range.overlaps(prev) { let from = prev.from(); let to = std::cmp::max(range.to(), prev.to()); -- cgit v1.2.3-70-g09d2