Detailed changes
@@ -660,7 +660,6 @@ impl InlineAssistant {
height: Some(prompt_editor_height),
render: build_assist_editor_renderer(prompt_editor),
priority: 0,
- render_in_minimap: false,
},
BlockProperties {
style: BlockStyle::Sticky,
@@ -675,7 +674,6 @@ impl InlineAssistant {
.into_any_element()
}),
priority: 0,
- render_in_minimap: false,
},
];
@@ -1451,7 +1449,6 @@ impl InlineAssistant {
.into_any_element()
}),
priority: 0,
- render_in_minimap: false,
});
}
@@ -1256,7 +1256,6 @@ impl TextThreadEditor {
),
priority: usize::MAX,
render: render_block(MessageMetadata::from(message)),
- render_in_minimap: false,
};
let mut new_blocks = vec![];
let mut block_index_to_message = vec![];
@@ -1858,7 +1857,6 @@ impl TextThreadEditor {
.into_any_element()
}),
priority: 0,
- render_in_minimap: false,
})
})
.collect::<Vec<_>>();
@@ -144,7 +144,6 @@ impl editor::DiagnosticRenderer for DiagnosticRenderer {
style: BlockStyle::Flex,
render: Arc::new(move |bcx| block.render_block(editor.clone(), bcx)),
priority: 1,
- render_in_minimap: false,
}
})
.collect()
@@ -656,7 +656,6 @@ impl ProjectDiagnosticsEditor {
block.render_block(editor.clone(), bcx)
}),
priority: 1,
- render_in_minimap: false,
}
});
let block_ids = this.editor.update(cx, |editor, cx| {
@@ -271,7 +271,6 @@ impl DisplayMap {
height: Some(height),
style,
priority,
- render_in_minimap: true,
}
}),
);
@@ -1663,7 +1662,6 @@ pub mod tests {
height: Some(height),
render: Arc::new(|_| div().into_any()),
priority,
- render_in_minimap: true,
}
})
.collect::<Vec<_>>();
@@ -2029,7 +2027,6 @@ pub mod tests {
style: BlockStyle::Sticky,
render: Arc::new(|_| div().into_any()),
priority: 0,
- render_in_minimap: true,
}],
cx,
);
@@ -2227,7 +2224,6 @@ pub mod tests {
style: BlockStyle::Sticky,
render: Arc::new(|_| div().into_any()),
priority: 0,
- render_in_minimap: true,
},
BlockProperties {
placement: BlockPlacement::Below(
@@ -2237,7 +2233,6 @@ pub mod tests {
style: BlockStyle::Sticky,
render: Arc::new(|_| div().into_any()),
priority: 0,
- render_in_minimap: true,
},
],
cx,
@@ -2344,7 +2339,6 @@ pub mod tests {
style: BlockStyle::Sticky,
render: Arc::new(|_| div().into_any()),
priority: 0,
- render_in_minimap: true,
}],
cx,
)
@@ -2420,7 +2414,6 @@ pub mod tests {
style: BlockStyle::Fixed,
render: Arc::new(|_| div().into_any()),
priority: 0,
- render_in_minimap: true,
}],
cx,
);
@@ -193,7 +193,6 @@ pub struct CustomBlock {
style: BlockStyle,
render: Arc<Mutex<RenderBlock>>,
priority: usize,
- pub(crate) render_in_minimap: bool,
}
#[derive(Clone)]
@@ -205,7 +204,6 @@ pub struct BlockProperties<P> {
pub style: BlockStyle,
pub render: RenderBlock,
pub priority: usize,
- pub render_in_minimap: bool,
}
impl<P: Debug> Debug for BlockProperties<P> {
@@ -1044,7 +1042,6 @@ impl BlockMapWriter<'_> {
render: Arc::new(Mutex::new(block.render)),
style: block.style,
priority: block.priority,
- render_in_minimap: block.render_in_minimap,
});
self.0.custom_blocks.insert(block_ix, new_block.clone());
self.0.custom_blocks_by_id.insert(id, new_block);
@@ -1079,7 +1076,6 @@ impl BlockMapWriter<'_> {
style: block.style,
render: block.render.clone(),
priority: block.priority,
- render_in_minimap: block.render_in_minimap,
};
let new_block = Arc::new(new_block);
*block = new_block.clone();
@@ -1976,7 +1972,6 @@ mod tests {
height: Some(1),
render: Arc::new(|_| div().into_any()),
priority: 0,
- render_in_minimap: true,
},
BlockProperties {
style: BlockStyle::Fixed,
@@ -1984,7 +1979,6 @@ mod tests {
height: Some(2),
render: Arc::new(|_| div().into_any()),
priority: 0,
- render_in_minimap: true,
},
BlockProperties {
style: BlockStyle::Fixed,
@@ -1992,7 +1986,6 @@ mod tests {
height: Some(3),
render: Arc::new(|_| div().into_any()),
priority: 0,
- render_in_minimap: true,
},
]);
@@ -2217,7 +2210,6 @@ mod tests {
height: Some(1),
render: Arc::new(|_| div().into_any()),
priority: 0,
- render_in_minimap: true,
},
BlockProperties {
style: BlockStyle::Fixed,
@@ -2225,7 +2217,6 @@ mod tests {
height: Some(2),
render: Arc::new(|_| div().into_any()),
priority: 0,
- render_in_minimap: true,
},
BlockProperties {
style: BlockStyle::Fixed,
@@ -2233,7 +2224,6 @@ mod tests {
height: Some(3),
render: Arc::new(|_| div().into_any()),
priority: 0,
- render_in_minimap: true,
},
]);
@@ -2322,7 +2312,6 @@ mod tests {
render: Arc::new(|_| div().into_any()),
height: Some(1),
priority: 0,
- render_in_minimap: true,
},
BlockProperties {
style: BlockStyle::Fixed,
@@ -2330,7 +2319,6 @@ mod tests {
render: Arc::new(|_| div().into_any()),
height: Some(1),
priority: 0,
- render_in_minimap: true,
},
]);
@@ -2370,7 +2358,6 @@ mod tests {
height: Some(4),
render: Arc::new(|_| div().into_any()),
priority: 0,
- render_in_minimap: true,
}])[0];
let blocks_snapshot = block_map.read(wraps_snapshot, Default::default());
@@ -2424,7 +2411,6 @@ mod tests {
height: Some(1),
render: Arc::new(|_| div().into_any()),
priority: 0,
- render_in_minimap: true,
},
BlockProperties {
style: BlockStyle::Fixed,
@@ -2432,7 +2418,6 @@ mod tests {
height: Some(1),
render: Arc::new(|_| div().into_any()),
priority: 0,
- render_in_minimap: true,
},
BlockProperties {
style: BlockStyle::Fixed,
@@ -2440,7 +2425,6 @@ mod tests {
height: Some(1),
render: Arc::new(|_| div().into_any()),
priority: 0,
- render_in_minimap: true,
},
]);
let blocks_snapshot = block_map.read(wraps_snapshot.clone(), Default::default());
@@ -2455,7 +2439,6 @@ mod tests {
height: Some(1),
render: Arc::new(|_| div().into_any()),
priority: 0,
- render_in_minimap: true,
},
BlockProperties {
style: BlockStyle::Fixed,
@@ -2463,7 +2446,6 @@ mod tests {
height: Some(1),
render: Arc::new(|_| div().into_any()),
priority: 0,
- render_in_minimap: true,
},
BlockProperties {
style: BlockStyle::Fixed,
@@ -2471,7 +2453,6 @@ mod tests {
height: Some(1),
render: Arc::new(|_| div().into_any()),
priority: 0,
- render_in_minimap: true,
},
]);
let blocks_snapshot = block_map.read(wraps_snapshot.clone(), Default::default());
@@ -2571,7 +2552,6 @@ mod tests {
height: Some(1),
render: Arc::new(|_| div().into_any()),
priority: 0,
- render_in_minimap: true,
},
BlockProperties {
style: BlockStyle::Fixed,
@@ -2579,7 +2559,6 @@ mod tests {
height: Some(1),
render: Arc::new(|_| div().into_any()),
priority: 0,
- render_in_minimap: true,
},
BlockProperties {
style: BlockStyle::Fixed,
@@ -2587,7 +2566,6 @@ mod tests {
height: Some(1),
render: Arc::new(|_| div().into_any()),
priority: 0,
- render_in_minimap: true,
},
]);
let excerpt_blocks_3 = writer.insert(vec![
@@ -2597,7 +2575,6 @@ mod tests {
height: Some(1),
render: Arc::new(|_| div().into_any()),
priority: 0,
- render_in_minimap: true,
},
BlockProperties {
style: BlockStyle::Fixed,
@@ -2605,7 +2582,6 @@ mod tests {
height: Some(1),
render: Arc::new(|_| div().into_any()),
priority: 0,
- render_in_minimap: true,
},
]);
@@ -2653,7 +2629,6 @@ mod tests {
height: Some(1),
render: Arc::new(|_| div().into_any()),
priority: 0,
- render_in_minimap: true,
}]);
let blocks_snapshot = block_map.read(wrap_snapshot.clone(), Patch::default());
let blocks = blocks_snapshot
@@ -3011,7 +2986,6 @@ mod tests {
height: Some(height),
render: Arc::new(|_| div().into_any()),
priority: 0,
- render_in_minimap: true,
}
})
.collect::<Vec<_>>();
@@ -3032,7 +3006,6 @@ mod tests {
style: props.style,
render: Arc::new(|_| div().into_any()),
priority: 0,
- render_in_minimap: true,
}));
for (block_properties, block_id) in block_properties.iter().zip(block_ids) {
@@ -3557,7 +3530,6 @@ mod tests {
height: Some(1),
render: Arc::new(|_| div().into_any()),
priority: 0,
- render_in_minimap: true,
}])[0];
let blocks_snapshot = block_map.read(wraps_snapshot.clone(), Default::default());
@@ -1795,6 +1795,7 @@ impl Editor {
);
let full_mode = mode.is_full();
+ let is_minimap = mode.is_minimap();
let diagnostics_max_severity = if full_mode {
EditorSettings::get_global(cx)
.diagnostics_max_severity
@@ -1855,13 +1856,19 @@ impl Editor {
let selections = SelectionsCollection::new(display_map.clone(), buffer.clone());
- let blink_manager = cx.new(|cx| BlinkManager::new(CURSOR_BLINK_INTERVAL, cx));
+ let blink_manager = cx.new(|cx| {
+ let mut blink_manager = BlinkManager::new(CURSOR_BLINK_INTERVAL, cx);
+ if is_minimap {
+ blink_manager.disable(cx);
+ }
+ blink_manager
+ });
let soft_wrap_mode_override = matches!(mode, EditorMode::SingleLine { .. })
.then(|| language_settings::SoftWrap::None);
let mut project_subscriptions = Vec::new();
- if mode.is_full() {
+ if full_mode {
if let Some(project) = project.as_ref() {
project_subscriptions.push(cx.subscribe_in(
project,
@@ -1972,18 +1979,23 @@ impl Editor {
let inlay_hint_settings =
inlay_hint_settings(selections.newest_anchor().head(), &buffer_snapshot, cx);
let focus_handle = cx.focus_handle();
- cx.on_focus(&focus_handle, window, Self::handle_focus)
- .detach();
- cx.on_focus_in(&focus_handle, window, Self::handle_focus_in)
- .detach();
- cx.on_focus_out(&focus_handle, window, Self::handle_focus_out)
- .detach();
- cx.on_blur(&focus_handle, window, Self::handle_blur)
- .detach();
- cx.observe_pending_input(window, Self::observe_pending_input)
- .detach();
-
- let show_indent_guides = if matches!(mode, EditorMode::SingleLine { .. }) {
+ if !is_minimap {
+ cx.on_focus(&focus_handle, window, Self::handle_focus)
+ .detach();
+ cx.on_focus_in(&focus_handle, window, Self::handle_focus_in)
+ .detach();
+ cx.on_focus_out(&focus_handle, window, Self::handle_focus_out)
+ .detach();
+ cx.on_blur(&focus_handle, window, Self::handle_blur)
+ .detach();
+ cx.observe_pending_input(window, Self::observe_pending_input)
+ .detach();
+ }
+
+ let show_indent_guides = if matches!(
+ mode,
+ EditorMode::SingleLine { .. } | EditorMode::Minimap { .. }
+ ) {
Some(false)
} else {
None
@@ -2049,10 +2061,10 @@ impl Editor {
minimap_visibility: MinimapVisibility::for_mode(&mode, cx),
offset_content: !matches!(mode, EditorMode::SingleLine { .. }),
show_breadcrumbs: EditorSettings::get_global(cx).toolbar.breadcrumbs,
- show_gutter: mode.is_full(),
- show_line_numbers: None,
+ show_gutter: full_mode,
+ show_line_numbers: (!full_mode).then_some(false),
use_relative_line_numbers: None,
- disable_expand_excerpt_buttons: false,
+ disable_expand_excerpt_buttons: !full_mode,
show_git_diff_gutter: None,
show_code_actions: None,
show_runnables: None,
@@ -2086,7 +2098,7 @@ impl Editor {
document_highlights_task: None,
linked_editing_range_task: None,
pending_rename: None,
- searchable: true,
+ searchable: !is_minimap,
cursor_shape: EditorSettings::get_global(cx)
.cursor_shape
.unwrap_or_default(),
@@ -2094,9 +2106,9 @@ impl Editor {
autoindent_mode: Some(AutoindentMode::EachLine),
collapse_matches: false,
workspace: None,
- input_enabled: true,
- use_modal_editing: mode.is_full(),
- read_only: mode.is_minimap(),
+ input_enabled: !is_minimap,
+ use_modal_editing: full_mode,
+ read_only: is_minimap,
use_autoclose: true,
use_auto_surround: true,
auto_replace_emoji_shortcode: false,
@@ -2112,11 +2124,10 @@ impl Editor {
edit_prediction_preview: EditPredictionPreview::Inactive {
released_too_fast: false,
},
- inline_diagnostics_enabled: mode.is_full(),
- diagnostics_enabled: mode.is_full(),
+ inline_diagnostics_enabled: full_mode,
+ diagnostics_enabled: full_mode,
inline_value_cache: InlineValueCache::new(inlay_hint_settings.show_value_hints),
inlay_hint_cache: InlayHintCache::new(inlay_hint_settings),
-
gutter_hovered: false,
pixel_position_of_newest_cursor: None,
last_bounds: None,
@@ -2139,9 +2150,10 @@ impl Editor {
show_git_blame_inline: false,
show_selection_menu: None,
show_git_blame_inline_delay_task: None,
- git_blame_inline_enabled: ProjectSettings::get_global(cx).git.inline_blame_enabled(),
+ git_blame_inline_enabled: full_mode
+ && ProjectSettings::get_global(cx).git.inline_blame_enabled(),
render_diff_hunk_controls: Arc::new(render_diff_hunk_controls),
- serialize_dirty_buffers: !mode.is_minimap()
+ serialize_dirty_buffers: !is_minimap
&& ProjectSettings::get_global(cx)
.session
.restore_unsaved_buffers,
@@ -2152,27 +2164,31 @@ impl Editor {
breakpoint_store,
gutter_breakpoint_indicator: (None, None),
hovered_diff_hunk_row: None,
- _subscriptions: vec![
- cx.observe(&buffer, Self::on_buffer_changed),
- cx.subscribe_in(&buffer, window, Self::on_buffer_event),
- cx.observe_in(&display_map, window, Self::on_display_map_changed),
- cx.observe(&blink_manager, |_, _, cx| cx.notify()),
- cx.observe_global_in::<SettingsStore>(window, Self::settings_changed),
- observe_buffer_font_size_adjustment(cx, |_, cx| cx.notify()),
- cx.observe_window_activation(window, |editor, window, cx| {
- let active = window.is_window_active();
- editor.blink_manager.update(cx, |blink_manager, cx| {
- if active {
- blink_manager.enable(cx);
- } else {
- blink_manager.disable(cx);
- }
- });
- if active {
- editor.show_mouse_cursor(cx);
- }
- }),
- ],
+ _subscriptions: (!is_minimap)
+ .then(|| {
+ vec![
+ cx.observe(&buffer, Self::on_buffer_changed),
+ cx.subscribe_in(&buffer, window, Self::on_buffer_event),
+ cx.observe_in(&display_map, window, Self::on_display_map_changed),
+ cx.observe(&blink_manager, |_, _, cx| cx.notify()),
+ cx.observe_global_in::<SettingsStore>(window, Self::settings_changed),
+ observe_buffer_font_size_adjustment(cx, |_, cx| cx.notify()),
+ cx.observe_window_activation(window, |editor, window, cx| {
+ let active = window.is_window_active();
+ editor.blink_manager.update(cx, |blink_manager, cx| {
+ if active {
+ blink_manager.enable(cx);
+ } else {
+ blink_manager.disable(cx);
+ }
+ });
+ if active {
+ editor.show_mouse_cursor(cx);
+ }
+ }),
+ ]
+ })
+ .unwrap_or_default(),
tasks_update_task: None,
pull_diagnostics_task: Task::ready(()),
colors: None,
@@ -2203,6 +2219,11 @@ impl Editor {
selection_drag_state: SelectionDragState::None,
folding_newlines: Task::ready(()),
};
+
+ if is_minimap {
+ return editor;
+ }
+
if let Some(breakpoints) = editor.breakpoint_store.as_ref() {
editor
._subscriptions
@@ -10445,7 +10466,6 @@ impl Editor {
cloned_prompt.clone().into_any_element()
}),
priority: 0,
- render_in_minimap: true,
}];
let focus_handle = bp_prompt.focus_handle(cx);
@@ -16141,7 +16161,6 @@ impl Editor {
}
}),
priority: 0,
- render_in_minimap: true,
}],
Some(Autoscroll::fit()),
cx,
@@ -18044,7 +18063,7 @@ impl Editor {
parent: cx.weak_entity(),
},
self.buffer.clone(),
- self.project.clone(),
+ None,
Some(self.display_map.clone()),
window,
cx,
@@ -19928,14 +19947,12 @@ impl Editor {
}
fn settings_changed(&mut self, window: &mut Window, cx: &mut Context<Self>) {
- let new_severity = if self.diagnostics_enabled() {
- EditorSettings::get_global(cx)
+ if self.diagnostics_enabled() {
+ let new_severity = EditorSettings::get_global(cx)
.diagnostics_max_severity
- .unwrap_or(DiagnosticSeverity::Hint)
- } else {
- DiagnosticSeverity::Off
- };
- self.set_max_diagnostics_severity(new_severity, cx);
+ .unwrap_or(DiagnosticSeverity::Hint);
+ self.set_max_diagnostics_severity(new_severity, cx);
+ }
self.tasks_update_task = Some(self.refresh_runnables(window, cx));
self.update_edit_prediction_settings(cx);
self.refresh_inline_completion(true, false, window, cx);
@@ -5081,7 +5081,6 @@ fn test_move_line_up_down_with_blocks(cx: &mut TestAppContext) {
height: Some(1),
render: Arc::new(|_| div().into_any()),
priority: 0,
- render_in_minimap: true,
}],
Some(Autoscroll::fit()),
cx,
@@ -5124,7 +5123,6 @@ async fn test_selections_and_replace_blocks(cx: &mut TestAppContext) {
style: BlockStyle::Sticky,
render: Arc::new(|_| gpui::div().into_any_element()),
priority: 0,
- render_in_minimap: true,
}],
None,
cx,
@@ -2094,16 +2094,19 @@ impl EditorElement {
window: &mut Window,
cx: &mut App,
) -> HashMap<DisplayRow, AnyElement> {
- if self.editor.read(cx).mode().is_minimap() {
- return HashMap::default();
- }
-
- let max_severity = match ProjectSettings::get_global(cx)
- .diagnostics
- .inline
- .max_severity
- .unwrap_or_else(|| self.editor.read(cx).diagnostics_max_severity)
- .into_lsp()
+ let max_severity = match self
+ .editor
+ .read(cx)
+ .inline_diagnostics_enabled()
+ .then(|| {
+ ProjectSettings::get_global(cx)
+ .diagnostics
+ .inline
+ .max_severity
+ .unwrap_or_else(|| self.editor.read(cx).diagnostics_max_severity)
+ .into_lsp()
+ })
+ .flatten()
{
Some(max_severity) => max_severity,
None => return HashMap::default(),
@@ -2619,9 +2622,6 @@ impl EditorElement {
window: &mut Window,
cx: &mut App,
) -> Option<Vec<IndentGuideLayout>> {
- if self.editor.read(cx).mode().is_minimap() {
- return None;
- }
let indent_guides = self.editor.update(cx, |editor, cx| {
editor.indent_guides(visible_buffer_range, snapshot, cx)
})?;
@@ -3085,9 +3085,9 @@ impl EditorElement {
window: &mut Window,
cx: &mut App,
) -> Arc<HashMap<MultiBufferRow, LineNumberLayout>> {
- let include_line_numbers = snapshot.show_line_numbers.unwrap_or_else(|| {
- EditorSettings::get_global(cx).gutter.line_numbers && snapshot.mode.is_full()
- });
+ let include_line_numbers = snapshot
+ .show_line_numbers
+ .unwrap_or_else(|| EditorSettings::get_global(cx).gutter.line_numbers);
if !include_line_numbers {
return Arc::default();
}
@@ -3400,22 +3400,18 @@ impl EditorElement {
div()
.size_full()
- .children(
- (!snapshot.mode.is_minimap() || custom.render_in_minimap).then(|| {
- custom.render(&mut BlockContext {
- window,
- app: cx,
- anchor_x,
- margins: editor_margins,
- line_height,
- em_width,
- block_id,
- selected,
- max_width: text_hitbox.size.width.max(*scroll_width),
- editor_style: &self.style,
- })
- }),
- )
+ .child(custom.render(&mut BlockContext {
+ window,
+ app: cx,
+ anchor_x,
+ margins: editor_margins,
+ line_height,
+ em_width,
+ block_id,
+ selected,
+ max_width: text_hitbox.size.width.max(*scroll_width),
+ editor_style: &self.style,
+ }))
.into_any()
}
@@ -6776,7 +6772,7 @@ impl EditorElement {
}
fn paint_mouse_listeners(&mut self, layout: &EditorLayout, window: &mut Window, cx: &mut App) {
- if self.editor.read(cx).mode.is_minimap() {
+ if layout.mode.is_minimap() {
return;
}
@@ -7903,9 +7899,14 @@ impl Element for EditorElement {
line_height: Some(self.style.text.line_height),
..Default::default()
};
- let focus_handle = self.editor.focus_handle(cx);
- window.set_view_id(self.editor.entity_id());
- window.set_focus_handle(&focus_handle, cx);
+
+ let is_minimap = self.editor.read(cx).mode.is_minimap();
+
+ if !is_minimap {
+ let focus_handle = self.editor.focus_handle(cx);
+ window.set_view_id(self.editor.entity_id());
+ window.set_focus_handle(&focus_handle, cx);
+ }
let rem_size = self.rem_size(cx);
window.with_rem_size(rem_size, |window| {
@@ -8343,18 +8344,22 @@ impl Element for EditorElement {
window,
cx,
);
- let new_renrerer_widths = line_layouts
- .iter()
- .flat_map(|layout| &layout.fragments)
- .filter_map(|fragment| {
- if let LineFragment::Element { id, size, .. } = fragment {
- Some((*id, size.width))
- } else {
- None
- }
- });
- if self.editor.update(cx, |editor, cx| {
- editor.update_renderer_widths(new_renrerer_widths, cx)
+ let new_renderer_widths = (!is_minimap).then(|| {
+ line_layouts
+ .iter()
+ .flat_map(|layout| &layout.fragments)
+ .filter_map(|fragment| {
+ if let LineFragment::Element { id, size, .. } = fragment {
+ Some((*id, size.width))
+ } else {
+ None
+ }
+ })
+ });
+ if new_renderer_widths.is_some_and(|new_renderer_widths| {
+ self.editor.update(cx, |editor, cx| {
+ editor.update_renderer_widths(new_renderer_widths, cx)
+ })
}) {
// If the fold widths have changed, we need to prepaint
// the element again to account for any changes in
@@ -8417,27 +8422,31 @@ impl Element for EditorElement {
let sticky_header_excerpt_id =
sticky_header_excerpt.as_ref().map(|top| top.excerpt.id);
- let blocks = window.with_element_namespace("blocks", |window| {
- self.render_blocks(
- start_row..end_row,
- &snapshot,
- &hitbox,
- &text_hitbox,
- editor_width,
- &mut scroll_width,
- &editor_margins,
- em_width,
- gutter_dimensions.full_width(),
- line_height,
- &mut line_layouts,
- &local_selections,
- &selected_buffer_ids,
- is_row_soft_wrapped,
- sticky_header_excerpt_id,
- window,
- cx,
- )
- });
+ let blocks = (!is_minimap)
+ .then(|| {
+ window.with_element_namespace("blocks", |window| {
+ self.render_blocks(
+ start_row..end_row,
+ &snapshot,
+ &hitbox,
+ &text_hitbox,
+ editor_width,
+ &mut scroll_width,
+ &editor_margins,
+ em_width,
+ gutter_dimensions.full_width(),
+ line_height,
+ &mut line_layouts,
+ &local_selections,
+ &selected_buffer_ids,
+ is_row_soft_wrapped,
+ sticky_header_excerpt_id,
+ window,
+ cx,
+ )
+ })
+ })
+ .unwrap_or_else(|| Ok((Vec::default(), HashMap::default())));
let (mut blocks, row_block_types) = match blocks {
Ok(blocks) => blocks,
Err(resized_blocks) => {
@@ -8969,19 +8978,21 @@ impl Element for EditorElement {
window: &mut Window,
cx: &mut App,
) {
- let focus_handle = self.editor.focus_handle(cx);
- let key_context = self
- .editor
- .update(cx, |editor, cx| editor.key_context(window, cx));
-
- window.set_key_context(key_context);
- window.handle_input(
- &focus_handle,
- ElementInputHandler::new(bounds, self.editor.clone()),
- cx,
- );
- self.register_actions(window, cx);
- self.register_key_listeners(window, cx, layout);
+ if !layout.mode.is_minimap() {
+ let focus_handle = self.editor.focus_handle(cx);
+ let key_context = self
+ .editor
+ .update(cx, |editor, cx| editor.key_context(window, cx));
+
+ window.set_key_context(key_context);
+ window.handle_input(
+ &focus_handle,
+ ElementInputHandler::new(bounds, self.editor.clone()),
+ cx,
+ );
+ self.register_actions(window, cx);
+ self.register_key_listeners(window, cx, layout);
+ }
let text_style = TextStyleRefinement {
font_size: Some(self.style.text.font_size),
@@ -10290,7 +10301,6 @@ mod tests {
height: Some(3),
render: Arc::new(|cx| div().h(3. * cx.window.line_height()).into_any()),
priority: 0,
- render_in_minimap: true,
}],
None,
cx,
@@ -297,7 +297,6 @@ fn conflicts_updated(
move |cx| render_conflict_buttons(&conflict, excerpt_id, editor_handle.clone(), cx)
}),
priority: 0,
- render_in_minimap: true,
})
}
let new_block_ids = editor.insert_blocks(blocks, None, cx);
@@ -90,7 +90,6 @@ impl EditorBlock {
style: BlockStyle::Sticky,
render: Self::create_output_area_renderer(execution_view.clone(), on_close.clone()),
priority: 0,
- render_in_minimap: false,
};
let block_id = editor.insert_blocks([block], None, cx)[0];
@@ -37,6 +37,48 @@ development build, run Zed with the following environment variable set:
ZED_DEVELOPMENT_USE_KEYCHAIN=1
```
+## Performance Measurements
+
+Zed includes a frame time measurement system that can be used to profile how long it takes to render each frame. This is particularly useful when comparing rendering performance between different versions or when optimizing frame rendering code.
+
+### Using ZED_MEASUREMENTS
+
+To enable performance measurements, set the `ZED_MEASUREMENTS` environment variable:
+
+```sh
+export ZED_MEASUREMENTS=1
+```
+
+When enabled, Zed will print frame rendering timing information to stderr, showing how long each frame takes to render.
+
+### Performance Comparison Workflow
+
+Here's a typical workflow for comparing frame rendering performance between different versions:
+
+1. **Enable measurements:**
+
+ ```sh
+ export ZED_MEASUREMENTS=1
+ ```
+
+2. **Test the first version:**
+
+ - Checkout the commit you want to measure
+ - Run Zed in release mode and use it for 5-10 seconds: `cargo run --release &> version-a`
+
+3. **Test the second version:**
+
+ - Checkout another commit you want to compare
+ - Run Zed in release mode and use it for 5-10 seconds: `cargo run --release &> version-b`
+
+4. **Generate comparison:**
+
+ ```sh
+ script/histogram version-a version-b
+ ```
+
+The `script/histogram` tool can accept as many measurement files as you like and will generate a histogram visualization comparing the frame rendering performance data between the provided versions.
+
## Contributor links
- [CONTRIBUTING.md](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md)