From 48373d4a2b6402dce91ebcdf29b6341fcf0ba302 Mon Sep 17 00:00:00 2001 From: Michael Davis Date: Thu, 31 Aug 2023 01:12:32 -0500 Subject: [PATCH] Clear completion when switching windows via click (#8118) The completion component assumes that it operates on the same View but it's possible to break this assumption by switching windows through left-clicking. I believe we should clear the completion menu when switching windows to fix this. This change fixes a panic for this scenario: * Open a buffer with LSP completion available * Split the window (for example 'v') * Enter insert mode and trigger the completion menu * Select a completion candidate (for example with '') * Switch to the original window by left-clicking in its area * Enter insert mode and make edits (for example 'o') This will trip the 'assert_eq' in Document::restore. --- helix-term/src/ui/editor.rs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/helix-term/src/ui/editor.rs b/helix-term/src/ui/editor.rs index 0840749f..dd6fff08 100644 --- a/helix-term/src/ui/editor.rs +++ b/helix-term/src/ui/editor.rs @@ -1073,6 +1073,7 @@ impl EditorView { let editor = &mut cxt.editor; if let Some((pos, view_id)) = pos_and_view(editor, row, column, true) { + let prev_view_id = view!(editor).id; let doc = doc_mut!(editor, &view!(editor, view_id).doc); if modifiers == KeyModifiers::ALT { @@ -1082,6 +1083,10 @@ impl EditorView { doc.set_selection(view_id, Selection::point(pos)); } + if view_id != prev_view_id { + self.clear_completion(editor); + } + editor.focus(view_id); editor.ensure_cursor_in_view(view_id);