fix: synchronize horizontal scrolling between diff panes
This commit is contained in:
+14
-4
@@ -615,6 +615,11 @@ impl DiffState {
|
||||
Focus::After => self.max_after,
|
||||
Focus::Files => return 0,
|
||||
};
|
||||
let columns = if self.pane_layout() == PaneLayout::Split {
|
||||
self.max_before.max(self.max_after)
|
||||
} else {
|
||||
columns
|
||||
};
|
||||
left.min(columns.saturating_add(1).saturating_sub(width.max(1)))
|
||||
}
|
||||
|
||||
@@ -630,10 +635,15 @@ impl DiffState {
|
||||
left.saturating_sub(3)
|
||||
};
|
||||
let left = self.bound_horizontal(focus, left, width);
|
||||
match focus {
|
||||
Focus::Before => self.left_before = left,
|
||||
Focus::After => self.left_after = left,
|
||||
Focus::Files => unreachable!(),
|
||||
if self.pane_layout() == PaneLayout::Split {
|
||||
self.left_before = left;
|
||||
self.left_after = left;
|
||||
} else {
|
||||
match focus {
|
||||
Focus::Before => self.left_before = left,
|
||||
Focus::After => self.left_after = left,
|
||||
Focus::Files => unreachable!(),
|
||||
}
|
||||
}
|
||||
self.follow_caret = false;
|
||||
}
|
||||
|
||||
+4
-4
@@ -4317,16 +4317,16 @@ mod tests {
|
||||
.unwrap();
|
||||
assert!(screen_text(&terminal).contains("ore.before."));
|
||||
assert_eq!(session.editor().diff().unwrap().left_before, 3);
|
||||
assert_eq!(session.editor().diff().unwrap().left_after, 0);
|
||||
assert_eq!(session.editor().diff().unwrap().left_after, 3);
|
||||
let mut shift = document_wheel(MouseEventKind::ScrollDown, after.x + 1, after.y + 1);
|
||||
shift.modifiers = KeyModifiers::SHIFT;
|
||||
assert!(viewports.scroll(&mut session, shift));
|
||||
terminal
|
||||
.draw(|frame| viewports.draw_session(frame, &mut session))
|
||||
.unwrap();
|
||||
assert!(screen_text(&terminal).contains("er.after."));
|
||||
assert_eq!(session.editor().diff().unwrap().left_before, 3);
|
||||
assert_eq!(session.editor().diff().unwrap().left_after, 3);
|
||||
assert!(screen_text(&terminal).contains("after.after."));
|
||||
assert_eq!(session.editor().diff().unwrap().left_before, 6);
|
||||
assert_eq!(session.editor().diff().unwrap().left_after, 6);
|
||||
assert_eq!(session.editor().diff().unwrap().top, 0);
|
||||
assert_eq!(session.editor().diff().unwrap().focus, initial_focus);
|
||||
assert_eq!(session.editor().cursor(), initial_cursor);
|
||||
|
||||
Reference in New Issue
Block a user