From 2a50c3d3ba40fe0233176c4862e21dd6677906cd Mon Sep 17 00:00:00 2001 From: Justin Cherniak Date: Fri, 25 Apr 2025 23:48:23 -0700 Subject: [PATCH] Add "mouseSelectionGoesIntoVisualModeFromInsert" to allow for insert -> visual transition without changing current behavior. Fixes #9214 --- package.json | 5 +++++ src/configuration/configuration.ts | 1 + src/configuration/iconfiguration.ts | 7 ++++++- src/mode/modeHandler.ts | 3 ++- test/testConfiguration.ts | 1 + 5 files changed, 15 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 556292483a2..41dd8a65b5f 100644 --- a/package.json +++ b/package.json @@ -965,6 +965,11 @@ "description": "If enabled, dragging with the mouse activates Visual mode.", "default": true }, + "vim.mouseSelectionGoesIntoVisualModeFromInsert": { + "type": "boolean", + "markdownDescription": "If enabled, dragging with the mouse activates Visual mode even when starting from Insert mode. Requires `vim.mouseSelectionGoesIntoVisualMode` to be true.", + "default": false + }, "vim.disableExtension": { "type": "boolean", "description": "Disables the VSCodeVim extension. The extension will continue to be loaded and activated, but Vim functionality will be disabled.", diff --git a/src/configuration/configuration.ts b/src/configuration/configuration.ts index 0f0f53ac158..a7ef384f5b3 100644 --- a/src/configuration/configuration.ts +++ b/src/configuration/configuration.ts @@ -414,6 +414,7 @@ class Configuration implements IConfiguration { visualstar = false; mouseSelectionGoesIntoVisualMode = true; + mouseSelectionGoesIntoVisualModeFromInsert = false; changeWordIncludesWhitespace = false; diff --git a/src/configuration/iconfiguration.ts b/src/configuration/iconfiguration.ts index f84e9bfc628..5c43de328f2 100644 --- a/src/configuration/iconfiguration.ts +++ b/src/configuration/iconfiguration.ts @@ -322,10 +322,15 @@ export interface IConfiguration { visualstar: boolean; /** - * Does dragging with the mouse put you into visual mode + * Does dragging with the mouse put you into visual mode (except for insert mode) */ mouseSelectionGoesIntoVisualMode: boolean; + /** + * Does dragging with the mouse put you into visual mode when you're in insert mode + */ + mouseSelectionGoesIntoVisualModeFromInsert: boolean; + /** * Includes trailing whitespace when changing word. */ diff --git a/src/mode/modeHandler.ts b/src/mode/modeHandler.ts index c0a73b41702..3dd7132c4d2 100644 --- a/src/mode/modeHandler.ts +++ b/src/mode/modeHandler.ts @@ -414,7 +414,8 @@ export class ModeHandler implements vscode.Disposable, IModeHandler { if ( configuration.mouseSelectionGoesIntoVisualMode && !isVisualMode(this.vimState.currentMode) && - this.currentMode !== Mode.Insert + (this.currentMode !== Mode.Insert || + configuration.mouseSelectionGoesIntoVisualModeFromInsert) ) { await this.setCurrentMode(Mode.Visual); diff --git a/test/testConfiguration.ts b/test/testConfiguration.ts index 614976d110e..4cacec5bc2c 100644 --- a/test/testConfiguration.ts +++ b/test/testConfiguration.ts @@ -99,6 +99,7 @@ export class Configuration implements IConfiguration { matchpairs = '(:),{:},[:]'; visualstar = false; mouseSelectionGoesIntoVisualMode = true; + mouseSelectionGoesIntoVisualModeFromInsert = false; changeWordIncludesWhitespace = false; foldfix = false; disableExtension = false;