@@ -44,12 +44,13 @@ pub struct Application {
44 compositor: Compositor,
44 compositor: Compositor,
45 editor: Editor,
45 editor: Editor,
47 theme_loader: Arc<theme::Loader>,
49 theme_loader: Arc<theme::Loader>,
48 syn_loader: Arc<syntax::Loader>,
50 syn_loader: Arc<syntax::Loader>,
49− callbacks: LspCallbacks,
52+ callbacks: LspCallbacks,
51 lsp_progress: LspProgressMap,
53 lsp_progress: LspProgressMap,
52− lsp_display_messages: bool,
55impl Application {
56impl Application {
@@ -86,7 +87,7 @@ impl Application {
87 let mut editor = Editor::new(size, theme_loader.clone(), syn_loader.clone());
88 let mut editor = Editor::new(size, theme_loader.clone(), syn_loader.clone());
89− let mut editor_view = Box::new(ui::EditorView::new(config.keymaps));
90+ let mut editor_view = Box::new(ui::EditorView::new(config.keymaps.clone()));
90 compositor.push(editor_view);
91 compositor.push(editor_view);
92 if !args.files.is_empty() {
93 if !args.files.is_empty() {
@@ -115,11 +116,13 @@ impl Application {
115 compositor,
116 compositor,
118 theme_loader,
121 theme_loader,
119 syn_loader,
122 syn_loader,
120 callbacks: FuturesUnordered::new(),
124 callbacks: FuturesUnordered::new(),
121 lsp_progress: LspProgressMap::new(),
125 lsp_progress: LspProgressMap::new(),
122− lsp_display_messages: config.lsp.display_messages,
@@ -205,6 +208,15 @@ impl Application {
205 server_id: usize,
208 server_id: usize,
207 use helix_lsp::{Call, MethodCall, Notification};
210 use helix_lsp::{Call, MethodCall, Notification};
211+ let editor_view = self
213+ .find(std::any::type_name::<ui::EditorView>())
214+ .expect("expected at least one EditorView");
215+ let editor_view = editor_view
217+ .downcast_mut::<ui::EditorView>()
208 match call {
220 match call {
209 Call::Notification(helix_lsp::jsonrpc::Notification { method, params, .. }) => {
221 Call::Notification(helix_lsp::jsonrpc::Notification { method, params, .. }) => {
210 let notification = match Notification::parse(&method, params) {
222 let notification = match Notification::parse(&method, params) {
@@ -313,15 +325,7 @@ impl Application {
314 self.lsp_progress.end_progress(server_id, &token);
326 self.lsp_progress.end_progress(server_id, &token);
315 if !self.lsp_progress.is_progressing(server_id) {
327 if !self.lsp_progress.is_progressing(server_id) {
318− .find(std::any::type_name::<ui::EditorView>())
321− ui.as_any_mut().downcast_mut::<ui::EditorView>()
323− ui.spinners_mut().get_or_create(server_id).stop();
328+ editor_view.spinners_mut().get_or_create(server_id).stop();
326 self.editor.clear_status();
330 self.editor.clear_status();
@@ -362,19 +366,13 @@ impl Application {
362 if let lsp::WorkDoneProgress::End(_) = work {
366 if let lsp::WorkDoneProgress::End(_) = work {
363 self.lsp_progress.end_progress(server_id, &token);
367 self.lsp_progress.end_progress(server_id, &token);
364 if !self.lsp_progress.is_progressing(server_id) {
368 if !self.lsp_progress.is_progressing(server_id) {
367− .find(std::any::type_name::<ui::EditorView>())
369− if let Some(ui) = ui.as_any_mut().downcast_mut::<ui::EditorView>() {
370− ui.spinners_mut().get_or_create(server_id).stop();
369+ editor_view.spinners_mut().get_or_create(server_id).stop();
374 self.lsp_progress.update(server_id, token, work);
372 self.lsp_progress.update(server_id, token, work);
377− if self.lsp_display_messages {
375+ if self.config.lsp.display_messages {
378 self.editor.set_status(status);
376 self.editor.set_status(status);
380 self.render();
378 self.render();
@@ -400,16 +398,10 @@ impl Application {
400 MethodCall::WorkDoneProgressCreate(params) => {
398 MethodCall::WorkDoneProgressCreate(params) => {
401 self.lsp_progress.create(server_id, params.token);
399 self.lsp_progress.create(server_id, params.token);
405− .find(std::any::type_name::<ui::EditorView>())
407− if let Some(ui) = ui.as_any_mut().downcast_mut::<ui::EditorView>() {
408− let spinner = ui.spinners_mut().get_or_create(server_id);
401+ let spinner = editor_view.spinners_mut().get_or_create(server_id);
409− if spinner.is_stopped() {
402+ if spinner.is_stopped() {
410− spinner.start();
403+ spinner.start();
414 let doc = self.editor.documents().find(|doc| {
406 let doc = self.editor.documents().find(|doc| {
415 doc.language_server()
407 doc.language_server()