Implement Selection::replace to replace a single range
Fixes #985 Co-authored-by: Daniel S Poulin <crimsonmage+github@gmail.com>
This commit is contained in:
parent
911b9b3276
commit
6431b26a6a
2 changed files with 12 additions and 2 deletions
|
@ -362,6 +362,11 @@ impl Selection {
|
|||
|
||||
/// Adds a new range to the selection and makes it the primary range.
|
||||
pub fn remove(mut self, index: usize) -> Self {
|
||||
assert!(
|
||||
self.ranges.len() > 1,
|
||||
"can't remove the last range from a selection!"
|
||||
);
|
||||
|
||||
self.ranges.remove(index);
|
||||
if index < self.primary_index || self.primary_index == self.ranges.len() {
|
||||
self.primary_index -= 1;
|
||||
|
@ -369,6 +374,12 @@ impl Selection {
|
|||
self
|
||||
}
|
||||
|
||||
/// Replace a range in the selection with a new range.
|
||||
pub fn replace(mut self, index: usize, range: Range) -> Self {
|
||||
self.ranges[index] = range;
|
||||
self.normalize()
|
||||
}
|
||||
|
||||
/// Map selections over a set of changes. Useful for adjusting the selection position after
|
||||
/// applying changes to a document.
|
||||
pub fn map(self, changes: &ChangeSet) -> Self {
|
||||
|
|
|
@ -1227,8 +1227,7 @@ fn search_impl(
|
|||
Movement::Extend => selection.clone().push(Range::new(start, end)),
|
||||
Movement::Move => selection
|
||||
.clone()
|
||||
.remove(selection.primary_index())
|
||||
.push(Range::new(start, end)),
|
||||
.replace(selection.primary_index(), Range::new(start, end)),
|
||||
};
|
||||
|
||||
doc.set_selection(view.id, selection);
|
||||
|
|
Loading…
Add table
Reference in a new issue