Skip to content

Commit

Permalink
Clear completion when switching windows via click (helix-editor#8118)
Browse files Browse the repository at this point in the history
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 '<C-w>v')
* Enter insert mode and trigger the completion menu
* Select a completion candidate (for example with '<C-n>')
* Switch to the original window by left-clicking in its area
* Enter insert mode and make edits (for example 'o<backspace>')

This will trip the 'assert_eq' in Document::restore.
  • Loading branch information
the-mikedavis committed Aug 31, 2023
1 parent a276726 commit 48373d4
Showing 1 changed file with 5 additions and 0 deletions.
5 changes: 5 additions & 0 deletions helix-term/src/ui/editor.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand All @@ -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);

Expand Down

0 comments on commit 48373d4

Please sign in to comment.