mirror of
https://github.com/zed-industries/zed.git
synced 2024-09-18 18:08:07 +03:00
Fix movement across soft wrap boundaries
Co-Authored-By: Antonio Scandurra <me@as-cii.com>
This commit is contained in:
parent
c779633154
commit
492a09f1be
@ -308,7 +308,7 @@ impl Point {
|
|||||||
pub fn to_display_point(self, map: &DisplayMapSnapshot, bias: Bias) -> DisplayPoint {
|
pub fn to_display_point(self, map: &DisplayMapSnapshot, bias: Bias) -> DisplayPoint {
|
||||||
let fold_point = self.to_fold_point(&map.folds_snapshot, bias);
|
let fold_point = self.to_fold_point(&map.folds_snapshot, bias);
|
||||||
let tab_point = map.tabs_snapshot.to_tab_point(fold_point);
|
let tab_point = map.tabs_snapshot.to_tab_point(fold_point);
|
||||||
let wrap_point = map.wraps_snapshot.to_wrap_point(tab_point, bias);
|
let wrap_point = map.wraps_snapshot.to_wrap_point(tab_point);
|
||||||
DisplayPoint(wrap_point)
|
DisplayPoint(wrap_point)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -495,7 +495,7 @@ impl Snapshot {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn max_point(&self) -> WrapPoint {
|
pub fn max_point(&self) -> WrapPoint {
|
||||||
self.to_wrap_point(self.tab_snapshot.max_point(), Bias::Right)
|
self.to_wrap_point(self.tab_snapshot.max_point())
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn line_len(&self, row: u32) -> u32 {
|
pub fn line_len(&self, row: u32) -> u32 {
|
||||||
@ -548,9 +548,9 @@ impl Snapshot {
|
|||||||
TabPoint(tab_point)
|
TabPoint(tab_point)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn to_wrap_point(&self, point: TabPoint, bias: Bias) -> WrapPoint {
|
pub fn to_wrap_point(&self, point: TabPoint) -> WrapPoint {
|
||||||
let mut cursor = self.transforms.cursor::<TabPoint, WrapPoint>();
|
let mut cursor = self.transforms.cursor::<TabPoint, WrapPoint>();
|
||||||
cursor.seek(&point, bias, &());
|
cursor.seek(&point, Bias::Right, &());
|
||||||
WrapPoint(cursor.sum_start().0 + (point.0 - cursor.seek_start().0))
|
WrapPoint(cursor.sum_start().0 + (point.0 - cursor.seek_start().0))
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -564,10 +564,7 @@ impl Snapshot {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
self.to_wrap_point(
|
self.to_wrap_point(self.tab_snapshot.clip_point(self.to_tab_point(point), bias))
|
||||||
self.tab_snapshot.clip_point(self.to_tab_point(point), bias),
|
|
||||||
bias,
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn check_invariants(&self) {
|
fn check_invariants(&self) {
|
||||||
|
@ -40,8 +40,14 @@ pub fn up(
|
|||||||
point = DisplayPoint::new(0, 0);
|
point = DisplayPoint::new(0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let clip_bias = if point.column() == map.line_len(point.row()) {
|
||||||
|
Bias::Left
|
||||||
|
} else {
|
||||||
|
Bias::Right
|
||||||
|
};
|
||||||
|
|
||||||
Ok((
|
Ok((
|
||||||
map.clip_point(point, Bias::Left),
|
map.clip_point(point, clip_bias),
|
||||||
SelectionGoal::Column(goal_column),
|
SelectionGoal::Column(goal_column),
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
@ -65,8 +71,14 @@ pub fn down(
|
|||||||
point = max_point;
|
point = max_point;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let clip_bias = if point.column() == map.line_len(point.row()) {
|
||||||
|
Bias::Left
|
||||||
|
} else {
|
||||||
|
Bias::Right
|
||||||
|
};
|
||||||
|
|
||||||
Ok((
|
Ok((
|
||||||
map.clip_point(point, Bias::Left),
|
map.clip_point(point, clip_bias),
|
||||||
SelectionGoal::Column(goal_column),
|
SelectionGoal::Column(goal_column),
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user