aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/input.rs5
-rw-r--r--src/selection.rs43
2 files changed, 27 insertions, 21 deletions
diff --git a/src/input.rs b/src/input.rs
index 047c81aa..90384198 100644
--- a/src/input.rs
+++ b/src/input.rs
@@ -664,6 +664,7 @@ mod tests {
use config::{self, Config, ClickHandler};
use index::{Point, Side};
use selection::Selection;
+ use grid::Scroll;
use super::{Action, Binding, Processor};
@@ -717,6 +718,10 @@ mod tests {
self.last_action = MultiClick::TripleClick;
}
+ fn scroll(&mut self, scroll: Scroll) {
+ self.terminal.scroll_display(scroll);
+ }
+
fn mouse_coords(&self) -> Option<Point> {
self.terminal.pixels_to_coords(self.mouse.x as usize, self.mouse.y as usize)
}
diff --git a/src/selection.rs b/src/selection.rs
index 20b1d601..188df348 100644
--- a/src/selection.rs
+++ b/src/selection.rs
@@ -251,13 +251,6 @@ impl Selection {
let end_side = region.end.side;
let cols = grid.dimensions().col;
- // No selection for single cell with identical sides or two cell with right+left sides
- if (start == end && start_side == end_side)
- || (start_side == Side::Right && end_side == Side::Left && end.col == start.col + 1)
- {
- return None;
- }
-
// Make sure front is always the "bottom" and tail is always the "top"
let (mut front, mut tail, front_side, tail_side) =
if start.line > end.line || start.line == end.line && start.col <= end.col {
@@ -268,6 +261,14 @@ impl Selection {
(start, end, start_side, end_side)
};
+ // No selection for single cell with identical sides or two cell with right+left sides
+ if (front == tail && front_side == tail_side)
+ || (tail_side == Side::Right && front_side == Side::Left && front.line == tail.line
+ && front.col == tail.col + 1)
+ {
+ return None;
+ }
+
// Remove last cell if selection ends to the left of a cell
if front_side == Side::Left && start != end {
if front.col != Column(0) {
@@ -475,10 +476,10 @@ mod test {
///
/// 1. [ ][ ][ ][ ][ ]
/// [ ][ ][ ][ ][ ]
- /// 2. [ ][ ][ ][ ][ ]
- /// [ ][ B][ ][ ][ ]
- /// 3. [ ][ E][XX][XX][XX]
- /// [XX][XB][ ][ ][ ]
+ /// 2. [ ][ B][ ][ ][ ]
+ /// [ ][ ][ ][ ][ ]
+ /// 3. [ ][ B][XX][XX][XX]
+ /// [XX][XE][ ][ ][ ]
#[test]
fn across_adjacent_lines_upward_final_cell_exclusive() {
let mut selection = Selection::simple(Point::new(1, Column(1)), Side::Right);
@@ -487,8 +488,8 @@ mod test {
assert_eq!(selection.to_span(&Dimensions::new(2, 5)).unwrap(), Span {
cols: Column(5),
front: Point::new(0, Column(1)),
- tail: Point::new(1, Column(1)),
- ty: SpanType::ExcludeFront
+ tail: Point::new(1, Column(2)),
+ ty: SpanType::Inclusive,
});
}
@@ -497,12 +498,12 @@ mod test {
///
/// 1. [ ][ ][ ][ ][ ]
/// [ ][ ][ ][ ][ ]
- /// 2. [ ][ B][ ][ ][ ]
- /// [ ][ ][ ][ ][ ]
- /// 3. [ ][ B][XX][XX][XX]
- /// [XX][XE][ ][ ][ ]
- /// 4. [ ][ B][XX][XX][XX]
- /// [XE][ ][ ][ ][ ]
+ /// 2. [ ][ ][ ][ ][ ]
+ /// [ ][ B][ ][ ][ ]
+ /// 3. [ ][ E][XX][XX][XX]
+ /// [XX][XB][ ][ ][ ]
+ /// 4. [ E][XX][XX][XX][XX]
+ /// [XX][XB][ ][ ][ ]
#[test]
fn selection_bigger_then_smaller() {
let mut selection = Selection::simple(Point::new(0, Column(1)), Side::Right);
@@ -512,8 +513,8 @@ mod test {
assert_eq!(selection.to_span(&Dimensions::new(2, 5)).unwrap(), Span {
cols: Column(5),
front: Point::new(0, Column(1)),
- tail: Point::new(1, Column(0)),
- ty: SpanType::ExcludeFront
+ tail: Point::new(1, Column(1)),
+ ty: SpanType::Inclusive,
});
}
}