Fix jumping to multibuffer excerpts from deleted hunks (#25512)
Co-authored-by: Anthony Eid <hello@anthonyeid.me> Release Notes: - N/A Co-authored-by: Anthony Eid <hello@anthonyeid.me>
This commit is contained in:
parent
53a5145dc8
commit
63cfcc26fb
1 changed files with 30 additions and 18 deletions
|
@ -15340,27 +15340,39 @@ impl Editor {
|
||||||
let selections = self.selections.all::<usize>(cx);
|
let selections = self.selections.all::<usize>(cx);
|
||||||
let multi_buffer = self.buffer.read(cx);
|
let multi_buffer = self.buffer.read(cx);
|
||||||
for selection in selections {
|
for selection in selections {
|
||||||
for (buffer, mut range, _) in multi_buffer
|
for (snapshot, range, _, anchor) in multi_buffer
|
||||||
.snapshot(cx)
|
.snapshot(cx)
|
||||||
.range_to_buffer_ranges(selection.range())
|
.range_to_buffer_ranges_with_deleted_hunks(selection.range())
|
||||||
{
|
{
|
||||||
// When editing branch buffers, jump to the corresponding location
|
if let Some(anchor) = anchor {
|
||||||
// in their base buffer.
|
// selection is in a deleted hunk
|
||||||
let mut buffer_handle = multi_buffer.buffer(buffer.remote_id()).unwrap();
|
let Some(buffer_id) = anchor.buffer_id else {
|
||||||
let buffer = buffer_handle.read(cx);
|
continue;
|
||||||
if let Some(base_buffer) = buffer.base_buffer() {
|
};
|
||||||
range = buffer.range_to_version(range, &base_buffer.read(cx).version());
|
let Some(buffer_handle) = multi_buffer.buffer(buffer_id) else {
|
||||||
buffer_handle = base_buffer;
|
continue;
|
||||||
}
|
};
|
||||||
|
let offset = text::ToOffset::to_offset(
|
||||||
if selection.reversed {
|
&anchor.text_anchor,
|
||||||
mem::swap(&mut range.start, &mut range.end);
|
&buffer_handle.read(cx).snapshot(),
|
||||||
}
|
);
|
||||||
|
let range = offset..offset;
|
||||||
new_selections_by_buffer
|
new_selections_by_buffer
|
||||||
.entry(buffer_handle)
|
.entry(buffer_handle)
|
||||||
.or_insert((Vec::new(), None))
|
.or_insert((Vec::new(), None))
|
||||||
.0
|
.0
|
||||||
.push(range)
|
.push(range)
|
||||||
|
} else {
|
||||||
|
let Some(buffer_handle) = multi_buffer.buffer(snapshot.remote_id())
|
||||||
|
else {
|
||||||
|
continue;
|
||||||
|
};
|
||||||
|
new_selections_by_buffer
|
||||||
|
.entry(buffer_handle)
|
||||||
|
.or_insert((Vec::new(), None))
|
||||||
|
.0
|
||||||
|
.push(range)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue