diff --git a/crates/rope/src/rope.rs b/crates/rope/src/rope.rs index 33886854220862c60153dc3ea1f02180c62212a3..9185b5baa300af93ec7ceb3e951ae6ba71772721 100644 --- a/crates/rope/src/rope.rs +++ b/crates/rope/src/rope.rs @@ -639,18 +639,20 @@ impl<'a> Chunks<'a> { pub fn seek(&mut self, mut offset: usize) { offset = offset.clamp(self.range.start, self.range.end); - let bias = if self.reversed { - Bias::Left + if self.reversed { + if offset > self.chunks.end() { + self.chunks.seek_forward(&offset, Bias::Left); + } else if offset <= *self.chunks.start() { + self.chunks.seek(&offset, Bias::Left); + } } else { - Bias::Right + if offset >= self.chunks.end() { + self.chunks.seek_forward(&offset, Bias::Right); + } else if offset < *self.chunks.start() { + self.chunks.seek(&offset, Bias::Right); + } }; - if offset >= self.chunks.end() { - self.chunks.seek_forward(&offset, bias); - } else { - self.chunks.seek(&offset, bias); - } - self.offset = offset; }