mirror of
https://github.com/zed-industries/zed.git
synced 2024-11-08 07:35:01 +03:00
Make versions oldest_selection and newest_selection that don't require snapshots
I thought I needed this but actually didn't, but I still kinda think it's a good change for the public interface of Editor.
This commit is contained in:
parent
19b5de2181
commit
7ef98fb935
@ -1061,7 +1061,8 @@ impl Editor {
|
|||||||
first_cursor_top = highlighted_rows.start as f32;
|
first_cursor_top = highlighted_rows.start as f32;
|
||||||
last_cursor_bottom = first_cursor_top + 1.;
|
last_cursor_bottom = first_cursor_top + 1.;
|
||||||
} else if autoscroll == Autoscroll::Newest {
|
} else if autoscroll == Autoscroll::Newest {
|
||||||
let newest_selection = self.newest_selection::<Point>(&display_map.buffer_snapshot);
|
let newest_selection =
|
||||||
|
self.newest_selection_with_snapshot::<Point>(&display_map.buffer_snapshot);
|
||||||
first_cursor_top = newest_selection.head().to_display_point(&display_map).row() as f32;
|
first_cursor_top = newest_selection.head().to_display_point(&display_map).row() as f32;
|
||||||
last_cursor_bottom = first_cursor_top + 1.;
|
last_cursor_bottom = first_cursor_top + 1.;
|
||||||
} else {
|
} else {
|
||||||
@ -1208,7 +1209,7 @@ impl Editor {
|
|||||||
) {
|
) {
|
||||||
let display_map = self.display_map.update(cx, |map, cx| map.snapshot(cx));
|
let display_map = self.display_map.update(cx, |map, cx| map.snapshot(cx));
|
||||||
let tail = self
|
let tail = self
|
||||||
.newest_selection::<usize>(&display_map.buffer_snapshot)
|
.newest_selection_with_snapshot::<usize>(&display_map.buffer_snapshot)
|
||||||
.tail();
|
.tail();
|
||||||
self.begin_selection(position, false, click_count, cx);
|
self.begin_selection(position, false, click_count, cx);
|
||||||
|
|
||||||
@ -1328,7 +1329,7 @@ impl Editor {
|
|||||||
|
|
||||||
let display_map = self.display_map.update(cx, |map, cx| map.snapshot(cx));
|
let display_map = self.display_map.update(cx, |map, cx| map.snapshot(cx));
|
||||||
let tail = self
|
let tail = self
|
||||||
.newest_selection::<Point>(&display_map.buffer_snapshot)
|
.newest_selection_with_snapshot::<Point>(&display_map.buffer_snapshot)
|
||||||
.tail();
|
.tail();
|
||||||
self.columnar_selection_tail = Some(display_map.buffer_snapshot.anchor_before(tail));
|
self.columnar_selection_tail = Some(display_map.buffer_snapshot.anchor_before(tail));
|
||||||
|
|
||||||
@ -1514,8 +1515,7 @@ impl Editor {
|
|||||||
self.set_selections(selections, None, cx);
|
self.set_selections(selections, None, cx);
|
||||||
self.request_autoscroll(Autoscroll::Fit, cx);
|
self.request_autoscroll(Autoscroll::Fit, cx);
|
||||||
} else {
|
} else {
|
||||||
let buffer = self.buffer.read(cx).snapshot(cx);
|
let mut oldest_selection = self.oldest_selection::<usize>(&cx);
|
||||||
let mut oldest_selection = self.oldest_selection::<usize>(&buffer);
|
|
||||||
if self.selection_count() == 1 {
|
if self.selection_count() == 1 {
|
||||||
if oldest_selection.is_empty() {
|
if oldest_selection.is_empty() {
|
||||||
cx.propagate_action();
|
cx.propagate_action();
|
||||||
@ -4086,7 +4086,7 @@ impl Editor {
|
|||||||
|
|
||||||
pub fn show_next_diagnostic(&mut self, _: &ShowNextDiagnostic, cx: &mut ViewContext<Self>) {
|
pub fn show_next_diagnostic(&mut self, _: &ShowNextDiagnostic, cx: &mut ViewContext<Self>) {
|
||||||
let buffer = self.buffer.read(cx).snapshot(cx);
|
let buffer = self.buffer.read(cx).snapshot(cx);
|
||||||
let selection = self.newest_selection::<usize>(&buffer);
|
let selection = self.newest_selection_with_snapshot::<usize>(&buffer);
|
||||||
let mut active_primary_range = self.active_diagnostics.as_ref().map(|active_diagnostics| {
|
let mut active_primary_range = self.active_diagnostics.as_ref().map(|active_diagnostics| {
|
||||||
active_diagnostics
|
active_diagnostics
|
||||||
.primary_range
|
.primary_range
|
||||||
@ -4158,8 +4158,7 @@ impl Editor {
|
|||||||
};
|
};
|
||||||
|
|
||||||
let editor = editor_handle.read(cx);
|
let editor = editor_handle.read(cx);
|
||||||
let buffer = editor.buffer.read(cx);
|
let head = editor.newest_selection::<usize>(cx).head();
|
||||||
let head = editor.newest_selection::<usize>(&buffer.read(cx)).head();
|
|
||||||
let (buffer, head) =
|
let (buffer, head) =
|
||||||
if let Some(text_anchor) = editor.buffer.read(cx).text_anchor_for_position(head, cx) {
|
if let Some(text_anchor) = editor.buffer.read(cx).text_anchor_for_position(head, cx) {
|
||||||
text_anchor
|
text_anchor
|
||||||
@ -4207,8 +4206,7 @@ impl Editor {
|
|||||||
let editor_handle = active_item.act_as::<Self>(cx)?;
|
let editor_handle = active_item.act_as::<Self>(cx)?;
|
||||||
|
|
||||||
let editor = editor_handle.read(cx);
|
let editor = editor_handle.read(cx);
|
||||||
let buffer = editor.buffer.read(cx);
|
let head = editor.newest_selection::<usize>(cx).head();
|
||||||
let head = editor.newest_selection::<usize>(&buffer.read(cx)).head();
|
|
||||||
let (buffer, head) = editor.buffer.read(cx).text_anchor_for_position(head, cx)?;
|
let (buffer, head) = editor.buffer.read(cx).text_anchor_for_position(head, cx)?;
|
||||||
let replica_id = editor.replica_id(cx);
|
let replica_id = editor.replica_id(cx);
|
||||||
|
|
||||||
@ -4432,12 +4430,11 @@ impl Editor {
|
|||||||
self.clear_highlighted_ranges::<Rename>(cx);
|
self.clear_highlighted_ranges::<Rename>(cx);
|
||||||
|
|
||||||
let editor = rename.editor.read(cx);
|
let editor = rename.editor.read(cx);
|
||||||
let buffer = editor.buffer.read(cx).snapshot(cx);
|
let snapshot = self.buffer.read(cx).snapshot(cx);
|
||||||
let selection = editor.newest_selection::<usize>(&buffer);
|
let selection = editor.newest_selection_with_snapshot::<usize>(&snapshot);
|
||||||
|
|
||||||
// Update the selection to match the position of the selection inside
|
// Update the selection to match the position of the selection inside
|
||||||
// the rename editor.
|
// the rename editor.
|
||||||
let snapshot = self.buffer.read(cx).snapshot(cx);
|
|
||||||
let rename_range = rename.range.to_offset(&snapshot);
|
let rename_range = rename.range.to_offset(&snapshot);
|
||||||
let start = snapshot
|
let start = snapshot
|
||||||
.clip_offset(rename_range.start + selection.start, Bias::Left)
|
.clip_offset(rename_range.start + selection.start, Bias::Left)
|
||||||
@ -4748,17 +4745,28 @@ impl Editor {
|
|||||||
|
|
||||||
pub fn oldest_selection<D: TextDimension + Ord + Sub<D, Output = D>>(
|
pub fn oldest_selection<D: TextDimension + Ord + Sub<D, Output = D>>(
|
||||||
&self,
|
&self,
|
||||||
snapshot: &MultiBufferSnapshot,
|
cx: &AppContext,
|
||||||
) -> Selection<D> {
|
) -> Selection<D> {
|
||||||
|
let snapshot = self.buffer.read(cx).read(cx);
|
||||||
self.selections
|
self.selections
|
||||||
.iter()
|
.iter()
|
||||||
.min_by_key(|s| s.id)
|
.min_by_key(|s| s.id)
|
||||||
.map(|selection| self.resolve_selection(selection, snapshot))
|
.map(|selection| self.resolve_selection(selection, &snapshot))
|
||||||
.or_else(|| self.pending_selection(snapshot))
|
.or_else(|| self.pending_selection(&snapshot))
|
||||||
.unwrap()
|
.unwrap()
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn newest_selection<D: TextDimension + Ord + Sub<D, Output = D>>(
|
pub fn newest_selection<D: TextDimension + Ord + Sub<D, Output = D>>(
|
||||||
|
&self,
|
||||||
|
cx: &AppContext,
|
||||||
|
) -> Selection<D> {
|
||||||
|
self.resolve_selection(
|
||||||
|
self.newest_anchor_selection(),
|
||||||
|
&self.buffer.read(cx).read(cx),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn newest_selection_with_snapshot<D: TextDimension + Ord + Sub<D, Output = D>>(
|
||||||
&self,
|
&self,
|
||||||
snapshot: &MultiBufferSnapshot,
|
snapshot: &MultiBufferSnapshot,
|
||||||
) -> Selection<D> {
|
) -> Selection<D> {
|
||||||
|
@ -951,7 +951,7 @@ impl Element for EditorElement {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let newest_selection_head = view
|
let newest_selection_head = view
|
||||||
.newest_selection::<usize>(&snapshot.buffer_snapshot)
|
.newest_selection_with_snapshot::<usize>(&snapshot.buffer_snapshot)
|
||||||
.head()
|
.head()
|
||||||
.to_display_point(&snapshot);
|
.to_display_point(&snapshot);
|
||||||
|
|
||||||
|
@ -382,7 +382,9 @@ impl DiagnosticMessage {
|
|||||||
fn update(&mut self, editor: ViewHandle<Editor>, cx: &mut ViewContext<Self>) {
|
fn update(&mut self, editor: ViewHandle<Editor>, cx: &mut ViewContext<Self>) {
|
||||||
let editor = editor.read(cx);
|
let editor = editor.read(cx);
|
||||||
let buffer = editor.buffer().read(cx);
|
let buffer = editor.buffer().read(cx);
|
||||||
let cursor_position = editor.newest_selection::<usize>(&buffer.read(cx)).head();
|
let cursor_position = editor
|
||||||
|
.newest_selection_with_snapshot::<usize>(&buffer.read(cx))
|
||||||
|
.head();
|
||||||
let new_diagnostic = buffer
|
let new_diagnostic = buffer
|
||||||
.read(cx)
|
.read(cx)
|
||||||
.diagnostics_in_range::<_, usize>(cursor_position..cursor_position)
|
.diagnostics_in_range::<_, usize>(cursor_position..cursor_position)
|
||||||
|
@ -54,7 +54,7 @@ impl GoToLine {
|
|||||||
let buffer = editor.buffer().read(cx).read(cx);
|
let buffer = editor.buffer().read(cx).read(cx);
|
||||||
(
|
(
|
||||||
Some(scroll_position),
|
Some(scroll_position),
|
||||||
editor.newest_selection(&buffer).head(),
|
editor.newest_selection_with_snapshot(&buffer).head(),
|
||||||
buffer.max_point(),
|
buffer.max_point(),
|
||||||
)
|
)
|
||||||
});
|
});
|
||||||
|
@ -259,7 +259,9 @@ impl OutlineView {
|
|||||||
|
|
||||||
let editor = self.active_editor.read(cx);
|
let editor = self.active_editor.read(cx);
|
||||||
let buffer = editor.buffer().read(cx).read(cx);
|
let buffer = editor.buffer().read(cx).read(cx);
|
||||||
let cursor_offset = editor.newest_selection::<usize>(&buffer).head();
|
let cursor_offset = editor
|
||||||
|
.newest_selection_with_snapshot::<usize>(&buffer)
|
||||||
|
.head();
|
||||||
selected_index = self
|
selected_index = self
|
||||||
.outline
|
.outline
|
||||||
.items
|
.items
|
||||||
|
@ -270,7 +270,7 @@ impl SearchBar {
|
|||||||
.display_snapshot;
|
.display_snapshot;
|
||||||
let selection = editor
|
let selection = editor
|
||||||
.read(cx)
|
.read(cx)
|
||||||
.newest_selection::<usize>(&display_map.buffer_snapshot);
|
.newest_selection_with_snapshot::<usize>(&display_map.buffer_snapshot);
|
||||||
|
|
||||||
let mut text: String;
|
let mut text: String;
|
||||||
if selection.start == selection.end {
|
if selection.start == selection.end {
|
||||||
|
Loading…
Reference in New Issue
Block a user