From cde9bc94e6627739788a959dd94f9e700eeed518 Mon Sep 17 00:00:00 2001
From: Filipp Vakhitov <filipp.vakhitov@jetbrains.com>
Date: Mon, 16 Sep 2024 00:44:24 +0300
Subject: [PATCH] Fix select mode for immutable caret

Due to implementation details, caret cannot be moved after setting selection
---
 .../action/motion/select/SelectEnableCharacterModeAction.kt | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/action/motion/select/SelectEnableCharacterModeAction.kt b/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/action/motion/select/SelectEnableCharacterModeAction.kt
index 7bfc77fee..2266c2b91 100644
--- a/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/action/motion/select/SelectEnableCharacterModeAction.kt
+++ b/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/action/motion/select/SelectEnableCharacterModeAction.kt
@@ -37,10 +37,10 @@ class SelectEnableCharacterModeAction : VimActionHandler.SingleExecution() {
   ): Boolean {
     editor.nativeCarets().sortedByDescending { it.offset }.forEach { caret ->
       val lineEnd = editor.getLineEndForOffset(caret.offset)
+      val offset = caret.offset
       val nextOffset = (caret.offset + 1).coerceAtMost(lineEnd)
-      caret.vimSetSystemSelectionSilently(caret.offset, nextOffset)
-      val updatedCaret = editor.findLastVersionOfCaret(caret) ?: return@forEach
-      updatedCaret.moveToInlayAwareOffset(nextOffset)
+      val updatedCaret = caret.moveToInlayAwareOffset(nextOffset)
+      updatedCaret.vimSetSystemSelectionSilently(offset, nextOffset)
     }
     return injector.visualMotionGroup.enterSelectMode(editor, SelectionType.CHARACTER_WISE)
   }