diff --git a/crates/editor/src/actions.rs b/crates/editor/src/actions.rs index feeb6f9357a853a6f81a34e531b1e28c8f6229fe..1c44ccc6f31cf2d3f0eaeb05de5631684211cd30 100644 --- a/crates/editor/src/actions.rs +++ b/crates/editor/src/actions.rs @@ -273,6 +273,7 @@ gpui::actions!( ToggleHunkDiff, ToggleInlayHints, ToggleLineNumbers, + ToggleIndentGuides, ToggleSoftWrap, Transpose, Undo, diff --git a/crates/editor/src/editor.rs b/crates/editor/src/editor.rs index e2b0f78d790694016f7d53b2253f0d28539fa779..1d75d41075f99053708ee6649fe75d050657f4f9 100644 --- a/crates/editor/src/editor.rs +++ b/crates/editor/src/editor.rs @@ -9640,6 +9640,22 @@ impl Editor { cx.notify(); } + pub fn toggle_indent_guides(&mut self, _: &ToggleIndentGuides, cx: &mut ViewContext) { + let currently_enabled = self.should_show_indent_guides(cx); + self.show_indent_guides = Some(!currently_enabled); + cx.notify(); + } + + fn should_show_indent_guides(&self, cx: &mut ViewContext) -> bool { + self.show_indent_guides.unwrap_or_else(|| { + self.buffer + .read(cx) + .settings_at(0, cx) + .indent_guides + .enabled + }) + } + pub fn toggle_line_numbers(&mut self, _: &ToggleLineNumbers, cx: &mut ViewContext) { let mut editor_settings = EditorSettings::get_global(cx).clone(); editor_settings.gutter.line_numbers = !editor_settings.gutter.line_numbers; diff --git a/crates/editor/src/element.rs b/crates/editor/src/element.rs index 8379451c40bd3caf90a191ad53f9a7aa990c7073..7d6e05c2638e97e5666ab24cb535b95666646265 100644 --- a/crates/editor/src/element.rs +++ b/crates/editor/src/element.rs @@ -318,6 +318,7 @@ impl EditorElement { register_action(view, cx, Editor::open_excerpts_in_split); register_action(view, cx, Editor::toggle_soft_wrap); register_action(view, cx, Editor::toggle_line_numbers); + register_action(view, cx, Editor::toggle_indent_guides); register_action(view, cx, Editor::toggle_inlay_hints); register_action(view, cx, hover_popover::hover); register_action(view, cx, Editor::reveal_in_finder); @@ -1473,10 +1474,9 @@ impl EditorElement { snapshot: &DisplaySnapshot, cx: &mut WindowContext, ) -> Option> { - let indent_guides = - self.editor - .read(cx) - .indent_guides(visible_buffer_range, snapshot, cx)?; + let indent_guides = self.editor.update(cx, |editor, cx| { + editor.indent_guides(visible_buffer_range, snapshot, cx) + })?; let active_indent_guide_indices = self.editor.update(cx, |editor, cx| { editor diff --git a/crates/editor/src/indent_guides.rs b/crates/editor/src/indent_guides.rs index 453f5f3b8f47b1c4a5cb1c8cb51e02f2ac829bfd..eb63050f70991c0d742ccbb39264b6cf370e6708 100644 --- a/crates/editor/src/indent_guides.rs +++ b/crates/editor/src/indent_guides.rs @@ -35,14 +35,11 @@ impl Editor { &self, visible_buffer_range: Range, snapshot: &DisplaySnapshot, - cx: &AppContext, + cx: &mut ViewContext, ) -> Option> { - if self.show_indent_guides == Some(false) { - return None; - } + let enabled = self.should_show_indent_guides(cx); - let settings = self.buffer.read(cx).settings_at(0, cx); - if settings.indent_guides.enabled { + if enabled { Some(indent_guides_in_range(visible_buffer_range, snapshot, cx)) } else { None