editor: When expanding first excerpt up, scroll it into view (#41445)

Before

https://github.com/user-attachments/assets/2390e924-112a-43fa-8ab8-429a55456d12

After

https://github.com/user-attachments/assets/b47c95f0-ccd9-40a6-ab04-28295158102e

Release Notes:

- Fixed an issue where expanding the first excerpt upwards would expand
it out of view
This commit is contained in:
Lukas Wirth
2025-10-29 10:32:42 +00:00
committed by GitHub
parent 8725a2d166
commit 6fa823417f
+18 -5
View File
@@ -15845,7 +15845,7 @@ impl Editor {
) {
let current_scroll_position = self.scroll_position(cx);
let lines_to_expand = EditorSettings::get_global(cx).expand_excerpt_lines;
let mut should_scroll_up = false;
let mut scroll = None;
if direction == ExpandExcerptDirection::Down {
let multi_buffer = self.buffer.read(cx);
@@ -15858,17 +15858,30 @@ impl Editor {
let excerpt_end_row = Point::from_anchor(&excerpt_range.end, &buffer_snapshot).row;
let last_row = buffer_snapshot.max_point().row;
let lines_below = last_row.saturating_sub(excerpt_end_row);
should_scroll_up = lines_below >= lines_to_expand;
if lines_below >= lines_to_expand {
scroll = Some(
current_scroll_position
+ gpui::Point::new(0.0, lines_to_expand as ScrollOffset),
);
}
}
}
if direction == ExpandExcerptDirection::Up
&& self
.buffer
.read(cx)
.snapshot(cx)
.excerpt_before(excerpt)
.is_none()
{
scroll = Some(current_scroll_position);
}
self.buffer.update(cx, |buffer, cx| {
buffer.expand_excerpts([excerpt], lines_to_expand, direction, cx)
});
if should_scroll_up {
let new_scroll_position =
current_scroll_position + gpui::Point::new(0.0, lines_to_expand as ScrollOffset);
if let Some(new_scroll_position) = scroll {
self.set_scroll_position(new_scroll_position, window, cx);
}
}