From a78f66fd36d6a6d38a7ec4395ae84d96c615a14a Mon Sep 17 00:00:00 2001
From: filipp <filipp.vakhitov@jetbrains.com>
Date: Tue, 14 Mar 2023 00:10:05 +0200
Subject: [PATCH] Better multiple caret support for surround

---
 .../vim/extension/surround/VimSurroundExtension.kt | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/src/main/java/com/maddyhome/idea/vim/extension/surround/VimSurroundExtension.kt b/src/main/java/com/maddyhome/idea/vim/extension/surround/VimSurroundExtension.kt
index 4210dba46..f909183a4 100644
--- a/src/main/java/com/maddyhome/idea/vim/extension/surround/VimSurroundExtension.kt
+++ b/src/main/java/com/maddyhome/idea/vim/extension/surround/VimSurroundExtension.kt
@@ -239,19 +239,19 @@ internal class VimSurroundExtension : VimExtension {
 
       val pair = getOrInputPair(c, ijEditor) ?: return false
       // XXX: Will it work with line-wise or block-wise selections?
-      val range = getSurroundRange(ijEditor) ?: return false
+      val range = getSurroundRange(editor.currentCaret()) ?: return false
       performSurround(pair, range, editor.currentCaret())
       // Jump back to start
       executeNormalWithoutMapping(injector.parser.parseKeys("`["), ijEditor)
       return true
     }
 
-    // todo make it multicaret
-    private fun getSurroundRange(editor: Editor): TextRange? {
-      val vimEditor = editor.vim
-      return when (editor.editorMode) {
-        VimStateMachine.Mode.COMMAND -> injector.markService.getChangeMarks(vimEditor.primaryCaret())
-        VimStateMachine.Mode.VISUAL -> editor.caretModel.primaryCaret.run { TextRange(selectionStart, selectionEnd) }
+    private fun getSurroundRange(caret: VimCaret): TextRange? {
+      val editor = caret.editor
+      val ijEditor = editor.ij
+      return when (ijEditor.editorMode) {
+        VimStateMachine.Mode.COMMAND -> injector.markService.getChangeMarks(caret)
+        VimStateMachine.Mode.VISUAL -> caret.run { TextRange(selectionStart, selectionEnd) }
         else -> null
       }
     }