Change summary
crates/editor/src/editor.rs | 18 +++++++++++++-----
crates/vim/src/vim.rs | 7 +++++++
2 files changed, 20 insertions(+), 5 deletions(-)
Detailed changes
@@ -11925,12 +11925,19 @@ impl Editor {
)),
cx,
);
- let editor_settings = EditorSettings::get_global(cx);
- if let Some(cursor_shape) = editor_settings.cursor_shape {
- self.cursor_shape = cursor_shape;
+
+ let old_cursor_shape = self.cursor_shape;
+
+ {
+ let editor_settings = EditorSettings::get_global(cx);
+ self.scroll_manager.vertical_scroll_margin = editor_settings.vertical_scroll_margin;
+ self.show_breadcrumbs = editor_settings.toolbar.breadcrumbs;
+ self.cursor_shape = editor_settings.cursor_shape.unwrap_or_default();
+ }
+
+ if old_cursor_shape != self.cursor_shape {
+ cx.emit(EditorEvent::CursorShapeChanged);
}
- self.scroll_manager.vertical_scroll_margin = editor_settings.vertical_scroll_margin;
- self.show_breadcrumbs = editor_settings.toolbar.breadcrumbs;
let project_settings = ProjectSettings::get_global(cx);
self.serialize_dirty_buffers = project_settings.session.restore_unsaved_buffers;
@@ -13127,6 +13134,7 @@ pub enum EditorEvent {
TransactionBegun {
transaction_id: clock::Lamport,
},
+ CursorShapeChanged,
}
impl EventEmitter<EditorEvent> for Editor {}
@@ -389,6 +389,7 @@ impl Vim {
}
EditorEvent::Edited { .. } => self.push_to_change_list(cx),
EditorEvent::FocusedIn => self.sync_vim_settings(cx),
+ EditorEvent::CursorShapeChanged => self.cursor_shape_changed(cx),
_ => {}
}
}
@@ -679,6 +680,12 @@ impl Vim {
});
}
+ fn cursor_shape_changed(&mut self, cx: &mut ViewContext<Self>) {
+ self.update_editor(cx, |vim, editor, cx| {
+ editor.set_cursor_shape(vim.cursor_shape(), cx);
+ });
+ }
+
fn update_editor<S>(
&mut self,
cx: &mut ViewContext<Self>,