diff options
Diffstat (limited to '')
| -rw-r--r-- | src/selection.rs | 29 |
1 files changed, 27 insertions, 2 deletions
diff --git a/src/selection.rs b/src/selection.rs index 2c1e43d..d3cdb76 100644 --- a/src/selection.rs +++ b/src/selection.rs @@ -215,6 +215,12 @@ impl Selection { new_line: usize, paragraph: &Paragraph, ) { + if self.active_end().line == new_line { + return; + } + + let old_direction = self.direction; + if new_line < self.start.line { self.direction = Direction::Left; } else if new_line > self.end.line { @@ -224,9 +230,28 @@ impl Selection { let (start, end) = if self.direction == Direction::Right { let value = Value::new(paragraph.buffer().lines[new_line].text()); - (self.start, SelectionEnd::new(new_line, value.len())) + let start = if self.direction == old_direction { + self.start + } else { + SelectionEnd::new(self.end.line, 0) + }; + + let end = SelectionEnd::new(new_line, value.len()); + + (start, end) } else { - (SelectionEnd::new(new_line, 0), self.end) + let start = SelectionEnd::new(new_line, 0); + let end = if self.direction == old_direction { + self.end + } else { + let value = Value::new( + paragraph.buffer().lines[self.start.line].text(), + ); + + SelectionEnd::new(self.start.line, value.len()) + }; + + (start, end) }; self.moving_line_index = None; |
