mirror of
https://github.com/zed-industries/zed.git
synced 2025-01-25 03:16:01 +00:00
Fix opening excerpt when the cursor is at the end of a multi-buffer (#2522)
Fixes https://linear.app/zed-industries/issue/Z-987/option-enter-doesnt-open-buffer-from-multibuffer-if-on-the-last-line This was caused by seeking with a right bias, which in the case of the last excerpt in the buffer would seek past the end of the buffer. This commit changes the behavior to move the cursor back to the previous excerpt if we overshoot, to ensure we always land on an excerpt. Release Notes: - Fixed a bug that prevented opening excerpts when the cursor was at the end of a multi-buffer.
This commit is contained in:
commit
7534c4e670
1 changed files with 9 additions and 2 deletions
|
@ -1140,6 +1140,10 @@ impl MultiBuffer {
|
|||
let mut result = Vec::new();
|
||||
let mut cursor = snapshot.excerpts.cursor::<usize>();
|
||||
cursor.seek(&start, Bias::Right, &());
|
||||
if cursor.item().is_none() {
|
||||
cursor.prev(&());
|
||||
}
|
||||
|
||||
while let Some(excerpt) = cursor.item() {
|
||||
if *cursor.start() > end {
|
||||
break;
|
||||
|
@ -5072,16 +5076,19 @@ mod tests {
|
|||
.read(cx)
|
||||
.range_to_buffer_ranges(start_ix..end_ix, cx);
|
||||
let excerpted_buffers_text = excerpted_buffer_ranges
|
||||
.into_iter()
|
||||
.iter()
|
||||
.map(|(buffer, buffer_range)| {
|
||||
buffer
|
||||
.read(cx)
|
||||
.text_for_range(buffer_range)
|
||||
.text_for_range(buffer_range.clone())
|
||||
.collect::<String>()
|
||||
})
|
||||
.collect::<Vec<_>>()
|
||||
.join("\n");
|
||||
assert_eq!(excerpted_buffers_text, text_for_range);
|
||||
if !expected_excerpts.is_empty() {
|
||||
assert!(!excerpted_buffer_ranges.is_empty());
|
||||
}
|
||||
|
||||
let expected_summary = TextSummary::from(&expected_text[start_ix..end_ix]);
|
||||
assert_eq!(
|
||||
|
|
Loading…
Reference in a new issue