mirror of
https://github.com/chylex/IntelliJ-IdeaVim.git
synced 2025-08-16 22:31:47 +02:00
Compare commits
2 Commits
b7c1ba4f02
...
1acf5d682d
Author | SHA1 | Date | |
---|---|---|---|
1acf5d682d
|
|||
f2832f7dc2
|
@@ -20,7 +20,7 @@ ideaVersion=2025.1
|
||||
# Values for type: https://plugins.jetbrains.com/docs/intellij/tools-gradle-intellij-plugin.html#intellij-extension-type
|
||||
ideaType=IC
|
||||
instrumentPluginCode=true
|
||||
version=chylex-1
|
||||
version=chylex-51
|
||||
javaVersion=21
|
||||
remoteRobotVersion=0.11.23
|
||||
antlrVersion=4.10.1
|
||||
|
@@ -25,15 +25,19 @@ import com.intellij.openapi.diagnostic.thisLogger
|
||||
import com.intellij.openapi.editor.actionSystem.DocCommandGroupId
|
||||
import com.intellij.openapi.progress.util.ProgressIndicatorUtils
|
||||
import com.intellij.openapi.util.NlsContexts
|
||||
import com.intellij.refactoring.actions.BaseRefactoringAction
|
||||
import com.maddyhome.idea.vim.RegisterActions
|
||||
import com.maddyhome.idea.vim.api.ExecutionContext
|
||||
import com.maddyhome.idea.vim.api.NativeAction
|
||||
import com.maddyhome.idea.vim.api.VimActionExecutor
|
||||
import com.maddyhome.idea.vim.api.VimEditor
|
||||
import com.maddyhome.idea.vim.api.injector
|
||||
import com.maddyhome.idea.vim.command.OperatorArguments
|
||||
import com.maddyhome.idea.vim.handler.EditorActionHandlerBase
|
||||
import com.maddyhome.idea.vim.newapi.IjNativeAction
|
||||
import com.maddyhome.idea.vim.newapi.ij
|
||||
import com.maddyhome.idea.vim.state.mode.Mode
|
||||
import com.maddyhome.idea.vim.state.mode.inVisualMode
|
||||
import org.jetbrains.annotations.NonNls
|
||||
import java.awt.Component
|
||||
import javax.swing.JComponent
|
||||
@@ -70,6 +74,12 @@ internal class IjActionExecutor : VimActionExecutor {
|
||||
thisLogger().error("Actions cannot be updated when write-action is running or pending")
|
||||
}
|
||||
|
||||
val startVisualModeType = (editor?.mode as? Mode.VISUAL)?.selectionType
|
||||
val startVisualCaretSelection = if (editor != null && startVisualModeType != null && action.action !is BaseRefactoringAction)
|
||||
editor.primaryCaret().let { Triple(it.offset, it.selectionStart, it.selectionEnd) }
|
||||
else
|
||||
null
|
||||
|
||||
val ijAction = (action as IjNativeAction).action
|
||||
try {
|
||||
isRunningActionFromVim = true
|
||||
@@ -79,6 +89,20 @@ internal class IjActionExecutor : VimActionExecutor {
|
||||
val place = ijAction.choosePlace()
|
||||
val res = ActionManager.getInstance().tryToExecute(ijAction, null, contextComponent, place, true)
|
||||
res.waitFor(5_000)
|
||||
|
||||
if (startVisualModeType != null && startVisualCaretSelection != null) {
|
||||
val primaryCaret = editor.primaryCaret()
|
||||
val endVisualCaretOffset = primaryCaret.offset
|
||||
if (startVisualCaretSelection.first != endVisualCaretOffset) {
|
||||
if (!editor.inVisualMode || (editor.mode as Mode.VISUAL).selectionType != startVisualModeType) {
|
||||
injector.visualMotionGroup.toggleVisual(editor, 1, 0, startVisualModeType)
|
||||
}
|
||||
primaryCaret.moveToOffset(startVisualCaretSelection.first)
|
||||
primaryCaret.setSelection(startVisualCaretSelection.second, startVisualCaretSelection.third)
|
||||
primaryCaret.moveToOffset(endVisualCaretOffset)
|
||||
}
|
||||
}
|
||||
|
||||
return res.isDone
|
||||
} finally {
|
||||
isRunningActionFromVim = false
|
||||
|
Reference in New Issue
Block a user