From ada0523043af3a11c2e22fc7668801ebe79e889a Mon Sep 17 00:00:00 2001 From: Conrad Irwin Date: Fri, 2 Feb 2024 16:36:51 -0700 Subject: [PATCH] Fix mouse selection Co-Authored-By: WindSoilder --- crates/vim/src/vim.rs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/crates/vim/src/vim.rs b/crates/vim/src/vim.rs index d9011c4b3c..41ae6c4f4c 100644 --- a/crates/vim/src/vim.rs +++ b/crates/vim/src/vim.rs @@ -204,7 +204,8 @@ impl Vim { let editor = editor.read(cx); if editor.leader_peer_id().is_none() { let newest = editor.selections.newest::(cx); - local_selections_changed(newest, cx); + let is_multicursor = editor.selections.count() > 1; + local_selections_changed(newest, is_multicursor, cx); } } EditorEvent::InputIgnored { text } => { @@ -626,7 +627,11 @@ impl Settings for VimModeSetting { } } -fn local_selections_changed(newest: Selection, cx: &mut WindowContext) { +fn local_selections_changed( + newest: Selection, + is_multicursor: bool, + cx: &mut WindowContext, +) { Vim::update(cx, |vim, cx| { if vim.enabled { if vim.state().mode == Mode::Normal && !newest.is_empty() { @@ -636,6 +641,7 @@ fn local_selections_changed(newest: Selection, cx: &mut WindowContext) { vim.switch_mode(Mode::Visual, false, cx) } } else if newest.is_empty() + && !is_multicursor && [Mode::Visual, Mode::VisualLine, Mode::VisualBlock].contains(&vim.state().mode) { vim.switch_mode(Mode::Normal, true, cx)