editor: Preserve scroll position when jumping from multibuffer (#9921)
This is a best-effort attempt, as the target offset from the top is just an estimate; furthermore, this does not account for things like project search header (which adds a bit of vertical offset by itself and is removed once we jump into a buffer), but it still should improve the situation quite a bit. Fixes: #5296 Release Notes: - Improved target selection when jumping from multibuffer; final position in the buffer should more closely match the original position of the cursor in the multibuffer.
This commit is contained in:
parent
7f54935324
commit
fcaf4383e9
3 changed files with 44 additions and 7 deletions
|
@ -32,6 +32,10 @@ impl Autoscroll {
|
|||
pub fn focused() -> Self {
|
||||
Self::Strategy(AutoscrollStrategy::Focused)
|
||||
}
|
||||
/// Scrolls so that the newest cursor is roughly an n-th line from the top.
|
||||
pub fn top_relative(n: usize) -> Self {
|
||||
Self::Strategy(AutoscrollStrategy::TopRelative(n))
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(PartialEq, Eq, Default, Clone, Copy)]
|
||||
|
@ -43,6 +47,7 @@ pub enum AutoscrollStrategy {
|
|||
Focused,
|
||||
Top,
|
||||
Bottom,
|
||||
TopRelative(usize),
|
||||
}
|
||||
|
||||
impl AutoscrollStrategy {
|
||||
|
@ -178,6 +183,10 @@ impl Editor {
|
|||
scroll_position.y = (target_bottom - visible_lines).max(0.0);
|
||||
self.set_scroll_position_internal(scroll_position, local, true, cx);
|
||||
}
|
||||
AutoscrollStrategy::TopRelative(lines) => {
|
||||
scroll_position.y = target_top - lines as f32;
|
||||
self.set_scroll_position_internal(scroll_position, local, true, cx);
|
||||
}
|
||||
}
|
||||
|
||||
self.scroll_manager.last_autoscroll = Some((
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue