Merge pull request #1109 from zed-industries/fix-vim-clearing-selections

Avoid collapsing selections on editor creation when vim_mode is disabled
This commit is contained in:
Max Brunsfeld 2022-06-06 10:32:12 -07:00 committed by GitHub
commit 436c989e4b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -143,6 +143,17 @@ impl Vim {
matches!(state.mode, Mode::Visual { line: true }); matches!(state.mode, Mode::Visual { line: true });
let context_layer = state.keymap_context_layer(); let context_layer = state.keymap_context_layer();
editor.set_keymap_context_layer::<Self>(context_layer); editor.set_keymap_context_layer::<Self>(context_layer);
editor.change_selections(None, cx, |s| {
s.move_with(|map, selection| {
selection.set_head(
map.clip_point(selection.head(), Bias::Left),
selection.goal,
);
if state.empty_selections_only() {
selection.collapse_to(selection.head(), selection.goal)
}
});
})
} else { } else {
editor.set_cursor_shape(CursorShape::Bar, cx); editor.set_cursor_shape(CursorShape::Bar, cx);
editor.set_clip_at_line_ends(false, cx); editor.set_clip_at_line_ends(false, cx);
@ -150,18 +161,6 @@ impl Vim {
editor.selections.line_mode = false; editor.selections.line_mode = false;
editor.remove_keymap_context_layer::<Self>(); editor.remove_keymap_context_layer::<Self>();
} }
editor.change_selections(None, cx, |s| {
s.move_with(|map, selection| {
selection.set_head(
map.clip_point(selection.head(), Bias::Left),
selection.goal,
);
if state.empty_selections_only() {
selection.collapse_to(selection.head(), selection.goal)
}
});
})
}); });
} }
} }
@ -191,6 +190,14 @@ mod test {
cx.simulate_keystrokes(["h", "j", "k", "l"]); cx.simulate_keystrokes(["h", "j", "k", "l"]);
cx.assert_editor_state("hjkl|"); cx.assert_editor_state("hjkl|");
// Selections aren't changed if editor is blurred but vim-mode is still disabled.
cx.set_state("[hjkl}", Mode::Normal);
cx.assert_editor_state("[hjkl}");
cx.update_editor(|_, cx| cx.blur());
cx.assert_editor_state("[hjkl}");
cx.update_editor(|_, cx| cx.focus_self());
cx.assert_editor_state("[hjkl}");
// Enabling dynamically sets vim mode again and restores normal mode // Enabling dynamically sets vim mode again and restores normal mode
cx.enable_vim(); cx.enable_vim();
assert_eq!(cx.mode(), Mode::Normal); assert_eq!(cx.mode(), Mode::Normal);